diff --git a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl index d424c9f8a..0637d06f9 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl @@ -38,6 +38,7 @@ all() -> , {group, events} , {group, multi_actions} , {group, bugs} + , {group, rule_metrics} ]. suite() -> @@ -125,6 +126,9 @@ groups() -> t_sqlparse_true_false, t_sqlparse_new_map ]}, + {rule_metrics, [], + [t_metrics + ]}, {events, [], [t_events ]}, @@ -1327,6 +1331,43 @@ t_sqlselect_3(_Config) -> emqtt:stop(Client), emqx_rule_registry:remove_rule(TopicRule). +t_metrics(_Config) -> + ok = emqx_rule_engine:load_providers(), + TopicRule = create_simple_repub_rule( + <<"t2">>, + "SELECT payload.msg as msg " + "FROM \"t1\" " + "WHERE msg= 'hello' "), + #rule{id = RuleId} = TopicRule, + ?assertEqual(0, emqx_rule_metrics:get_rules_matched(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_passed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_failed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), + + {ok, Client} = emqtt:start_link([{username, <<"emqx">>}]), + {ok, _} = emqtt:connect(Client), + ct:sleep(200), + + emqtt:publish(Client, <<"t1">>, <<"{\"msg\":\"hello\"}">>, 0), + ct:sleep(200), + ?assertEqual(1, emqx_rule_metrics:get_rules_matched(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_passed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_failed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), + + emqtt:publish(Client, <<"t1">>, <<"{\"msg1\":\"hello\"}">>, 0), + ct:sleep(200), + ?assertEqual(2, emqx_rule_metrics:get_rules_matched(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_passed(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_failed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_no_result(RuleId)), + + emqtt:stop(Client), + emqx_rule_registry:remove_rule(TopicRule). + t_sqlselect_multi_actoins_1(Config) -> %% We create 2 actions in the same rule: %% The first will fail and we need to make sure the diff --git a/apps/emqx_rule_engine/test/emqx_rule_metrics_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_metrics_SUITE.erl index 81c95bf23..342dcddac 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_metrics_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_metrics_SUITE.erl @@ -95,13 +95,14 @@ t_rule(_) -> ok = emqx_rule_metrics:inc(<<"rule:1">>, 'rules.passed'), ok = emqx_rule_metrics:inc(<<"rule:1">>, 'rules.exception'), ok = emqx_rule_metrics:inc(<<"rule:1">>, 'rules.no_result'), + ok = emqx_rule_metrics:inc(<<"rule:1">>, 'rules.failed'), ok = emqx_rule_metrics:inc(<<"rule2">>, 'rules.matched'), ok = emqx_rule_metrics:inc(<<"rule2">>, 'rules.matched'), ?assertEqual(1, emqx_rule_metrics:get(<<"rule:1">>, 'rules.matched')), ?assertEqual(1, emqx_rule_metrics:get(<<"rule:1">>, 'rules.passed')), ?assertEqual(1, emqx_rule_metrics:get(<<"rule:1">>, 'rules.exception')), ?assertEqual(1, emqx_rule_metrics:get(<<"rule:1">>, 'rules.no_result')), - ?assertEqual(2, emqx_rule_metrics:get(<<"rule:1">>, 'rules.failed')), + ?assertEqual(1, emqx_rule_metrics:get(<<"rule:1">>, 'rules.failed')), ?assertEqual(2, emqx_rule_metrics:get(<<"rule2">>, 'rules.matched')), ?assertEqual(0, emqx_rule_metrics:get(<<"rule3">>, 'rules.matched')), ?assertEqual(3, emqx_rule_metrics:get_overall('rules.matched')),