test(rule_engine_metrics): add more test

This commit is contained in:
EMQ-YangM 2022-01-05 18:57:52 -08:00
parent 1211c658fc
commit 2074dd63f9
1 changed files with 57 additions and 34 deletions

View File

@ -1336,36 +1336,41 @@ t_metrics(_Config) ->
ok = emqx_rule_engine:load_providers(), ok = emqx_rule_engine:load_providers(),
TopicRule = create_simple_repub_rule( TopicRule = create_simple_repub_rule(
<<"t2">>, <<"t2">>,
"SELECT payload.msg as msg " "SELECT payload.msg as msg, payload.idx as idx "
"FROM \"t1\" " "FROM \"t1\" "
"WHERE msg= 'hello' "), "WHERE msg = 'hello' and idx + 1 > 2 "),
#rule{id = RuleId} = TopicRule, #rule{id = RuleId} = TopicRule,
?assertEqual(0, emqx_rule_metrics:get_rules_matched(RuleId)), ?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_passed(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_failed(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_exception(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)),
{ok, Client} = emqtt:start_link([{username, <<"emqx">>}]), {ok, Client} = emqtt:start_link([{username, <<"emqx">>}]),
{ok, _} = emqtt:connect(Client), {ok, _} = emqtt:connect(Client),
ct:sleep(200), ct:sleep(200),
PublishMoreTimes = fun(SomeMessage, Times) ->
emqtt:publish(Client, <<"t1">>, <<"{\"msg\":\"hello\"}">>, 0), [begin
ct:sleep(200), emqtt:publish(Client, <<"t1">>, SomeMessage, 0),
?assertEqual(1, emqx_rule_metrics:get_rules_matched(RuleId)), ct:sleep(200)
?assertEqual(1, emqx_rule_metrics:get_rules_passed(RuleId)), end || _ <- lists:seq(1, Times)] end,
PublishMoreTimes(<<"{\"msg\":\"hello\", \"idx\":5}">>, 10),
?assertEqual(10, emqx_rule_metrics:get_rules_matched(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_failed(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_exception(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)),
PublishMoreTimes(<<"{\"msg\":\"hello\", \"idx\":0}">>, 10),
emqtt:publish(Client, <<"t1">>, <<"{\"msg1\":\"hello\"}">>, 0), ?assertEqual(20, emqx_rule_metrics:get_rules_matched(RuleId)),
ct:sleep(200), ?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
?assertEqual(2, emqx_rule_metrics:get_rules_matched(RuleId)), ?assertEqual(10, emqx_rule_metrics:get_rules_failed(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(0, emqx_rule_metrics:get_rules_exception(RuleId)),
?assertEqual(1, emqx_rule_metrics:get_rules_no_result(RuleId)), ?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
PublishMoreTimes(<<"{\"msg\":\"hello\", \"idx\":\"somevalue\"}">>, 10),
?assertEqual(30, emqx_rule_metrics:get_rules_matched(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
?assertEqual(20, emqx_rule_metrics:get_rules_failed(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_exception(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
emqtt:stop(Client), emqtt:stop(Client),
emqx_rule_registry:remove_rule(TopicRule). emqx_rule_registry:remove_rule(TopicRule).
@ -1374,7 +1379,7 @@ t_metrics1(_Config) ->
TopicRule = create_simple_repub_rule( TopicRule = create_simple_repub_rule(
<<"t2">>, <<"t2">>,
"FOREACH payload.sensors " "FOREACH payload.sensors "
"DO clientid,item.name as name, item.idx as idx " "DO clientid,item.name as name, item.idx + 1 as idx "
"INCASE item.idx >= 1 " "INCASE item.idx >= 1 "
"FROM \"t1\" "), "FROM \"t1\" "),
#rule{id = RuleId} = TopicRule, #rule{id = RuleId} = TopicRule,
@ -1383,32 +1388,50 @@ t_metrics1(_Config) ->
?assertEqual(0, emqx_rule_metrics:get_rules_failed(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_exception(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)),
{ok, Client} = emqtt:start_link([{username, <<"emqx">>}]), {ok, Client} = emqtt:start_link([{username, <<"emqx">>}]),
{ok, _} = emqtt:connect(Client), {ok, _} = emqtt:connect(Client),
ct:sleep(200), ct:sleep(200),
PublishMoreTimes = fun(SomeMessage, Times) ->
[begin
emqtt:publish(Client, <<"t1">>, SomeMessage, 0),
ct:sleep(200)
end || _ <- lists:seq(1, Times)] end,
Message = <<"{\"date\": \"2020-04-24\", Message = <<"{\"date\": \"2020-04-24\",
\"sensors\": [ \"sensors\": [
{\"name\": \"a\", \"idx\":0}, {\"name\": \"a\", \"idx\":0},
{\"name\": \"b\", \"idx\":1}, {\"name\": \"b\", \"idx\":1},
{\"name\": \"c\", \"idx\":2} {\"name\": \"c\", \"idx\":2}
]}">>, ]}">>,
emqtt:publish(Client, <<"t1">>, Message, 0), PublishMoreTimes(Message, 10),
ct:sleep(200), ?assertEqual(10, emqx_rule_metrics:get_rules_matched(RuleId)),
?assertEqual(1, emqx_rule_metrics:get_rules_matched(RuleId)), ?assertEqual(10, emqx_rule_metrics:get_rules_passed(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_failed(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)),
Message1 = <<"{\"date\": \"2020-04-24\",
emqtt:publish(Client, <<"t1">>, <<"{\"msg1\":\"hello\"}">>, 0), \"sensors\": [
ct:sleep(200), {\"name\": \"a\", \"idx\":0},
?assertEqual(2, emqx_rule_metrics:get_rules_matched(RuleId)), {\"name\": \"b\", \"idx\":0},
?assertEqual(1, emqx_rule_metrics:get_rules_passed(RuleId)), {\"name\": \"c\", \"idx\":0}
?assertEqual(1, emqx_rule_metrics:get_rules_failed(RuleId)), ]}">>,
PublishMoreTimes(Message1, 10),
?assertEqual(20, emqx_rule_metrics:get_rules_matched(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_failed(RuleId)),
?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)),
?assertEqual(1, emqx_rule_metrics:get_rules_no_result(RuleId)), ?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
Message2 = <<"{\"date\": \"2020-04-24\",
\"sensors\": [
{\"name\": \"a\", \"idx\":0},
{\"name\": \"b\", \"idx\":1},
{\"name\": \"c\", \"idx\":\"some string\"}
]}">>,
PublishMoreTimes(Message2, 10),
?assertEqual(30, emqx_rule_metrics:get_rules_matched(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
?assertEqual(20, emqx_rule_metrics:get_rules_failed(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_exception(RuleId)),
?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
emqtt:stop(Client), emqtt:stop(Client),
emqx_rule_registry:remove_rule(TopicRule). emqx_rule_registry:remove_rule(TopicRule).