Skip to content

Commit fcb645d

Browse files
committed
feat: add redis configuration and resource
1 parent 8b0785d commit fcb645d

21 files changed

+623
-224
lines changed

priv/config.hocon

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ mysql {
1717

1818
redis {
1919
enable = false
20+
ssl {
21+
enable = false
22+
}
23+
servers = "redis:6379"
24+
redis_type = "single"
25+
pool_size = 8
26+
username = ""
27+
password = ""
28+
database = 0
2029
}
2130

2231

priv/config_schema.avsc

Lines changed: 181 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
{
133133
"name": "batch_size",
134134
"type": "int",
135-
"default": 0,
135+
"default": 1,
136136
"$ui": {
137137
"component": "input-number",
138138
"required": true,
@@ -155,7 +155,7 @@
155155
"name": "ssl",
156156
"type": {
157157
"type": "record",
158-
"name": "SSLRecord",
158+
"name": "MySQLSSLRecord",
159159
"fields": [
160160
{
161161
"name": "enable",
@@ -255,7 +255,186 @@
255255
"label": "$enable_redis_label",
256256
"description": "$enable_redis_desc"
257257
}
258+
},
259+
{
260+
"name": "redis_type",
261+
"type": "string",
262+
"default": "single",
263+
"$ui": {
264+
"component": "select",
265+
"required": true,
266+
"label": "$redis_type_label",
267+
"description": "$redis_type_desc",
268+
"options": [
269+
{ "label": "Single", "value": "single" },
270+
{ "label": "Cluster", "value": "cluster" },
271+
{ "label": "Sentinel", "value": "sentinel" }
272+
]
273+
}
274+
},
275+
{
276+
"name": "servers",
277+
"type": "string",
278+
"default": "127.0.0.1:6379",
279+
"$ui": {
280+
"component": "input",
281+
"required": true,
282+
"label": "$redis_server_label",
283+
"description": "$redis_server_desc"
284+
}
285+
},
286+
{
287+
"name": "database",
288+
"type": "int",
289+
"default": 0,
290+
"$ui": {
291+
"component": "input",
292+
"required": true,
293+
"label": "$redis_database_label",
294+
"description": "$redis_database_desc"
295+
}
296+
},
297+
{
298+
"name": "pool_size",
299+
"type": "int",
300+
"default": 8,
301+
"$ui": {
302+
"component": "input-number",
303+
"required": true,
304+
"label": "$redis_pool_size_label",
305+
"description": "$redis_pool_size_desc"
306+
}
307+
},
308+
{
309+
"name": "username",
310+
"type": "string",
311+
"default": "",
312+
"$ui": {
313+
"component": "input",
314+
"required": true,
315+
"label": "$redis_username_label",
316+
"description": "$redis_username_desc"
317+
}
318+
},
319+
{
320+
"name": "password",
321+
"type": "string",
322+
"default": "",
323+
"$ui": {
324+
"component": "input-password",
325+
"required": false,
326+
"label": "$redis_password_label",
327+
"description": "$redis_password_desc"
328+
}
329+
},
330+
{
331+
"name": "batch_size",
332+
"type": "int",
333+
"default": 1,
334+
"$ui": {
335+
"component": "input-number",
336+
"required": true,
337+
"label": "$redis_batch_size_label",
338+
"description": "$redis_batch_size_desc"
339+
}
340+
},
341+
{
342+
"name": "batch_time",
343+
"type": "int",
344+
"default": 100,
345+
"$ui": {
346+
"component": "input-number",
347+
"required": true,
348+
"label": "$redis_batch_time_label",
349+
"description": "$redis_batch_time_desc"
350+
}
351+
},
352+
{
353+
"name": "ssl",
354+
"type": {
355+
"type": "record",
356+
"name": "RedisSSLRecord",
357+
"fields": [
358+
{
359+
"name": "enable",
360+
"type": "boolean",
361+
"default": false,
362+
"$ui": {
363+
"component": "switch",
364+
"required": true,
365+
"label": "$redis_ssl_enable_label",
366+
"description": "$redis_ssl_enable_desc"
367+
}
368+
},
369+
{
370+
"name": "server_name_indication",
371+
"type": "string",
372+
"default": "disable",
373+
"$ui": {
374+
"component": "input",
375+
"required": false,
376+
"label": "$redis_ssl_server_name_indication_label",
377+
"description": "$redis_ssl_server_name_indication_desc"
378+
}
379+
},
380+
{
381+
"name": "cacertfile",
382+
"type": "string",
383+
"default": "",
384+
"$ui": {
385+
"component": "input",
386+
"required": false,
387+
"label": "$redis_ssl_cacertfile_label",
388+
"description": "$redis_ssl_cacertfile_desc"
389+
}
390+
},
391+
{
392+
"name": "certfile",
393+
"type": "string",
394+
"default": "",
395+
"$ui": {
396+
"component": "input",
397+
"required": false,
398+
"label": "$redis_ssl_certfile_label",
399+
"description": "$redis_ssl_certfile_desc"
400+
}
401+
},
402+
{
403+
"name": "keyfile",
404+
"type": "string",
405+
"default": "",
406+
"$ui": {
407+
"component": "input",
408+
"required": false,
409+
"label": "$redis_ssl_keyfile_label",
410+
"description": "$redis_ssl_keyfile_desc"
411+
}
412+
},
413+
{
414+
"name": "verify",
415+
"type": "string",
416+
"default": "verify_none",
417+
"$ui": {
418+
"component": "select",
419+
"required": false,
420+
"label": "$redis_ssl_verify_label",
421+
"description": "$redis_ssl_verify_desc",
422+
"options": [
423+
{
424+
"label": "verify_none",
425+
"value": "verify_none"
426+
},
427+
{
428+
"label": "verify_peer",
429+
"value": "verify_peer"
430+
}
431+
]
432+
}
433+
}
434+
]
435+
}
258436
}
437+
259438
]
260439
}
261440
}

src/emqx_omp.erl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ on_config_changed(OldConf, NewConf) ->
5353
?SLOG(info, #{
5454
msg => "offline_message_plugin_config_changed", old_conf => OldConf, new_conf => NewConf
5555
}),
56+
%% MySQL
5657
DefaultConf = #{<<"enable">> => false},
5758
OldMysqlConf = maps:get(<<"mysql">>, OldConf, DefaultConf),
58-
OldRedisConf = maps:get(<<"redis">>, OldConf, DefaultConf),
5959
NewMysqlConf = maps:get(<<"mysql">>, NewConf, DefaultConf),
60-
NewRedisConf = maps:get(<<"redis">>, NewConf, DefaultConf),
6160
ok = emqx_omp_mysql:on_config_changed(OldMysqlConf, NewMysqlConf),
61+
%% Redis
62+
OldRedisConf = maps:get(<<"redis">>, OldConf, DefaultConf),
63+
NewRedisConf = maps:get(<<"redis">>, NewConf, DefaultConf),
6264
ok = emqx_omp_redis:on_config_changed(OldRedisConf, NewRedisConf),
6365
ok.
6466

