增加数据异常的报警

This commit is contained in:
anlicheng 2025-06-17 15:49:35 +08:00
parent 43864341e6
commit 95028ff149

View File

@ -25,6 +25,9 @@
%% %%
-define(MAX_QUEUE_SIZE, 5_000_000). -define(MAX_QUEUE_SIZE, 5_000_000).
%%
-define(DESIRED_VALUE, 400_0000).
%% %%
-define(log(Msg), north_data:info(Msg)). -define(log(Msg), north_data:info(Msg)).
@ -37,7 +40,10 @@
%% %%
timer_ref :: undefined | reference(), timer_ref :: undefined | reference(),
%% %%
is_busy = false :: boolean() is_busy = false :: boolean(),
%%
acc_num = 0
}). }).
%%%=================================================================== %%%===================================================================
@ -81,6 +87,9 @@ init([]) ->
%% , %% ,
erlang:start_timer(0, self(), create_postman), erlang:start_timer(0, self(), create_postman),
%%
erlang:start_timer(3600, self(), check_desired_ticker),
{ok, disconnected, #state{mqtt_opts = Opts, iot_queue = iot_queue:new(?MAX_QUEUE_SIZE), postman_pid = undefined}}. {ok, disconnected, #state{mqtt_opts = Opts, iot_queue = iot_queue:new(?MAX_QUEUE_SIZE), postman_pid = undefined}}.
%% @private %% @private
@ -132,7 +141,7 @@ handle_event(info, fetch_next, connected, State = #state{postman_pid = PostmanPi
end; end;
%% %%
handle_event(info, {ack, AssocMessage}, StateName, State = #state{timer_ref = TimerRef}) -> handle_event(info, {ack, AssocMessage}, StateName, State = #state{timer_ref = TimerRef, acc_num = AccNum}) ->
%% %%
?log(iolist_to_binary(AssocMessage)), ?log(iolist_to_binary(AssocMessage)),
@ -145,7 +154,7 @@ handle_event(info, {ack, AssocMessage}, StateName, State = #state{timer_ref = Ti
Key = get_counter_key(iot_util:date()), Key = get_counter_key(iot_util:date()),
mnesia_counter:inc(Key), mnesia_counter:inc(Key),
{keep_state, State#state{timer_ref = undefined, is_busy = false}, Actions}; {keep_state, State#state{timer_ref = undefined, is_busy = false, acc_num = AccNum + 1}, Actions};
%% %%
handle_event(info, {timeout, _, {repost_ticker, Body}}, connected, State = #state{postman_pid = PostmanPid}) -> handle_event(info, {timeout, _, {repost_ticker, Body}}, connected, State = #state{postman_pid = PostmanPid}) ->
@ -171,6 +180,20 @@ handle_event(info, {timeout, _, create_postman}, disconnected, State = #state{mq
{keep_state, State#state{postman_pid = undefined}} {keep_state, State#state{postman_pid = undefined}}
end; end;
%%
handle_event(info, {timeout, _, check_desired_ticker}, _, State = #state{acc_num = AccNum}) ->
HourDesiredNum = ?DESIRED_VALUE div 24,
%% 25%
case HourDesiredNum >= AccNum orelse HourDesiredNum - AccNum < erlang:ceil(HourDesiredNum * 0.25) of
true ->
ok;
false ->
%%
iot_watchdog:warn(iolist_to_binary([<<"中电数据异常:"/utf8>>, integer_to_binary(AccNum), <<"/h">>]))
end,
erlang:start_timer(3600, self(), check_desired_ticker),
{keep_state, State#state{acc_num = 0}};
%% %%
handle_event({call, From}, get_stat, StateName, State = #state{iot_queue = Q}) -> handle_event({call, From}, get_stat, StateName, State = #state{iot_queue = Q}) ->
Key = get_counter_key(iot_util:date()), Key = get_counter_key(iot_util:date()),