fix: add resource_metrics, node_resource_metrics
This commit is contained in:
parent
2a7bd74ef1
commit
098598a0be
|
@ -948,14 +948,14 @@ lookup_from_local_node(ChainName, AuthenticatorID) ->
|
|||
Metrics = emqx_plugin_libs_metrics:get_metrics(authn_metrics, AuthenticatorID),
|
||||
case lists:member(Provider, resource_provider()) of
|
||||
false ->
|
||||
{ok, {NodeId, connected, Metrics}};
|
||||
{ok, {NodeId, connected, Metrics, #{}}};
|
||||
true ->
|
||||
#{resource_id := ResourceId} = State,
|
||||
case emqx_resource:get_instance(ResourceId) of
|
||||
{error, not_found} ->
|
||||
{error, {NodeId, not_found_resource}};
|
||||
{ok, _, #{status := Status}} ->
|
||||
{ok, {NodeId, Status, Metrics}}
|
||||
{ok, _, #{status := Status, metrics := ResourceMetrics}} ->
|
||||
{ok, {NodeId, Status, Metrics, ResourceMetrics}}
|
||||
end
|
||||
end;
|
||||
{error, Reason} ->
|
||||
|
@ -966,15 +966,22 @@ lookup_from_all_nodes(ChainName, AuthenticatorID) ->
|
|||
Nodes = mria_mnesia:running_nodes(),
|
||||
case is_ok(emqx_authn_proto_v1:lookup_from_all_nodes(Nodes, ChainName, AuthenticatorID)) of
|
||||
{ok, ResList} ->
|
||||
{StatusMap, MetricsMap, ErrorMap} = make_result_map(ResList),
|
||||
{StatusMap, MetricsMap, ResourceMetricsMap, ErrorMap} = make_result_map(ResList),
|
||||
AggregateStatus = aggregate_status(maps:values(StatusMap)),
|
||||
AggregateMetrics = aggregate_metrics(maps:values(MetricsMap)),
|
||||
AggregateResourceMetrics = aggregate_metrics(maps:values(ResourceMetricsMap)),
|
||||
Fun = fun(_, V1) -> restructure_map(V1) end,
|
||||
MKMap = fun(Name) -> fun({Key, Val}) -> #{node => Key, Name => Val} end end,
|
||||
HelpFun = fun(M, Name) -> lists:map(MKMap(Name), maps:to_list(M)) end,
|
||||
{200, #{
|
||||
node_resource_metrics => HelpFun(maps:map(Fun, ResourceMetricsMap), metrics),
|
||||
resource_metrics => case maps:size(AggregateResourceMetrics) of
|
||||
0 -> #{};
|
||||
_ -> restructure_map(AggregateResourceMetrics)
|
||||
end,
|
||||
node_metrics => HelpFun(maps:map(Fun, MetricsMap), metrics),
|
||||
metrics => restructure_map(AggregateMetrics),
|
||||
|
||||
node_status => HelpFun(StatusMap, status),
|
||||
status => AggregateStatus,
|
||||
node_error => HelpFun(maps:map(Fun, ErrorMap), reason)
|
||||
|
@ -998,7 +1005,7 @@ aggregate_status(AllStatus) ->
|
|||
end.
|
||||
|
||||
aggregate_metrics([]) ->
|
||||
empty_metrics_and_status;
|
||||
#{};
|
||||
aggregate_metrics([HeadMetrics | AllMetrics]) ->
|
||||
CombinerFun =
|
||||
fun ComFun(_Key, Val1, Val2) ->
|
||||
|
@ -1014,19 +1021,20 @@ aggregate_metrics([HeadMetrics | AllMetrics]) ->
|
|||
|
||||
make_result_map(ResList) ->
|
||||
Fun =
|
||||
fun(Elem, {StatusMap, MetricsMap, ErrorMap}) ->
|
||||
fun(Elem, {StatusMap, MetricsMap, ResourceMetricsMap, ErrorMap}) ->
|
||||
case Elem of
|
||||
{ok, {NodeId, Status, Metrics}} ->
|
||||
{ok, {NodeId, Status, Metrics, ResourceMetrics}} ->
|
||||
{
|
||||
maps:put(NodeId, Status, StatusMap),
|
||||
maps:put(NodeId, Metrics, MetricsMap),
|
||||
maps:put(NodeId, ResourceMetrics, ResourceMetricsMap),
|
||||
ErrorMap
|
||||
};
|
||||
{error, {NodeId, Reason}} ->
|
||||
{StatusMap, MetricsMap, maps:put(NodeId, Reason, ErrorMap)}
|
||||
{StatusMap, MetricsMap, ResourceMetricsMap, maps:put(NodeId, Reason, ErrorMap)}
|
||||
end
|
||||
end,
|
||||
lists:foldl(Fun, {maps:new(), maps:new(), maps:new()}, ResList).
|
||||
lists:foldl(Fun, {maps:new(), maps:new(), maps:new(), maps:new()}, ResList).
|
||||
|
||||
restructure_map(#{
|
||||
counters := #{failed := Failed, matched := Match, success := Succ, ignore := Ignore},
|
||||
|
@ -1041,6 +1049,18 @@ restructure_map(#{
|
|||
rate_last5m => Rate5m,
|
||||
rate_max => RateMax
|
||||
};
|
||||
restructure_map(#{
|
||||
counters := #{failed := Failed, matched := Match, success := Succ},
|
||||
rate := #{matched := #{current := Rate, last5m := Rate5m, max := RateMax}}
|
||||
}) ->
|
||||
#{
|
||||
matched => Match,
|
||||
success => Succ,
|
||||
failed => Failed,
|
||||
rate => Rate,
|
||||
rate_last5m => Rate5m,
|
||||
rate_max => RateMax
|
||||
};
|
||||
restructure_map(Error) ->
|
||||
Error.
|
||||
|
||||
|
|
|
@ -89,13 +89,20 @@ backend(Name) ->
|
|||
|
||||
fields("metrics_status_fields") ->
|
||||
[
|
||||
|
||||
{"resource_metrics", mk(ref(?MODULE, "resource_metrics"), #{desc => ?DESC("metrics")})},
|
||||
{"node_resource_metrics",
|
||||
mk(
|
||||
hoconsc:array(ref(?MODULE, "node_resource_metrics")),
|
||||
#{desc => ?DESC("node_metrics")}
|
||||
)},
|
||||
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})},
|
||||
{"node_metrics",
|
||||
mk(
|
||||
hoconsc:array(ref(?MODULE, "node_metrics")),
|
||||
#{desc => ?DESC("node_metrics")}
|
||||
)},
|
||||
{"status", mk(status(), #{desc => ?DESC("status")})},
|
||||
{"status", mk(cluster_status(), #{desc => ?DESC("status")})},
|
||||
{"node_status",
|
||||
mk(
|
||||
hoconsc:array(ref(?MODULE, "node_status")),
|
||||
|
@ -117,11 +124,27 @@ fields("metrics") ->
|
|||
{"rate_max", mk(float(), #{desc => ?DESC("rate_max")})},
|
||||
{"rate_last5m", mk(float(), #{desc => ?DESC("rate_last5m")})}
|
||||
];
|
||||
|
||||
fields("resource_metrics") ->
|
||||
[
|
||||
{"matched", mk(integer(), #{desc => ?DESC("matched")})},
|
||||
{"success", mk(integer(), #{desc => ?DESC("success")})},
|
||||
{"failed", mk(integer(), #{desc => ?DESC("failed")})},
|
||||
{"rate", mk(float(), #{desc => ?DESC("rate")})},
|
||||
{"rate_max", mk(float(), #{desc => ?DESC("rate_max")})},
|
||||
{"rate_last5m", mk(float(), #{desc => ?DESC("rate_last5m")})}
|
||||
];
|
||||
fields("node_metrics") ->
|
||||
[
|
||||
node_name(),
|
||||
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})}
|
||||
];
|
||||
|
||||
fields("node_resource_metrics") ->
|
||||
[
|
||||
node_name(),
|
||||
{"metrics", mk(ref(?MODULE, "resource_metrics"), #{desc => ?DESC("metrics")})}
|
||||
];
|
||||
fields("node_status") ->
|
||||
[
|
||||
node_name(),
|
||||
|
@ -137,5 +160,8 @@ fields("node_error") ->
|
|||
status() ->
|
||||
hoconsc:enum([connected, disconnected, connecting]).
|
||||
|
||||
cluster_status() ->
|
||||
hoconsc:enum([connected, disconnected, connecting, inconsistent]).
|
||||
|
||||
node_name() ->
|
||||
{"node", mk(binary(), #{desc => ?DESC("node"), example => "emqx@127.0.0.1"})}.
|
||||
|
|
Loading…
Reference in New Issue