refactor: better metric and error fold
This commit is contained in:
parent
dda73651c5
commit
87e4e2340d
|
@ -236,20 +236,11 @@ handle_metrics(Name) ->
|
|||
Results = emqx_cluster_link_metrics:get_metrics(Name),
|
||||
{NodeMetrics0, NodeErrors} =
|
||||
lists:foldl(
|
||||
fun
|
||||
({Node, {ok, RouterMetrics}, {ok, ResourceMetrics}}, {OkAccIn, ErrAccIn}) ->
|
||||
OkAcc = [format_metrics(Node, RouterMetrics, ResourceMetrics) | OkAccIn],
|
||||
{OkAcc, ErrAccIn};
|
||||
({Node, {ok, RouterMetrics}, ResError}, {OkAccIn, ErrAccIn}) ->
|
||||
OkAcc = [format_metrics(Node, RouterMetrics, _ResourceMetrics = #{}) | OkAccIn],
|
||||
{OkAcc, [{Node, #{resource => ResError}} | ErrAccIn]};
|
||||
({Node, RouterError, {ok, ResourceMetrics}}, {OkAccIn, ErrAccIn}) ->
|
||||
OkAcc = [format_metrics(Node, _RouterMetrics = #{}, ResourceMetrics) | OkAccIn],
|
||||
{OkAcc, [{Node, #{router => RouterError}} | ErrAccIn]};
|
||||
({Node, RouterError, ResourceError}, {OkAccIn, ErrAccIn}) ->
|
||||
{OkAccIn, [
|
||||
{Node, #{router => RouterError, resource => ResourceError}} | ErrAccIn
|
||||
]}
|
||||
fun({Node, RouterMetrics0, ResourceMetrics0}, {OkAccIn, ErrAccIn}) ->
|
||||
{RouterMetrics, RouterError} = get_metrics_or_errors(RouterMetrics0),
|
||||
{ResourceMetrics, ResourceError} = get_metrics_or_errors(ResourceMetrics0),
|
||||
ErrAcc = append_errors(RouterError, ResourceError, Node, ErrAccIn),
|
||||
{[format_metrics(Node, RouterMetrics, ResourceMetrics) | OkAccIn], ErrAcc}
|
||||
end,
|
||||
{[], []},
|
||||
Results
|
||||
|
@ -269,6 +260,18 @@ handle_metrics(Name) ->
|
|||
Response = #{metrics => AggregatedMetrics, node_metrics => NodeMetrics},
|
||||
?OK(Response).
|
||||
|
||||
get_metrics_or_errors({ok, Metrics}) ->
|
||||
{Metrics, undefined};
|
||||
get_metrics_or_errors(Error) ->
|
||||
{#{}, Error}.
|
||||
|
||||
append_errors(undefined, undefined, _Node, Acc) ->
|
||||
Acc;
|
||||
append_errors(RouterError, ResourceError, Node, Acc) ->
|
||||
Err0 = emqx_utils_maps:put_if(#{}, router, RouterError, RouterError =/= undefined),
|
||||
Err = emqx_utils_maps:put_if(Err0, resource, ResourceError, ResourceError =/= undefined),
|
||||
[{Node, Err} | Acc].
|
||||
|
||||
aggregate_metrics(NodeMetrics) ->
|
||||
ErrorLogger = fun(_) -> ok end,
|
||||
lists:foldl(
|
||||
|
|
|
@ -695,12 +695,16 @@ t_metrics(Config) ->
|
|||
#{?snk_kind := "cluster_link_extrouter_route_added"}
|
||||
),
|
||||
|
||||
?assertMatch(
|
||||
{200, #{
|
||||
<<"metrics">> := #{<<"routes">> := 2},
|
||||
<<"node_metrics">> := _
|
||||
}},
|
||||
get_metrics(source, SourceName)
|
||||
?retry(
|
||||
300,
|
||||
10,
|
||||
?assertMatch(
|
||||
{200, #{
|
||||
<<"metrics">> := #{<<"routes">> := 2},
|
||||
<<"node_metrics">> := _
|
||||
}},
|
||||
get_metrics(source, SourceName)
|
||||
)
|
||||
),
|
||||
|
||||
ok.
|
||||
|
|
Loading…
Reference in New Issue