49f88f15c9
This commit re-orders the imports to allow enabling in flake8: H306: imports not in alphabetical order This change should have no functional impact on the code Scenario tests all passing. Story: 2004515 Task: 28684 Change-Id: I412474dfdd1ee9d7deade7f7d6aca32085c0f3f2 Signed-off-by: Al Bailey <Al.Bailey@windriver.com>
110 lines
3.2 KiB
Python
Executable File
110 lines
3.2 KiB
Python
Executable File
#
|
|
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
import datetime
|
|
import six
|
|
|
|
from nfv_common import debug
|
|
from nfv_common import thread
|
|
from nfv_common import timers
|
|
|
|
from nfv_common.helpers import coroutine
|
|
from nfv_common.helpers import Singleton
|
|
|
|
from nfv_common.alarm._alarm_handlers import AlarmHandlers
|
|
|
|
DLOG = debug.debug_get_logger('nfv_common.alarm.alarm_thread')
|
|
|
|
|
|
@six.add_metaclass(Singleton)
|
|
class AlarmWorker(thread.ThreadWorker):
|
|
"""
|
|
Alarm Worker
|
|
"""
|
|
def __init__(self, name, config):
|
|
super(AlarmWorker, self).__init__(name)
|
|
self._config = config
|
|
self._handlers = None
|
|
self._alarm_audit_timer_id = None
|
|
|
|
@coroutine
|
|
def _alarm_audit(self):
|
|
"""
|
|
Called periodically to audit alarms
|
|
"""
|
|
while True:
|
|
(yield)
|
|
self._handlers.audit_alarms()
|
|
|
|
def initialize(self):
|
|
"""
|
|
Initialize the Alarm Worker
|
|
"""
|
|
self._handlers = AlarmHandlers(self._config['namespace'],
|
|
self._config['handlers'])
|
|
self._handlers.initialize(self._config['config_file'])
|
|
|
|
self._alarm_audit_timer_id = timers.timers_create_timer(
|
|
'alarm_audit', int(self._config['audit_interval']),
|
|
int(self._config['audit_interval']), self._alarm_audit)
|
|
|
|
def finalize(self):
|
|
"""
|
|
Finalize the Alarm Worker
|
|
"""
|
|
if self._handlers is not None:
|
|
self._handlers.finalize()
|
|
|
|
if self._alarm_audit_timer_id is not None:
|
|
timers.timers_delete_timer(self._alarm_audit_timer_id)
|
|
|
|
def do_work(self, action, work):
|
|
"""
|
|
Do work given to the Alarm Worker
|
|
"""
|
|
if AlarmThread.ACTION_RAISE_ALARM == action:
|
|
DLOG.verbose("Raise alarm with uuid=%s" % work['alarm-uuid'])
|
|
self._handlers.raise_alarm(work['alarm-uuid'], work['alarm-data'])
|
|
|
|
elif AlarmThread.ACTION_CLEAR_ALARM == action:
|
|
DLOG.verbose("Clear alarm with uuid=%s" % work['alarm-uuid'])
|
|
self._handlers.clear_alarm(work['alarm-uuid'])
|
|
|
|
else:
|
|
DLOG.debug("Unknown action %s given." % action)
|
|
|
|
|
|
@six.add_metaclass(Singleton)
|
|
class AlarmThread(thread.Thread):
|
|
"""
|
|
Alarm Thread
|
|
"""
|
|
ACTION_RAISE_ALARM = "thread-raise-alarm"
|
|
ACTION_CLEAR_ALARM = "thread-clear-alarm"
|
|
|
|
def __init__(self, config=None):
|
|
self._worker = AlarmWorker('Alarm', config)
|
|
super(AlarmThread, self).__init__('Alarm', self._worker)
|
|
|
|
def alarm_raise(self, alarm_uuid, alarm_data):
|
|
"""
|
|
Send raise alarm to the Alarm Thread Worker
|
|
"""
|
|
work = dict()
|
|
work['alarm-uuid'] = alarm_uuid
|
|
work['alarm-data'] = alarm_data
|
|
work['alarm-change-date'] = datetime.datetime.utcnow()
|
|
self.send_work(AlarmThread.ACTION_RAISE_ALARM, work)
|
|
|
|
def alarm_clear(self, alarm_uuid):
|
|
"""
|
|
Send clear alarm to the Alarm Thread Worker
|
|
"""
|
|
work = dict()
|
|
work['alarm-uuid'] = alarm_uuid
|
|
work['alarm-data'] = None
|
|
work['alarm-change-date'] = datetime.datetime.utcnow()
|
|
self.send_work(AlarmThread.ACTION_CLEAR_ALARM, work)
|