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

fix(alarms): add duration field for alarms

zhouzb 5 лет назад
Родитель
Сommit
42f95bba09
1 измененных файлов с 12 добавлено и 1 удалено
  1. 12 1
      apps/emqx_management/src/emqx_mgmt.erl

+ 12 - 1
apps/emqx_management/src/emqx_mgmt.erl

@@ -568,7 +568,7 @@ get_alarms(Type) ->
     [{Node, get_alarms(Node, Type)} || Node <- ekka_mnesia:running_nodes()].
 
 get_alarms(Node, Type) when Node =:= node() ->
-    emqx_alarm:get_alarms(Type);
+    add_duration_field(emqx_alarm:get_alarms(Type));
 get_alarms(Node, Type) ->
     rpc_call(Node, get_alarms, [Node, Type]).
 
@@ -585,6 +585,17 @@ delete_all_deactivated_alarms(Node) when Node =:= node() ->
 delete_all_deactivated_alarms(Node) ->
     rpc_call(Node, delete_deactivated_alarms, [Node]).
 
+add_duration_field(Alarms) ->
+    Now = erlang:system_time(microsecond),
+    add_duration_field(Alarms, Now, []).
+
+add_duration_field([], _Now, Acc) ->
+    Acc;
+add_duration_field([Alarm = #{activated := true, activate_at := ActivateAt}| Rest], Now, Acc) ->
+    add_duration_field(Rest, Now, [Alarm#{duration => Now - ActivateAt} | Acc]);
+add_duration_field([Alarm = #{activated := false, activate_at := ActivateAt, deactivate_at := DeactivateAt}| Rest], Now, Acc) ->
+    add_duration_field(Rest, Now, [Alarm#{duration => DeactivateAt - ActivateAt} | Acc]).
+
 %%--------------------------------------------------------------------
 %% Banned API
 %%--------------------------------------------------------------------