From 0ff0ddf252b0a8f03c795d943e804cefd8274f9c Mon Sep 17 00:00:00 2001 From: Sundaresan Rajangam Date: Tue, 6 Dec 2016 18:09:54 -0800 Subject: [PATCH] change in alarm type in alarm sandesh Alarms with same name may be configured by different tenants; therefore alarm type in alarm sandesh should be same as fqname in alarm config. Change-Id: I5c1264ce8665d8a67a549507c687674005bd9692 Closes-Bug: #1647824 --- src/opserver/alarmgen.py | 17 ++++++------ src/opserver/test/test_analytics_uve.py | 36 +++++++++++++++++-------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/opserver/alarmgen.py b/src/opserver/alarmgen.py index 5b5d0bdf380..c08164d5fd3 100644 --- a/src/opserver/alarmgen.py +++ b/src/opserver/alarmgen.py @@ -204,23 +204,22 @@ def __init__(self, logger): def process_alarms(self, alarm_fqname, alarm, uv, local_uve): if not alarm.is_enabled(): return - alarm_name = alarm_fqname.rsplit(':', 1)[1] sev = alarm.severity() if not uv in self.ActiveTimer: self.ActiveTimer[uv] = {} - self.ActiveTimer[uv][alarm_name] = alarm.ActiveTimer() + self.ActiveTimer[uv][alarm_fqname] = alarm.ActiveTimer() if not uv in self.IdleTimer: self.IdleTimer[uv] = {} - self.IdleTimer[uv][alarm_name] = alarm.IdleTimer() + self.IdleTimer[uv][alarm_fqname] = alarm.IdleTimer() if not uv in self.FreqExceededCheck: self.FreqExceededCheck[uv] = {} - self.FreqExceededCheck[uv][alarm_name] = alarm.FreqExceededCheck() + self.FreqExceededCheck[uv][alarm_fqname] = alarm.FreqExceededCheck() if not uv in self.FreqCheck_Times: self.FreqCheck_Times[uv] = {} - self.FreqCheck_Times[uv][alarm_name] = alarm.FreqCheck_Times() + self.FreqCheck_Times[uv][alarm_fqname] = alarm.FreqCheck_Times() if not uv in self.FreqCheck_Seconds: self.FreqCheck_Seconds[uv] = {} - self.FreqCheck_Seconds[uv][alarm_name] = alarm.FreqCheck_Seconds() + self.FreqCheck_Seconds[uv][alarm_fqname] = alarm.FreqCheck_Seconds() try: # __call__ method overrides the generic alarm processing code. @@ -230,9 +229,9 @@ def process_alarms(self, alarm_fqname, alarm, uv, local_uve): or_list = self._evaluate_uve_for_alarms( alarm.config(), uv, local_uve) self._logger.debug("Alarm[%s] %s: %s" % - (uv, alarm_name, str(or_list))) + (uv, alarm_fqname, str(or_list))) if or_list: - self.uve_alarms[alarm_name] = UVEAlarmInfo(type=alarm_name, + self.uve_alarms[alarm_fqname] = UVEAlarmInfo(type=alarm_fqname, severity=sev, timestamp=0, token="", alarm_rules=AlarmRules(or_list), description=alarm.description(), ack=False) @@ -241,7 +240,7 @@ def process_alarms(self, alarm_fqname, alarm, uv, local_uve): messag = template.format(type(ex).__name__, ex.args) self._logger.error("%s : traceback %s" % \ (messag, traceback.format_exc())) - self.uve_alarms[alarm_name] = UVEAlarmInfo(type=alarm_name, + self.uve_alarms[alarm_fqname] = UVEAlarmInfo(type=alarm_fqname, severity=sev, timestamp=0, token="", alarm_rules=AlarmRules(None), description=alarm.description(), ack=False) diff --git a/src/opserver/test/test_analytics_uve.py b/src/opserver/test/test_analytics_uve.py index 142a847a84e..dc0b109c1f9 100755 --- a/src/opserver/test/test_analytics_uve.py +++ b/src/opserver/test/test_analytics_uve.py @@ -164,13 +164,15 @@ def test_03_redis_uve_restart(self): # check for PartialSysinfo alarm alarm_gen1.send_vrouterinfo("myvrouter1") assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute")) + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute")) self.verify_uve_resync(vizd_obj) # Alarm should return after redis restart assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute")) + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute")) # should there be a return True here? # end test_03_redis_uve_restart @@ -352,7 +354,8 @@ def test_06_alarmgen_basic(self): assert vizd_obj.verify_on_setup() assert(vizd_obj.verify_uvetable_alarm("ObjectCollectorInfo", - "ObjectCollectorInfo:" + socket.gethostname(), "process-status")) + "ObjectCollectorInfo:" + socket.gethostname(), + "default-global-system-config:process-status")) # setup generator for sending Vrouter build_info collector = vizd_obj.collectors[0].get_addr() alarm_gen1 = self.useFixture( @@ -364,7 +367,8 @@ def test_06_alarmgen_basic(self): # check for PartialSysinfo alarm alarm_gen1.send_vrouterinfo("myvrouter1") assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute", + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute", rules=[{"and_list": [{ "condition": { "operation": "==", @@ -380,19 +384,24 @@ def test_06_alarmgen_basic(self): # Now try to clear the alarm by sending build_info alarm_gen1.send_vrouterinfo("myvrouter1", b_info = True) assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute", is_set = False)) + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute", + is_set=False)) # send vrouter UVE without build_info !!! # check for PartialSysinfo alarm alarm_gen1.send_vrouterinfo("myvrouter1", deleted = True) alarm_gen1.send_vrouterinfo("myvrouter1") assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute")) + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute")) # Now try to clear the alarm by deleting the UVE alarm_gen1.send_vrouterinfo("myvrouter1", deleted = True) assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute", is_set = False)) + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute", + is_set=False)) alarm_gen2 = self.useFixture( GeneratorFixture('vrouter-agent', [collector], logging, @@ -403,19 +412,23 @@ def test_06_alarmgen_basic(self): # check for PartialSysinfo alarm alarm_gen2.send_vrouterinfo("myvrouter2") assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter2", "partial-sysinfo-compute")) + "ObjectVRouter:myvrouter2", + "default-global-system-config:partial-sysinfo-compute")) # Now try to clear the alarm by disconnecting the generator alarm_gen2._sandesh_instance._client._connection.set_admin_state(\ down=True) assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter2", "partial-sysinfo-compute", is_set = False)) + "ObjectVRouter:myvrouter2", + "default-global-system-config:partial-sysinfo-compute", + is_set=False)) # send vrouter UVE of myvrouter without build_info again !!! # check for PartialSysinfo alarm alarm_gen1.send_vrouterinfo("myvrouter1") assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute")) + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute")) # Verify that we can give up partition ownership assert(vizd_obj.set_alarmgen_partition(0,0) == 'true') @@ -439,7 +452,8 @@ def test_06_alarmgen_basic(self): # The PartialSysinfo alarm on myvrouter should return assert(vizd_obj.verify_uvetable_alarm("ObjectVRouter", - "ObjectVRouter:myvrouter1", "partial-sysinfo-compute")) + "ObjectVRouter:myvrouter1", + "default-global-system-config:partial-sysinfo-compute")) return True # end test_06_alarmgen_basic