Skip to content
Snippets Groups Projects
Commit 9df066ef authored by Graziano Scalamera's avatar Graziano Scalamera
Browse files

Add notification when alarm re-enabled

parent 0cd0c5f2
No related branches found
No related tags found
No related merge requests found
......@@ -88,6 +88,9 @@ typedef map<string, state_addr_map_t> receiver_map_t;
//alm name -> groupnames
typedef map<string, string> group_map_t;
//alm name -> state
typedef map<string, string> state_map_t;
struct AlarmStringUtils
{
static map<string, string> domain_map;
......@@ -147,6 +150,7 @@ public:
receiver_map_t groupReceiverMap;
state_addr_map_t globalReceiverMap;
handler_map_t handlerMap;
state_map_t prevStateMap;
std::unique_ptr<PushThread, std::function<void(PushThread*)>> push_thread;
......
......@@ -216,8 +216,29 @@ namespace AlarmNotify_ns
DEBUG_STREAM << __func__ << ": ... -> state=" << state << " name=" << cmd->alarm_info.at("tag");
cmd->signal.set_alarm_state(state);
string receivers;
string receivers, prev_receivers;
string prev_state;
try
{
prev_state = _dev->prevStateMap.at(cmd->ev_data->attr_name);
}
catch(const std::out_of_range& oe)
{
DEBUG_STREAM << __func__<< ": No previous state for '"<< cmd->ev_data->attr_name << "'" << endl;
}
_dev->prepare_receivers(cmd->ev_data->attr_name, state, groups, receivers);
if(state!= prev_state && (prev_state == "OOSRV" || prev_state == "SHLVD")) //to allow notification from disabled
{
_dev->prepare_receivers(cmd->ev_data->attr_name, prev_state, groups, prev_receivers);
if(!prev_receivers.empty())
DEBUG_STREAM << __func__ << ": ADDED previous receiver alarm='" << cmd->ev_data->attr_name << "' state=" << state << " prev_state=" << prev_state << " rec=" << prev_receivers;
}
if(!receivers.empty() && !prev_receivers.empty())
receivers = receivers + "," + prev_receivers;
else if(receivers.empty() && !prev_receivers.empty())
receivers = prev_receivers;
if(!receivers.empty())
{
email << "dest=";
......@@ -230,6 +251,7 @@ namespace AlarmNotify_ns
DEBUG_STREAM << __func__ << ": sent email for " << cmd->ev_data->attr_name << ": -->";
DEBUG_STREAM << __func__ << ": --> " << email.str();
cmd->signal.set_ok_db();
_dev->prevStateMap[cmd->ev_data->attr_name] = state;
}
#if 0
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment