From 47ed9cbc76aa479d67a0c2f3902aa64eb0543d85 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Mon, 9 May 2022 13:14:27 -0300 Subject: [PATCH] fix(telemetry): count bridges referenced in `from` rule clauses --- apps/emqx_bridge/test/emqx_bridge_SUITE.erl | 22 ++++++++++++++----- .../test/emqx_telemetry_SUITE.erl | 17 +++++++++++--- .../emqx_rule_engine/src/emqx_rule_engine.erl | 7 +++--- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/apps/emqx_bridge/test/emqx_bridge_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_SUITE.erl index 325acbfe9..827f836cc 100644 --- a/apps/emqx_bridge/test/emqx_bridge_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_SUITE.erl @@ -76,10 +76,10 @@ t_get_basic_usage_info_1(_Config) -> BasicUsageInfo = emqx_bridge:get_basic_usage_info(), ?assertEqual( #{ - num_bridges => 2, + num_bridges => 3, count_by_type => #{ http => 1, - mqtt => 1 + mqtt => 2 } }, BasicUsageInfo @@ -92,17 +92,26 @@ setup_fake_telemetry_data() -> #{ <<"mqtt">> => #{ <<"my_mqtt_connector">> => - #{server => "127.0.0.1:1883"} + #{server => "127.0.0.1:1883"}, + <<"my_mqtt_connector2">> => + #{server => "127.0.0.1:1884"} } } }, - MQTTConfig = #{ + MQTTConfig1 = #{ connector => <<"mqtt:my_mqtt_connector">>, enable => true, direction => ingress, remote_topic => <<"aws/#">>, remote_qos => 1 }, + MQTTConfig2 = #{ + connector => <<"mqtt:my_mqtt_connector2">>, + enable => true, + direction => ingress, + remote_topic => <<"$bridges/mqtt:some_bridge_in">>, + remote_qos => 1 + }, HTTPConfig = #{ url => <<"http://localhost:9901/messages/${topic}">>, enable => true, @@ -124,7 +133,10 @@ setup_fake_telemetry_data() -> HTTPConfig#{enable => false} }, <<"mqtt">> => - #{<<"basic_usage_info_mqtt">> => MQTTConfig} + #{ + <<"basic_usage_info_mqtt">> => MQTTConfig1, + <<"basic_usage_info_mqtt_from_select">> => MQTTConfig2 + } } }, ok = emqx_common_test_helpers:load_config(emqx_connector_schema, ConnectorConf), diff --git a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl index 90ad1e806..1de800b26 100644 --- a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl +++ b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl @@ -434,7 +434,7 @@ t_rule_engine_and_data_bridge_info(_Config) -> RuleInfo = get_value(rule_engine, TelemetryData), BridgeInfo = get_value(bridge, TelemetryData), ?assertEqual( - #{num_rules => 2}, + #{num_rules => 3}, RuleInfo ), ?assertEqual( @@ -442,9 +442,9 @@ t_rule_engine_and_data_bridge_info(_Config) -> data_bridge => #{ http => #{num => 1, num_linked_by_rules => 3}, - mqtt => #{num => 1, num_linked_by_rules => 1} + mqtt => #{num => 2, num_linked_by_rules => 2} }, - num_data_bridges => 2 + num_data_bridges => 3 }, BridgeInfo ), @@ -641,6 +641,17 @@ setup_fake_rule_engine_data() -> ] } ), + {ok, _} = + emqx_rule_engine:create_rule( + #{ + id => <<"rule:t_get_basic_usage_info:3">>, + sql => <<"select 1 from \"$bridges/mqtt:mqtt_in\"">>, + outputs => + [ + #{function => console} + ] + } + ), ok. set_special_configs(emqx_authz) -> diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.erl b/apps/emqx_rule_engine/src/emqx_rule_engine.erl index 95dac3807..c35cdcf7e 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.erl @@ -265,9 +265,10 @@ get_basic_usage_info() -> NumRules = length(EnabledRules), ReferencedBridges = lists:foldl( - fun(#{outputs := Outputs}, Acc) -> - BridgeIDs = lists:filter(fun is_binary/1, Outputs), - tally_referenced_bridges(BridgeIDs, Acc) + fun(#{outputs := Outputs, from := From}, Acc) -> + BridgeIDs0 = [BridgeID || <<"$bridges/", BridgeID/binary>> <- From], + BridgeIDs1 = lists:filter(fun is_binary/1, Outputs), + tally_referenced_bridges(BridgeIDs0 ++ BridgeIDs1, Acc) end, #{}, EnabledRules