Skip to content

Commit

Permalink
Merge pull request #11617 from zhongwencool/rule-engine-console-args
Browse files Browse the repository at this point in the history
fix: keep builtin_console actions not complain args
  • Loading branch information
zhongwencool committed Sep 18, 2023
2 parents fae0545 + 8b6d5d4 commit c868264
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 12 deletions.
2 changes: 1 addition & 1 deletion apps/emqx_management/src/emqx_management.app.src
Expand Up @@ -2,7 +2,7 @@
{application, emqx_management, [
{description, "EMQX Management API and CLI"},
% strict semver, bump manually!
{vsn, "5.0.29"},
{vsn, "5.0.30"},
{modules, []},
{registered, [emqx_management_sup]},
{applications, [kernel, stdlib, emqx_plugins, minirest, emqx, emqx_ctl, emqx_bridge_http]},
Expand Down
2 changes: 1 addition & 1 deletion apps/emqx_management/src/emqx_mgmt_api_clients.erl
Expand Up @@ -647,7 +647,7 @@ set_keepalive(put, #{bindings := #{clientid := ClientID}, body := Body}) ->
error ->
{400, 'BAD_REQUEST', "Interval Not Found"};
{ok, Interval} ->
case emqx_mgmt:set_keepalive(emqx_mgmt_util:urldecode(ClientID), Interval) of
case emqx_mgmt:set_keepalive(ClientID, Interval) of
ok -> lookup(#{clientid => ClientID});
{error, not_found} -> {404, ?CLIENTID_NOT_FOUND};
{error, Reason} -> {400, #{code => 'PARAMS_ERROR', message => Reason}}
Expand Down
14 changes: 9 additions & 5 deletions apps/emqx_rule_engine/src/emqx_rule_actions.erl
Expand Up @@ -45,11 +45,15 @@
%%--------------------------------------------------------------------
parse_action(#{function := ActionFunc} = Action) ->
{Mod, Func} = parse_action_func(ActionFunc),
#{
mod => Mod,
func => Func,
args => pre_process_args(Mod, Func, maps:get(args, Action, #{}))
}.
Res = #{mod => Mod, func => Func},
%% builtin_action_console don't have args field.
%% Attempting to save args to the console action config could cause validation issues
case Action of
#{args := Args} ->
Res#{args => pre_process_args(Mod, Func, Args)};
_ ->
Res
end.

%%--------------------------------------------------------------------
%% callbacks of emqx_rule_action
Expand Down
2 changes: 1 addition & 1 deletion apps/emqx_rule_engine/src/emqx_rule_engine.app.src
Expand Up @@ -2,7 +2,7 @@
{application, emqx_rule_engine, [
{description, "EMQX Rule Engine"},
% strict semver, bump manually!
{vsn, "5.0.25"},
{vsn, "5.0.26"},
{modules, []},
{registered, [emqx_rule_engine_sup, emqx_rule_engine]},
{applications, [kernel, stdlib, rulesql, getopt, emqx_ctl, uuid]},
Expand Down
4 changes: 4 additions & 0 deletions apps/emqx_rule_engine/src/emqx_rule_engine_api.erl
Expand Up @@ -525,6 +525,10 @@ do_format_action(#{mod := Mod, func := Func, args := Args}) ->
#{
function => printable_function_name(Mod, Func),
args => maps:remove(preprocessed_tmpl, Args)
};
do_format_action(#{mod := Mod, func := Func}) ->
#{
function => printable_function_name(Mod, Func)
}.

printable_function_name(emqx_rule_actions, Func) ->
Expand Down
22 changes: 19 additions & 3 deletions apps/emqx_rule_engine/src/emqx_rule_engine_schema.erl
Expand Up @@ -98,10 +98,26 @@ fields("builtin_action_republish") ->
];
fields("builtin_action_console") ->
[
{function, ?HOCON(console, #{desc => ?DESC("console_function")})}
{function, ?HOCON(console, #{desc => ?DESC("console_function")})},
%% we may support some args for the console action in the future
%, {args, sc(map(), #{desc => "The arguments of the built-in 'console' action",
% default => #{}})}

%% "args" needs to be a reserved/ignored field in the schema
%% to maintain compatibility with rule data that may contain
%% it due to a validation bug in previous versions.

%% The "args" field was not validated by the HOCON schema before 5.2.0,
%% which allowed rules to be created with invalid "args" data.
%% In 5.2.1 the validation was added,
%% so existing rules saved with invalid "args" would now fail validation
%% To maintain backward compatibility for existing rule data that may contain invalid "args",
%% the field needs to be included in the schema even though it is not a valid field.
{args,
?HOCON(map(), #{
deprecated => true,
importance => ?IMPORTANCE_HIDDEN,
desc => "The arguments of the built-in 'console' action",
default => #{}
})}
];
fields("user_provided_function") ->
[
Expand Down
Expand Up @@ -30,7 +30,7 @@ rule_engine.rules.my_rule {
metadata = {created_at = 1693918992079}
sql = \"select * from \\\"t/topic\\\" \"
actions = [
{function = console}
{function = console, args = {test = 1}}
{ function = republish
args = {
payload = \"${.}\"
Expand Down

0 comments on commit c868264

Please sign in to comment.