Merge pull request #13290 from kjellwinblad/kjell/format_rule_cli/EMQX-12548

fix: do not crash when showing rule unsing the cmd interface
This commit is contained in:
Ivan Dyachkov 2024-06-20 14:55:33 +02:00 committed by GitHub
commit ba4fb0d3f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 44 additions and 3 deletions

View File

@ -164,7 +164,7 @@
-type root_cfg_key() :: ?ROOT_KEY_ACTIONS | ?ROOT_KEY_SOURCES. -type root_cfg_key() :: ?ROOT_KEY_ACTIONS | ?ROOT_KEY_SOURCES.
-export_type([root_cfg_key/0]). -export_type([root_cfg_key/0, bridge_v2_type/0, bridge_v2_name/0]).
%%==================================================================== %%====================================================================

View File

@ -42,7 +42,9 @@
func := builtin_action_func() | atom(), func := builtin_action_func() | atom(),
args => action_fun_args() args => action_fun_args()
} }
| bridge_channel_id(). | bridge_channel_id()
| {bridge_v2, emqx_bridge_v2:bridge_v2_type(), emqx_bridge_v2:bridge_v2_name()}
| {bridge, emqx_utils_maps:config_key(), emqx_utils_maps:config_key(), bridge_channel_id()}.
-type rule() :: -type rule() ::
#{ #{

View File

@ -95,6 +95,18 @@ format_action(BridgeChannelId) when is_binary(BridgeChannelId) ->
io_lib:format("- Name: ~s\n" io_lib:format("- Name: ~s\n"
" Type: data-bridge\n" " Type: data-bridge\n"
,[BridgeChannelId] ,[BridgeChannelId]
);
format_action({bridge, ActionType, ActionName, _Id}) ->
io_lib:format("- Name: ~p\n"
" Action Type: ~p\n"
" Type: data-bridge\n"
,[ActionName, ActionType]
);
format_action({bridge_v2, ActionType, ActionName}) ->
io_lib:format("- Name: ~p\n"
" Action Type: ~p\n"
" Type: data-bridge\n"
,[ActionName, ActionType]
). ).
left_pad(Str) -> left_pad(Str) ->

View File

@ -44,7 +44,8 @@ all() ->
{group, metrics_simple}, {group, metrics_simple},
{group, metrics_fail}, {group, metrics_fail},
{group, metrics_fail_simple}, {group, metrics_fail_simple},
{group, tracing} {group, tracing},
{group, command_line}
]. ].
suite() -> suite() ->
@ -147,6 +148,9 @@ groups() ->
]}, ]},
{tracing, [], [ {tracing, [], [
t_trace_rule_id t_trace_rule_id
]},
{command_line, [], [
t_command_line_list_print_rule
]} ]}
]. ].
@ -596,6 +600,26 @@ t_get_rule_ids_by_action(_) ->
?assertEqual([], emqx_rule_engine:get_rule_ids_by_action(<<"mysql:not_exists">>)), ?assertEqual([], emqx_rule_engine:get_rule_ids_by_action(<<"mysql:not_exists">>)),
ok = delete_rules_by_ids([<<"t_get_rule_ids_by_action">>]). ok = delete_rules_by_ids([<<"t_get_rule_ids_by_action">>]).
%% Check that command line interface don't crash when listing and showing rules
t_command_line_list_print_rule(_) ->
ID = <<"t_command_line">>,
Rule1 = #{
id => ID,
sql => <<"SELECT * FROM \"t\"">>,
actions => [
#{function => console, args => #{}},
#{function => republish, args => #{}},
<<"mqtt:my_mqtt_bridge">>,
<<"mysql:foo">>
],
description => ID,
created_at => erlang:system_time(millisecond)
},
ok = create_rules([Rule1]),
ok = emqx_rule_engine_cli:cmd(["list"]),
ok = emqx_rule_engine_cli:cmd(["show", binary_to_list(ID)]),
ok = delete_rules_by_ids([ID]).
t_ensure_action_removed(_) -> t_ensure_action_removed(_) ->
Id = <<"t_ensure_action_removed">>, Id = <<"t_ensure_action_removed">>,
GetSelectedData = <<"emqx_rule_sqltester:get_selected_data">>, GetSelectedData = <<"emqx_rule_sqltester:get_selected_data">>,

View File

@ -0,0 +1,3 @@
The following command previously printed nothing if the rule had a data bridge action attached to it. This is now fixed.
$ bin/emqx ctl rules show rule_0hyd