src/emqx_omp_mysql.erl

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -377,49 +377,20 @@ make_mysql_resource_config(#{<<"insert_message_sql">> := InsertMessageStatement}
377377
],
378378
RawConfig0
379379
),
380-
SslConfig = make_ssl_config(RawMysqlConfig0),
381-
RawMysqlConfig = RawMysqlConfig0#{<<"ssl">> => SslConfig},
382-
383-
MysqlConfig0 =
384-
case
385-
emqx_hocon:check(
386-
emqx_mysql,
387-
#{<<"config">> => RawMysqlConfig},
388-
#{atom_key => true}
389-
)
390-
of
391-
{ok, #{config := Config}} ->
392-
Config;
393-
{error, Reason} ->
394-
error({invalid_omp_mysql_config, Reason})
395-
end,
380+
RawMysqlConfig = emqx_omp_utils:fix_ssl_config(RawMysqlConfig0),
381+
382+
MysqlConfig0 = emqx_omp_utils:check_config(emqx_mysql, RawMysqlConfig),
396383

397384
MysqlConfig = MysqlConfig0#{
398385
prepare_statement => #{
399386
insert_message => InsertMessageStatement
400387
}
401388
},
402389

403-
ResourceOpts = #{
404-
start_after_created => true,
405-
batch_size => 10,
406-
batch_time => 50
407-
},
390+
ResourceOpts = emqx_omp_utils:make_resource_opts(RawConfig0),
408391

409392
{MysqlConfig, ResourceOpts}.
410393

411-
make_ssl_config(#{<<"ssl">> := SslConfig}) ->
412-
maps:filter(
413-
fun
414-
(_K, <<>>) ->
415-
false;
416-
(_K, _V) ->
417-
true
418-
end,
419-
SslConfig
420-
);
421-
make_ssl_config(_) ->
422-
#{<<"enable">> => false}.
423394

424395
sync_query(Sql, Params) ->
425396
emqx_resource:simple_sync_query(?RESOURCE_ID, {sql, Sql, Params, ?TIMEOUT}).

0 commit comments

Comments
 (0)