-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}.