1%% 2%% %CopyrightBegin% 3%% 4%% Copyright Ericsson AB 1996-2016. All Rights Reserved. 5%% 6%% Licensed under the Apache License, Version 2.0 (the "License"); 7%% you may not use this file except in compliance with the License. 8%% You may obtain a copy of the License at 9%% 10%% http://www.apache.org/licenses/LICENSE-2.0 11%% 12%% Unless required by applicable law or agreed to in writing, software 13%% distributed under the License is distributed on an "AS IS" BASIS, 14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15%% See the License for the specific language governing permissions and 16%% limitations under the License. 17%% 18%% %CopyrightEnd% 19%% 20-module(alarm_handler). 21 22%%%----------------------------------------------------------------- 23%%% This is the SASL alarm handler process. 24%%% It is a gen_event process. When it is started, a simple 25%%% event handler which logs all alarms is installed. 26%%%----------------------------------------------------------------- 27-export([start_link/0, set_alarm/1, clear_alarm/1, get_alarms/0, 28 add_alarm_handler/1, add_alarm_handler/2, 29 delete_alarm_handler/1]). 30 31-export([init/1, 32 handle_event/2, handle_call/2, handle_info/2, 33 terminate/2]). 34 35start_link() -> 36 case gen_event:start_link({local, alarm_handler}) of 37 {ok, Pid} -> 38 gen_event:add_handler(alarm_handler, alarm_handler, []), 39 {ok, Pid}; 40 Error -> Error 41 end. 42 43%%----------------------------------------------------------------- 44%% Func: set_alarm/1 45%% Args: Alarm ::= {AlarmId, term()} 46%% where AlarmId ::= term() 47%%----------------------------------------------------------------- 48set_alarm(Alarm) -> 49 gen_event:notify(alarm_handler, {set_alarm, Alarm}). 50 51%%----------------------------------------------------------------- 52%% Func: clear_alarm/1 53%% Args: AlarmId ::= term() 54%%----------------------------------------------------------------- 55clear_alarm(AlarmId) -> 56 gen_event:notify(alarm_handler, {clear_alarm, AlarmId}). 57 58%%----------------------------------------------------------------- 59%% Func: get_alarms/0 60%% Returns: [{AlarmId, AlarmDesc}] 61%%----------------------------------------------------------------- 62get_alarms() -> 63 gen_event:call(alarm_handler, alarm_handler, get_alarms). 64 65add_alarm_handler(Module) when is_atom(Module) -> 66 gen_event:add_handler(alarm_handler, Module, []). 67 68add_alarm_handler(Module, Args) when is_atom(Module) -> 69 gen_event:add_handler(alarm_handler, Module, Args). 70 71delete_alarm_handler(Module) when is_atom(Module) -> 72 gen_event:delete_handler(alarm_handler, Module, []). 73 74%%----------------------------------------------------------------- 75%% Default Alarm handler 76%%----------------------------------------------------------------- 77init(_) -> {ok, []}. 78 79handle_event({set_alarm, Alarm}, Alarms)-> 80 error_logger:info_report([{alarm_handler, {set, Alarm}}]), 81 {ok, [Alarm | Alarms]}; 82handle_event({clear_alarm, AlarmId}, Alarms)-> 83 error_logger:info_report([{alarm_handler, {clear, AlarmId}}]), 84 {ok, lists:keydelete(AlarmId, 1, Alarms)}; 85handle_event(_, Alarms)-> 86 {ok, Alarms}. 87 88handle_info(_, Alarms) -> {ok, Alarms}. 89 90handle_call(get_alarms, Alarms) -> {ok, Alarms, Alarms}; 91handle_call(_Query, Alarms) -> {ok, {error, bad_query}, Alarms}. 92 93terminate(swap, Alarms) -> 94 {alarm_handler, Alarms}; 95terminate(_, _) -> 96 ok. 97