Добавлена оперативная и историческая статистика нод и узлов mnesia #22
This commit is contained in:
@@ -26,6 +26,7 @@ create(AdminId, RefreshToken) ->
|
||||
type = refresh
|
||||
},
|
||||
mnesia:dirty_write(Session),
|
||||
core_counters:inc(admin_active_sessions),
|
||||
ok.
|
||||
|
||||
%%%-------------------------------------------------------------------
|
||||
@@ -44,6 +45,7 @@ validate(Token) ->
|
||||
true -> {ok, Session#admin_session.admin_id};
|
||||
false ->
|
||||
mnesia:dirty_delete({admin_session, Token}),
|
||||
core_counters:dec(admin_active_sessions),
|
||||
{error, expired}
|
||||
end;
|
||||
[] -> {error, not_found}
|
||||
@@ -56,4 +58,5 @@ validate(Token) ->
|
||||
-spec delete(Token :: binary()) -> ok.
|
||||
delete(Token) ->
|
||||
mnesia:dirty_delete({admin_session, Token}),
|
||||
core_counters:dec(admin_active_sessions),
|
||||
ok.
|
||||
@@ -0,0 +1,30 @@
|
||||
-module(core_counters).
|
||||
-export([inc/1, dec/1, get/1, read_and_reset/1]).
|
||||
|
||||
-define(TABLE, eventhub_counters).
|
||||
|
||||
inc(Key) ->
|
||||
try ets:update_counter(?TABLE, Key, {2, 1}) % позиция 2 — значение
|
||||
catch error:badarg ->
|
||||
ets:insert(?TABLE, {Key, 1})
|
||||
end.
|
||||
|
||||
dec(Key) ->
|
||||
try ets:update_counter(?TABLE, Key, {2, -1})
|
||||
catch error:badarg ->
|
||||
ets:insert(?TABLE, {Key, 0})
|
||||
end.
|
||||
|
||||
get(Key) ->
|
||||
case ets:lookup(?TABLE, Key) of
|
||||
[{Key, Val}] -> Val;
|
||||
[] -> 0
|
||||
end.
|
||||
|
||||
read_and_reset(Key) ->
|
||||
case ets:lookup(?TABLE, Key) of
|
||||
[{Key, Val}] ->
|
||||
ets:insert(?TABLE, {Key, 0}),
|
||||
Val;
|
||||
[] -> 0
|
||||
end.
|
||||
@@ -0,0 +1,43 @@
|
||||
-module(core_node_metric).
|
||||
-include("records.hrl").
|
||||
-export([save/1, get_by_timerange/3, delete_old/1]).
|
||||
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @doc Сохраняет запись метрики.
|
||||
%%% @end
|
||||
%%%-------------------------------------------------------------------
|
||||
-spec save(#node_metric{}) -> ok.
|
||||
save(Metric) ->
|
||||
mnesia:dirty_write(Metric),
|
||||
ok.
|
||||
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @doc Возвращает метрики за период, отсортированные по времени.
|
||||
%%% @end
|
||||
%%%-------------------------------------------------------------------
|
||||
-spec get_by_timerange(From :: calendar:datetime(), To :: calendar:datetime(), Node :: atom()) ->
|
||||
[#node_metric{}].
|
||||
get_by_timerange(From, To, Node) ->
|
||||
All = mnesia:dirty_match_object(#node_metric{node = Node, _ = '_'}),
|
||||
Filtered = lists:filter(fun(M) ->
|
||||
M#node_metric.timestamp >= From andalso M#node_metric.timestamp =< To
|
||||
end, All),
|
||||
lists:sort(fun(A, B) -> A#node_metric.timestamp =< B#node_metric.timestamp end, Filtered).
|
||||
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @doc Удаляет метрики старше Seconds секунд.
|
||||
%%% @end
|
||||
%%%-------------------------------------------------------------------
|
||||
-spec delete_old(Seconds :: non_neg_integer()) -> ok.
|
||||
delete_old(Seconds) ->
|
||||
Now = calendar:universal_time(),
|
||||
Threshold = calendar:gregorian_seconds_to_datetime(
|
||||
calendar:datetime_to_gregorian_seconds(Now) - Seconds),
|
||||
All = mnesia:dirty_match_object(#node_metric{_ = '_'}),
|
||||
lists:foreach(fun(M) ->
|
||||
case M#node_metric.timestamp < Threshold of
|
||||
true -> mnesia:dirty_delete_object(M);
|
||||
false -> ok
|
||||
end
|
||||
end, All),
|
||||
ok.
|
||||
@@ -26,6 +26,7 @@ create(UserId, RefreshToken) ->
|
||||
type = refresh
|
||||
},
|
||||
mnesia:dirty_write(Session),
|
||||
core_counters:inc(active_sessions),
|
||||
ok.
|
||||
|
||||
%%%-------------------------------------------------------------------
|
||||
@@ -49,6 +50,7 @@ validate(Token) ->
|
||||
end;
|
||||
false ->
|
||||
mnesia:dirty_delete({session, Token}),
|
||||
core_counters:dec(active_sessions),
|
||||
{error, expired}
|
||||
end;
|
||||
[] -> {error, not_found}
|
||||
@@ -61,4 +63,5 @@ validate(Token) ->
|
||||
-spec delete(Token :: binary()) -> ok.
|
||||
delete(Token) ->
|
||||
mnesia:dirty_delete({session, Token}),
|
||||
core_counters:dec(active_sessions),
|
||||
ok.
|
||||
Reference in New Issue
Block a user