Skip to content

Commit

Permalink
Enabling alarm soaking feature by default
Browse files Browse the repository at this point in the history
Alarm soaking feature was added earlier but it was disabled by default. This
change will enable the feature by default for process status alarm
Closes-Bug: 1580514

Change-Id: I742cf9129880ade2b47ee87bd305df378cc7db38
(cherry picked from commit 0195b16)
  • Loading branch information
bansalnikhil committed May 20, 2016
1 parent 3410fd9 commit 9717cc7
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 23 deletions.
26 changes: 12 additions & 14 deletions src/opserver/alarmgen.py
Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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\
Expand All @@ -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\
Expand Down Expand Up @@ -472,16 +473,13 @@ def run_uve_soaking_timer(self):
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):
Expand Down
3 changes: 2 additions & 1 deletion src/opserver/plugins/alarm_process_status/main.py
Expand Up @@ -7,7 +7,8 @@ class ProcessStatus(AlarmBase):
NodeMgr reports abnormal status for process(es) in NodeStatus.process_info"""

def __init__(self):
AlarmBase.__init__(self, AlarmBase.SYS_ERR)
AlarmBase.__init__(self, AlarmBase.SYS_ERR, at=10, it=10, fec=True,
fcs=300, fct=4)

def __call__(self, uve_key, uve_data):
or_list = []
Expand Down
20 changes: 12 additions & 8 deletions src/opserver/test/utils/analytics_fixture.py
Expand Up @@ -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
Expand Down Expand Up @@ -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']] = []
Expand All @@ -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)
Expand Down

0 comments on commit 9717cc7

Please sign in to comment.