1
%% ``The contents of this file are subject to the Erlang Public License,
2
%% Version 1.1, (the "License"); you may not use this file except in
3
%% compliance with the License. You should have received a copy of the
4
%% Erlang Public License along with this software. If not, it can be
5
%% retrieved via the world wide web at http://www.erlang.org/.
7
%% Software distributed under the License is distributed on an "AS IS"
8
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
9
%% the License for the specific language governing rights and limitations
12
%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
13
%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
14
%% AB. All Rights Reserved.''
21
%%-include_lib("mnemosyne/include/mnemosyne.hrl").
23
-export([register_event/2, register_alarm/4,
24
unregister_event/1, unregister_alarm/1,
25
asend_event/3, send_event/3, send_event/4,
26
get_fault_id/0, asend_alarm/5, send_alarm/5, send_alarm/6,
27
aclear_alarm/1, clear_alarm/1, clear_alarm/2,
28
get_no_alarms/0, get_alarms/1, get_alarm_status/0]).
29
-export([alarm_first/0, alarm_next/1]).
31
%% Timeout for calls to the globally registered eva_server.
34
register_event(Name, Log) ->
35
gen_server:call({global, eva_server}, {reg_event, Name, Log}, ?TIME).
37
register_alarm(Name, Log, Class, Severity) ->
38
gen_server:call({global, eva_server},
39
{reg_alarm, Name, Log, Class, Severity}, ?TIME).
41
unregister_event(Name) ->
42
gen_server:call({global, eva_server}, {unreg_event, Name}, ?TIME).
44
unregister_alarm(Name) ->
45
gen_server:call({global, eva_server}, {unreg_alarm, Name}, ?TIME).
48
asend_event(Name, Sender, Extra) ->
49
gen_server:cast({global, eva_server}, {send_event, {Name, Sender, Extra}}).
50
send_event(Name, Sender, Extra) ->
51
gen_server:call({global, eva_server},
52
{send_event, {Name, Sender, Extra}}, ?TIME).
53
send_event(Name, Sender, Extra, Time) ->
54
gen_server:call({global, eva_server},
55
{send_event, {Name, Sender, Extra}}, Time).
57
get_fault_id() -> {node(), now()}.
59
asend_alarm(Name, AlarmFaultId, Sender, Cause, Extra) ->
60
Msg = {send_alarm, {Name, AlarmFaultId, Sender, Cause, Extra}},
61
gen_server:cast({global, eva_server}, Msg).
62
send_alarm(Name, AlarmFaultId, Sender, Cause, Extra) ->
63
Msg = {send_alarm, {Name, AlarmFaultId, Sender, Cause, Extra}},
64
gen_server:call({global, eva_server}, Msg, ?TIME).
65
send_alarm(Name, AlarmFaultId, Sender, Cause, Extra, Time) ->
66
Msg = {send_alarm, {Name, AlarmFaultId, Sender, Cause, Extra}},
67
gen_server:call({global, eva_server}, Msg, Time).
69
aclear_alarm(AlarmFaultId) ->
70
gen_server:cast({global, eva_server}, {clear_alarm, AlarmFaultId}).
71
clear_alarm(AlarmFaultId) ->
72
gen_server:call({global, eva_server}, {clear_alarm, AlarmFaultId}, ?TIME).
73
clear_alarm(AlarmFaultId, Time) ->
74
gen_server:call({global, eva_server}, {clear_alarm, AlarmFaultId}, Time).
77
gen_server:call({global, eva_server}, get_no_alarms).
79
get_alarms({name, Name}) ->
80
mnesia:dirty_match_object(?wild_alarm#alarm{name = Name});
81
%% This is how I would write if it wasn't for bug in mnemosyne
82
% Handle = query [Alarm || Alarm <- table(alarm),
83
% Alarm.name = Name] end,
84
% mnesia:ets(fun() -> mnemosyne:eval(Handle) end);
86
get_alarms({sender, Sender}) ->
87
mnesia:dirty_match_object(?wild_alarm#alarm{sender = Sender}).
88
%% This is how I would write if it wasn't for bug in mnemosyne
89
% Handle = query [Alarm || Alarm <- table(alarm),
90
% Alarm.sender = Sender] end,
91
% mnesia:ets(fun() -> mnemosyne:eval(Handle) end).
94
{Critical, Major, Minor, Warning, Indeterminate} =
95
eva_server:get_alarm_status(),
96
[{critical, to_boolean(Critical)},
97
{major, to_boolean(Major)},
98
{minor, to_boolean(Minor)},
99
{warning, to_boolean(Warning)},
100
{indeterminate, to_boolean(Indeterminate)}].
102
to_boolean(0) -> false;
103
to_boolean(Cnt) -> true.
105
%% These should be replaced by calls to appropriate Mnesia functions,
106
%% when the order is correctly implemented in Mnesia.
108
case mnesia:snmp_get_next_index(alarm, []) of
109
{ok, [FirstIndex]} -> {ok, FirstIndex};
114
case mnesia:snmp_get_next_index(alarm, [Index]) of
115
{ok, [NextIndex]} -> {ok, NextIndex};