diff --git a/src/elarm.erl b/src/elarm.erl index 32a7871..c653304 100644 --- a/src/elarm.erl +++ b/src/elarm.erl @@ -51,6 +51,8 @@ read_log/2, get_alarms/0, get_alarms/1, + get_alarm/2, + get_alarm/3, get_alarm_by_id/1, get_alarm_by_id/2, get_configured/0, @@ -398,6 +400,26 @@ get_alarms() -> get_alarms(Srv) -> elarm_server:get_alarms(Srv). +%%-------------------------------------------------------------------- +%% @doc +%% Get alarm by alarm id and alarm src. +%% @equiv get_alarm(elarm_server, AlarmId, AlarmSrc) +%% @end +%%-------------------------------------------------------------------- +-spec get_alarm(alarm_id(), alarm_src()) -> {ok, alarm()} | {error, term()}. +get_alarm(AlarmId, AlarmSrc) -> + get_alarm(elarm_server, AlarmId, AlarmSrc). + +%%-------------------------------------------------------------------- +%% @doc +%% Get alarm by alarm id and alarm src. +%% @end +%%-------------------------------------------------------------------- +-spec get_alarm(pid()|atom(), alarm_id(), alarm_src()) -> + {ok, alarm()} | {error, term()}. +get_alarm(Srv, AlarmId, AlarmSrc) -> + elarm_server:get_alarm(Srv, AlarmId, AlarmSrc). + %%-------------------------------------------------------------------- %% @doc %% Get alarm by id (event id). diff --git a/src/elarm_server.erl b/src/elarm_server.erl index ee2a581..c37544c 100644 --- a/src/elarm_server.erl +++ b/src/elarm_server.erl @@ -33,6 +33,7 @@ unacknowledge/4, add_comment/5, get_alarms/1, + get_alarm/3, read_log/2, get_configured/1, get_unconfigured/1, @@ -121,6 +122,11 @@ add_comment(Pid, AlarmId, AlarmSrc, Text, UserId) -> get_alarms(Pid) -> gen_server:call(Pid, get_alarms). +-spec get_alarm(pid()|atom(), alarm_id(), alarm_src()) -> + {ok, alarm()} | {error, term()}. +get_alarm(Pid, AlarmId, AlarmSrc) -> + gen_server:call(Pid, {get_alarm, AlarmId, AlarmSrc}). + %% ------------------------------------------------------------------- %% Functions used by presentation layer to access alarm log @@ -211,6 +217,9 @@ handle_call({add_comment, AlarmId, AlarmSrc, Text, UserId}, _From, State) -> handle_call(get_alarms, _From, State) -> {Reply, NewState} = handle_get_alarms(State), {reply, Reply, NewState}; +handle_call({get_alarm, AlarmId, AlarmSrc}, _From, State) -> + {Reply, NewState} = handle_get_alarm(AlarmId, AlarmSrc, State), + {reply, Reply, NewState}; handle_call({read_log, Filter}, _From, State) -> {Reply, NewState} = handle_read_log(Filter, State), {reply, Reply, NewState}; @@ -549,6 +558,15 @@ handle_get_alarms(#state{ alarmlist_cb = AlCB, {Result, NewAlState} = AlCB:get_alarms(AlState), {Result, State#state{ alarmlist_state = NewAlState}}. +handle_get_alarm(AlarmId, Src, + #state{ alarmlist_cb = AlCB, alarmlist_state = AlState } = State) -> + case AlCB:get_alarm(AlarmId, Src, AlState) of + {{ok, #alarm{} = Alarm}, NewAlState} -> + {{ok, Alarm}, State#state{ alarmlist_state = NewAlState }}; + {{error, not_active}, NewAlState} -> + {{error, not_active}, State#state{ alarmlist_state = NewAlState }} + end. + handle_subscribe(Pid, Filter, #state{ event_cb = EvtCB, event_state = EvtState,