Skip to content

Commit

Permalink
change in alarm type in alarm sandesh
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Sundaresan Rajangam committed Dec 7, 2016
1 parent 39efa1d commit 0ff0ddf
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 20 deletions.
17 changes: 8 additions & 9 deletions src/opserver/alarmgen.py
Expand Up @@ -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.
Expand All @@ -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)
Expand All @@ -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)
Expand Down
36 changes: 25 additions & 11 deletions src/opserver/test/test_analytics_uve.py
Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand All @@ -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": "==",
Expand All @@ -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,
Expand All @@ -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')
Expand All @@ -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
Expand Down

0 comments on commit 0ff0ddf

Please sign in to comment.