X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=plugins%2FOpenStack%2FAodh%2Falarming.py;h=13b654162fb7c4a54a791b799eaef0038999c2c7;hb=HEAD;hp=b44d624286590ed5309d6dd0d04532fe5d05c5a2;hpb=c85d9848945f55dcda1ab660a116b45c5cd51152;p=osm%2FMON.git diff --git a/plugins/OpenStack/Aodh/alarming.py b/plugins/OpenStack/Aodh/alarming.py deleted file mode 100644 index b44d624..0000000 --- a/plugins/OpenStack/Aodh/alarming.py +++ /dev/null @@ -1,139 +0,0 @@ -"""Send alarm info from Aodh to SO via MON.""" - -import json -import logging as log - -from collections import OrderedDict - -from kafka import KafkaConsumer - -from plugins.OpenStack.Aodh.aodh_common import Aodh_Common - - -class Alarming(object): - """Receives alarm info from Aodh.""" - - def __init__(self): - """Create the aodh_receiver instance.""" - self._aodh_common = Aodh_Common() - - # Initialize a generic consumer object to consume message from the SO - server = {'server': 'localhost:9092', 'topic': 'alarms'} - self._consumer = KafkaConsumer(server['topic'], - group_id='my-group', - bootstrap_servers=server['server']) - - # TODO(mcgoughh): Initialize a producer to send messages bask to the SO - - def alarming(self): - """Consume info from the message bus to manage alarms.""" - # Generate authentication credentials to access keystone; - # auth_token, endpoint - auth_token = self._aodh_common._authenticate() - endpoint = self._aodh_common.get_endpoint() - - # Check the alarming functionlity that needs to be performed - for message in self._consumer: - if message.topic == "alarms": - log.info("Alarm action required: %s" % (message.topic)) - - if message.key == "configure_alarm": - # Configure/Update an alarm - alarm_details = json.loads(message.value) - alarm_id = self.configure_alarm(endpoint, - auth_token, alarm_details) - log.info("New alarm created with alarmID: %s", alarm_id) - - # TODO(mcgoughh): will send an acknowledge message back on - # the bus via the producer - - else: - # TODO(mcoughh): Key alternatives are "notify_alarm" and - # "acknowledge_alarm" will be accomodated later - log.debug("Unknown key, no action will be performed") - else: - log.info("Message topic not relevant to this plugin: %s", - message.topic) - - return - - def alarm_check(self, endpoint, auth_token, alarm_name): - """Get a list of alarms that exist in Aodh.""" - url = "{}/v2/alarms/".format(endpoint) - - # TODO(mcgoughh): will query on resource_id once it has been - # implemented need to create the query field when creating - # the alarm - query = OrderedDict([("q.field", 'name'), ("q.op", "eq"), - ("q.value", str(alarm_name))]) - - result = self._aodh_common._perform_request( - url, auth_token, req_type="get", params=query) - - try: - alarm_id = json.loads(result.text)[0]['alarm_id'] - log.info("An existing alarm was found: %s", alarm_id) - return alarm_id - except Exception: - log.debug("Alarm doesn't exist, needs to be created.") - return None - - def configure_alarm(self, endpoint, auth_token, values): - """Get a list of alarms that exist in Aodh.""" - alarm_id = None - - # TODO(mcgoughh): error check the values sent in the messag - alarm_name = values['name'] - - # Check that this alarm doesn't exist already - alarm_id = self.alarm_check(endpoint, auth_token, alarm_name) - - if alarm_id is None: - url = "{}/v2/alarms/".format(endpoint) - severity = values['severity'] - - # Create a new threshold alarm with a resourceID - # specified as a query - rule = {'threshold': values['threshold'], - 'comparison_operator': 'gt', - 'metric': values['metric'], - 'resource_id': values['resource_id'], - 'resource_type': 'generic', - 'aggregation_method': 'last', } - payload = json.dumps({'state': 'alarm', - 'name': alarm_name, - 'severity': self.get_severity(severity), - 'type': 'gnocchi_resources_threshold', - 'gnocchi_resources_threshold_rule': rule, }) - - # Request performed to create alarm - new_alarm = self._aodh_common._perform_request( - url, auth_token, req_type="post", payload=payload) - - return json.loads(new_alarm.text)['alarm_id'] - else: - return alarm_id - - def delete_alarm(self, endpoint, auth_token, alarmID): - """Delete alarm function.""" - url = "{}/v2/alarms/%s".format(endpoint) % (alarmID) - - self._aodh_common._perform_request(url, auth_token, req_type="delete") - return None - - def get_severity(self, alarm_severity): - """Get a normalized severity for Aodh.""" - # This logic can be changed, the other alternative was to have - # MINOR and MAJOR = "moderate" instead. - if alarm_severity == "WARNIING": - aodh_severity = "low" - elif alarm_severity == "MINOR": - aodh_severity = "moderate" - elif (alarm_severity == "MAJOR" or alarm_severity == "CRITICAL"): - aodh_severity = "critical" - else: - aodh_severity = None - log.warn("Invalid alarm severity configuration") - - log.info("Severity has been normalized for Aodh to: %s", aodh_severity) - return aodh_severity