|
|
- -module(rumMgrKiller).
-
- -behavior(gen_emm).
-
- -include("eRum.hrl").
-
- -export([kill_me/0]).
-
- -export([
- init/1
- , handleEvent/2
- , handleCall/2
- , handleInfo/2
- , terminate/2
- , code_change/3
- ]).
-
- -record(state, {
- killerHwm :: non_neg_integer(),
- killerReTime :: non_neg_integer()
- }).
-
- kill_me() ->
- gen_emm:call(rumEvent, ?MODULE, mKillSelf).
-
- init([KillerHWM, KillerReinstallAfter]) ->
- {ok, #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}}.
-
- handleCall(mGetLogLevel, State) ->
- {replay, ?LOG_NONE, State};
- handleCall({mSetLogLevel, _Level}, State) ->
- {replay, ok, State};
- handleCall(mGetSettings, State = #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) ->
- {replay, [KillerHWM, KillerReinstallAfter], State};
- handleCall(mKillSelf, #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) ->
- exit({kill_me, [KillerHWM, KillerReinstallAfter]});
- handleCall(_Request, State) ->
- {replay, ok, State}.
-
- %% 检查每个日志消息的队列长度不是世界上最好的主意。我们将来可以使此操作在轮询计时器上起作用。
- handleEvent({mWriteLog, _Message}, State = #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) ->
- {message_queue_len, Len} = process_info(self(), message_queue_len),
- case Len > KillerHWM of
- true ->
- exit({kill_me, [KillerHWM, KillerReinstallAfter]});
- _ ->
- {ok, State}
- end;
- handleEvent(_Event, State) ->
- {ok, State}.
-
- handleInfo(_Info, State) ->
- {ok, State}.
-
- terminate(_Reason, _State) ->
- ok.
-
- code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
|