From 0195b165fadbdb57917f47606511d8079164e8a6 Mon Sep 17 00:00:00 2001 From: Nikhil B Date: Mon, 16 May 2016 22:48:41 +0530 Subject: [PATCH] Enabling alarm soaking feature by default Alarm soaking feature was added earlier but it was disabled by default. This change will enable the feature by default Closes-Bug: 1580514 Change-Id: I742cf9129880ade2b47ee87bd305df378cc7db38 --- src/opserver/alarmgen.py | 26 +++++++++----------- src/opserver/plugins/alarm_base.py | 2 +- src/opserver/test/utils/analytics_fixture.py | 20 +++++++++------ 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/opserver/alarmgen.py b/src/opserver/alarmgen.py index 5aa414eedb6..8263df2b258 100644 --- a/src/opserver/alarmgen.py +++ b/src/opserver/alarmgen.py @@ -266,8 +266,7 @@ def get_uas(self): return self.uas def set_uai(self, uai): - if self.uai == None: - self.uai = uai + self.uai = uai def is_new_alarm_same(self, new_uai): uai2 = copy.deepcopy(self.uai) @@ -280,6 +279,12 @@ def is_new_alarm_same(self, new_uai): return True return False + def _remove_timer_from_list(self, index): + AlarmStateMachine.tab_alarms_timer[index].discard((self.tab,\ + self.uv, self.nm)) + if len(AlarmStateMachine.tab_alarms_timer[index]) == 0: + del AlarmStateMachine.tab_alarms_timer[index] + def set_alarms(self): """ This function runs the state machine code for setting an alarm @@ -290,8 +295,7 @@ def set_alarms(self): curr_time = int(time.time()) if self.uas.state == UVEAlarmState.Soak_Idle: self.uas.state = UVEAlarmState.Active - AlarmStateMachine.tab_alarms_timer[self.idleTimeout].discard\ - ((self.tab, self.uv, self.nm)) + self._remove_timer_from_list(self.idleTimeout) elif self.uas.state == UVEAlarmState.Idle: if self.uac.FreqExceededCheck: # log the timestamp @@ -346,11 +350,10 @@ def clear_alarms(self): if self.uas.state == UVEAlarmState.Soak_Active: # stop the active timer and start idle timer self.uas.state = UVEAlarmState.Idle + self._remove_timer_from_list(self.activeTimeout) if self.uac.FreqCheck_Seconds: self.deleteTimeout = cur_time + self.uac.FreqCheck_Seconds to_value = self.deleteTimeout - AlarmStateMachine.tab_alarms_timer[self.activeTimeout].discard\ - ((self.tab, self.uv, self.nm)) if not to_value in AlarmStateMachine.tab_alarms_timer: AlarmStateMachine.tab_alarms_timer[to_value] = set() AlarmStateMachine.tab_alarms_timer[to_value].add\ @@ -365,8 +368,6 @@ def clear_alarms(self): if self.uac.FreqCheck_Seconds: self.deleteTimeout = cur_time + self.uac.FreqCheck_Seconds to_value = self.deleteTimeout - AlarmStateMachine.tab_alarms_timer[self.activeTimeout]\ - .discard((self.tab, self.uv, self.nm)) if not to_value in AlarmStateMachine.tab_alarms_timer: AlarmStateMachine.tab_alarms_timer[to_value] = set() AlarmStateMachine.tab_alarms_timer[to_value].add\ @@ -469,16 +470,13 @@ def run_uve_soaking_timer(self, curr_time): def delete_timers(self): if self.uas.state == UVEAlarmState.Idle: if self.deleteTimeout and self.deleteTimeout > 0: - AlarmStateMachine.tab_alarms_timer[self.deleteTimeout].\ - discard((self.tab, self.uv, self.nm)) + self._remove_timer_from_list(self.deleteTimeout) elif self.uas.state == UVEAlarmState.Soak_Active: if self.activeTimeout and self.activeTimeout > 0: - AlarmStateMachine.tab_alarms_timer[self.activeTimeout].\ - discard((self.tab, self.uv, self.nm)) + self._remove_timer_from_list(self.activeTimeout) elif self.uas.state == UVEAlarmState.Soak_Idle: if self.idleTimeout and self.idleTimeout > 0: - AlarmStateMachine.tab_alarms_timer[self.idleTimeout].\ - discard((self.tab, self.uv, self.nm)) + self._remove_timer_from_list(self.idleTimeout) @staticmethod def run_timers(curr_time, tab_alarms): diff --git a/src/opserver/plugins/alarm_base.py b/src/opserver/plugins/alarm_base.py index d78a263831b..6c9707c16b6 100644 --- a/src/opserver/plugins/alarm_base.py +++ b/src/opserver/plugins/alarm_base.py @@ -9,7 +9,7 @@ class AlarmBase(object): SYS_EMERG, SYS_ALERT, SYS_CRIT, SYS_ERR,\ SYS_WARN, SYS_NOTICE, SYS_INFO, SYS_DEBUG = range(8) - def __init__(self, sev, at=0, it=0, fec=False, fcs=0, fct=0): + def __init__(self, sev, at=10, it=10, fec=True, fcs=300, fct=4): self._sev = sev self._ActiveTimer = at self._IdleTimer = it diff --git a/src/opserver/test/utils/analytics_fixture.py b/src/opserver/test/utils/analytics_fixture.py index d7701f2a70e..717c597e7b8 100644 --- a/src/opserver/test/utils/analytics_fixture.py +++ b/src/opserver/test/utils/analytics_fixture.py @@ -26,6 +26,7 @@ from generator_introspect_utils import VerificationGenerator from opserver.sandesh.viz.constants import COLLECTOR_GLOBAL_TABLE, SOURCE, MODULE from opserver.opserver_util import OpServerUtils +from opserver.sandesh.alarmgen_ctrl.ttypes import UVEAlarmState from sandesh_common.vns.constants import NodeTypeNames, ModuleNames from sandesh_common.vns.ttypes import NodeType, Module from pysandesh.util import UTCTimestampUsec @@ -768,16 +769,17 @@ def verify_uvetable_alarm(self, table, name, type, is_set = True, any_of = None) return True if not len(uves): return True - else: - self.logger.info("Did not expect UVEs for %s" % table) - return False - if not ret['uves']: - ret['uves'] = [] + if not uves: + uves = [] alarms = {} - for uves in ret['uves']: - elem = uves['uai']['UVEAlarms'] - if elem['name'] != name: + for uve in uves: + elem = uve['uai']['UVEAlarms'] + if name and elem['name'] != name: continue + #alarms in Idle state should not be counted + alarm_state = int(uve['uas']['UVEAlarmOperState']['state']) + if (alarm_state == UVEAlarmState.Idle): + continue for alm in elem['alarms']: if len(alm['any_of']): alarms[alm['type']] = [] @@ -801,6 +803,8 @@ def verify_uvetable_alarm(self, table, name, type, is_set = True, any_of = None) return False return is_set else: + if not name: + return True return not is_set @retry(delay=2, tries=10)