Просмотр исходного кода

fix(monitor): reflect durable subscriptions in historical metrics

Essentially in the same manner as they are currently reflected in the
current metrics.
Andrew Mayorov 1 год назад
Родитель
Сommit
7b137c0aaf
1 измененных файлов с 19 добавлено и 10 удалено
  1. 19 10
      apps/emqx_dashboard/src/emqx_dashboard_monitor.erl

+ 19 - 10
apps/emqx_dashboard/src/emqx_dashboard_monitor.erl

@@ -222,8 +222,11 @@ do_sample(Node, Time) ->
             Res
             Res
     end.
     end.
 
 
-do_sample([], _Time, Res) ->
-    Res;
+do_sample([], _Time, Samples) ->
+    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) ->
-    maps:fold(fun merge_cluster_samplers/3, Cluster, Node).
+merge_cluster_samplers(NodeSamples, Cluster) ->
+    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};
-        ClusterData ->
-            Cluster#{TS => merge_cluster_sampler_map(NodeData, ClusterData)}
+            Cluster#{TS => NodeSample};
+        ClusterSample ->
+            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) ->
-                Map#{topics => maps:get(topics, M1)};
+            (Key, Map) when
+                %% 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,