fix(telemetry): count bridges referenced in `from` rule clauses

This commit is contained in:
Thales Macedo Garitezi 2022-05-09 13:14:27 -03:00
parent 9e706fc76d
commit 47ed9cbc76
No known key found for this signature in database
GPG Key ID: DD279F8152A9B6DD
3 changed files with 35 additions and 11 deletions

View File

@ -76,10 +76,10 @@ t_get_basic_usage_info_1(_Config) ->
BasicUsageInfo = emqx_bridge:get_basic_usage_info(), BasicUsageInfo = emqx_bridge:get_basic_usage_info(),
?assertEqual( ?assertEqual(
#{ #{
num_bridges => 2, num_bridges => 3,
count_by_type => #{ count_by_type => #{
http => 1, http => 1,
mqtt => 1 mqtt => 2
} }
}, },
BasicUsageInfo BasicUsageInfo
@ -92,17 +92,26 @@ setup_fake_telemetry_data() ->
#{ #{
<<"mqtt">> => #{ <<"mqtt">> => #{
<<"my_mqtt_connector">> => <<"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">>, connector => <<"mqtt:my_mqtt_connector">>,
enable => true, enable => true,
direction => ingress, direction => ingress,
remote_topic => <<"aws/#">>, remote_topic => <<"aws/#">>,
remote_qos => 1 remote_qos => 1
}, },
MQTTConfig2 = #{
connector => <<"mqtt:my_mqtt_connector2">>,
enable => true,
direction => ingress,
remote_topic => <<"$bridges/mqtt:some_bridge_in">>,
remote_qos => 1
},
HTTPConfig = #{ HTTPConfig = #{
url => <<"http://localhost:9901/messages/${topic}">>, url => <<"http://localhost:9901/messages/${topic}">>,
enable => true, enable => true,
@ -124,7 +133,10 @@ setup_fake_telemetry_data() ->
HTTPConfig#{enable => false} HTTPConfig#{enable => false}
}, },
<<"mqtt">> => <<"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), ok = emqx_common_test_helpers:load_config(emqx_connector_schema, ConnectorConf),

View File

@ -434,7 +434,7 @@ t_rule_engine_and_data_bridge_info(_Config) ->
RuleInfo = get_value(rule_engine, TelemetryData), RuleInfo = get_value(rule_engine, TelemetryData),
BridgeInfo = get_value(bridge, TelemetryData), BridgeInfo = get_value(bridge, TelemetryData),
?assertEqual( ?assertEqual(
#{num_rules => 2}, #{num_rules => 3},
RuleInfo RuleInfo
), ),
?assertEqual( ?assertEqual(
@ -442,9 +442,9 @@ t_rule_engine_and_data_bridge_info(_Config) ->
data_bridge => data_bridge =>
#{ #{
http => #{num => 1, num_linked_by_rules => 3}, 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 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. ok.
set_special_configs(emqx_authz) -> set_special_configs(emqx_authz) ->

View File

@ -265,9 +265,10 @@ get_basic_usage_info() ->
NumRules = length(EnabledRules), NumRules = length(EnabledRules),
ReferencedBridges = ReferencedBridges =
lists:foldl( lists:foldl(
fun(#{outputs := Outputs}, Acc) -> fun(#{outputs := Outputs, from := From}, Acc) ->
BridgeIDs = lists:filter(fun is_binary/1, Outputs), BridgeIDs0 = [BridgeID || <<"$bridges/", BridgeID/binary>> <- From],
tally_referenced_bridges(BridgeIDs, Acc) BridgeIDs1 = lists:filter(fun is_binary/1, Outputs),
tally_referenced_bridges(BridgeIDs0 ++ BridgeIDs1, Acc)
end, end,
#{}, #{},
EnabledRules EnabledRules