feat(rules): export basic usage info for telemetry
This commit is contained in:
parent
ed7035ec41
commit
8354095e4b
|
@ -58,6 +58,9 @@
|
||||||
, clear_metrics_for_rule/1
|
, clear_metrics_for_rule/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
|
%% exported for `emqx_telemetry'
|
||||||
|
-export([get_basic_usage_info/0]).
|
||||||
|
|
||||||
%% gen_server Callbacks
|
%% gen_server Callbacks
|
||||||
-export([ init/1
|
-export([ init/1
|
||||||
, handle_call/3
|
, handle_call/3
|
||||||
|
@ -201,6 +204,56 @@ unload_hooks_for_rule(#{id := Id, from := Topics}) ->
|
||||||
end
|
end
|
||||||
end, Topics).
|
end, Topics).
|
||||||
|
|
||||||
|
%%------------------------------------------------------------------------------
|
||||||
|
%% Telemetry helper functions
|
||||||
|
%%------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-spec get_basic_usage_info() -> #{ num_rules => non_neg_integer()
|
||||||
|
, referenced_bridges =>
|
||||||
|
#{ BridgeType => non_neg_integer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when BridgeType :: atom().
|
||||||
|
get_basic_usage_info() ->
|
||||||
|
try
|
||||||
|
Rules = get_rules(),
|
||||||
|
EnabledRules =
|
||||||
|
lists:filter(
|
||||||
|
fun(#{enable := Enabled}) -> Enabled end,
|
||||||
|
Rules),
|
||||||
|
NumRules = length(EnabledRules),
|
||||||
|
ReferencedBridges =
|
||||||
|
lists:foldl(
|
||||||
|
fun(#{outputs := Outputs}, Acc) ->
|
||||||
|
BridgeIDs = lists:filter(fun is_binary/1, Outputs),
|
||||||
|
tally_referenced_bridges(BridgeIDs, Acc)
|
||||||
|
end,
|
||||||
|
#{},
|
||||||
|
EnabledRules),
|
||||||
|
#{ num_rules => NumRules
|
||||||
|
, referenced_bridges => ReferencedBridges
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
_:_ ->
|
||||||
|
#{ num_rules => 0
|
||||||
|
, referenced_bridges => #{}
|
||||||
|
}
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
tally_referenced_bridges(BridgeIDs, Acc0) ->
|
||||||
|
lists:foldl(
|
||||||
|
fun(BridgeID, Acc) ->
|
||||||
|
{BridgeType, _BridgeName} = emqx_bridge:parse_bridge_id(BridgeID),
|
||||||
|
maps:update_with(
|
||||||
|
BridgeType,
|
||||||
|
fun(X) -> X + 1 end,
|
||||||
|
1,
|
||||||
|
Acc)
|
||||||
|
end,
|
||||||
|
Acc0,
|
||||||
|
BridgeIDs).
|
||||||
|
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1356,6 +1356,47 @@ t_sqlparse_nested_get(_Config) ->
|
||||||
payload => <<"{\"a\": {\"b\": 0}}">>
|
payload => <<"{\"a\": {\"b\": 0}}">>
|
||||||
}})).
|
}})).
|
||||||
|
|
||||||
|
%%------------------------------------------------------------------------------
|
||||||
|
%% Test cases for telemetry functions
|
||||||
|
%%------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
t_get_basic_usage_info_0(_Config) ->
|
||||||
|
?assertEqual(
|
||||||
|
#{ num_rules => 0
|
||||||
|
, referenced_bridges => #{}
|
||||||
|
},
|
||||||
|
emqx_rule_engine:get_basic_usage_info()),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
t_get_basic_usage_info_1(_Config) ->
|
||||||
|
{ok, _} =
|
||||||
|
emqx_rule_engine:create_rule(
|
||||||
|
#{id => <<"rule:t_get_basic_usage_info:1">>,
|
||||||
|
sql => <<"select 1 from topic">>,
|
||||||
|
outputs =>
|
||||||
|
[ #{function => <<"erlang:hibernate">>, args => #{}}
|
||||||
|
, #{function => console}
|
||||||
|
, <<"http:my_http_bridge">>
|
||||||
|
, <<"http:my_http_bridge">>
|
||||||
|
]}),
|
||||||
|
{ok, _} =
|
||||||
|
emqx_rule_engine:create_rule(
|
||||||
|
#{id => <<"rule:t_get_basic_usage_info:2">>,
|
||||||
|
sql => <<"select 1 from topic">>,
|
||||||
|
outputs =>
|
||||||
|
[ <<"mqtt:my_mqtt_bridge">>
|
||||||
|
, <<"http:my_http_bridge">>
|
||||||
|
]}),
|
||||||
|
?assertEqual(
|
||||||
|
#{ num_rules => 2
|
||||||
|
, referenced_bridges =>
|
||||||
|
#{ mqtt => 1
|
||||||
|
, http => 3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emqx_rule_engine:get_basic_usage_info()),
|
||||||
|
ok.
|
||||||
|
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
%% Internal helpers
|
%% Internal helpers
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue