fix(monitor): reflect durable subscriptions in historical metrics

Essentially in the same manner as they are currently reflected in the
current metrics.
This commit is contained in:
Andrew Mayorov 2024-05-24 14:08:35 +02:00
parent 9091b8378e
commit 7b137c0aaf
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
1 changed files with 19 additions and 10 deletions

View File

@ -222,8 +222,11 @@ do_sample(Node, Time) ->
Res Res
end. end.
do_sample([], _Time, Res) -> do_sample([], _Time, Samples) ->
Res; maps:map(
fun(_TS, Sample) -> adjust_synthetic_cluster_metrics(Sample) end,
Samples
);
do_sample([Node | Nodes], Time, Res) -> do_sample([Node | Nodes], Time, Res) ->
case do_sample(Node, Time) of case do_sample(Node, Time) of
{badrpc, Reason} -> {badrpc, Reason} ->
@ -237,22 +240,28 @@ match_spec(infinity) ->
match_spec(Time) -> match_spec(Time) ->
[{{'_', '$1', '_'}, [{'>=', '$1', Time}], ['$_']}]. [{{'_', '$1', '_'}, [{'>=', '$1', Time}], ['$_']}].
merge_cluster_samplers(Node, Cluster) -> merge_cluster_samplers(NodeSamples, Cluster) ->
maps:fold(fun merge_cluster_samplers/3, Cluster, Node). maps:fold(fun merge_cluster_samplers/3, Cluster, NodeSamples).
merge_cluster_samplers(TS, NodeData, Cluster) -> merge_cluster_samplers(TS, NodeSample0, Cluster) ->
NodeSample = adjust_individual_node_metrics(NodeSample0),
case maps:get(TS, Cluster, undefined) of case maps:get(TS, Cluster, undefined) of
undefined -> undefined ->
Cluster#{TS => NodeData}; Cluster#{TS => NodeSample};
ClusterData -> ClusterSample ->
Cluster#{TS => merge_cluster_sampler_map(NodeData, ClusterData)} Cluster#{TS => merge_cluster_sampler_map(NodeSample, ClusterSample)}
end. end.
merge_cluster_sampler_map(M1, M2) -> merge_cluster_sampler_map(M1, M2) ->
Fun = Fun =
fun fun
(topics, Map) -> (Key, Map) when
Map#{topics => maps:get(topics, M1)}; %% cluster-synced values
Key =:= topics;
Key =:= subscriptions_durable;
Key =:= disconnected_durable_sessions
->
Map#{Key => maps:get(Key, M1)};
(Key, Map) -> (Key, Map) ->
Map#{Key => maps:get(Key, M1, 0) + maps:get(Key, M2, 0)} Map#{Key => maps:get(Key, M1, 0) + maps:get(Key, M2, 0)}
end, end,