瀏覽代碼

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

Thales Macedo Garitezi 3 年之前
父節點
當前提交
47ed9cbc76

+ 17 - 5
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),

+ 14 - 3
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) ->

+ 4 - 3
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