X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=osm_policy_module%2Falarming%2Fservice.py;h=55fe864e238e1feb29f4db7a78c8b305c010d72e;hb=7ce998f3da2c7f10d95508ff2f410075ae2a8757;hp=b916724df940fa8793e9e5825b521a964aecdb88;hpb=acac7559b430f370dd06d09a40a3a387e440f922;p=osm%2FPOL.git diff --git a/osm_policy_module/alarming/service.py b/osm_policy_module/alarming/service.py index b916724..55fe864 100644 --- a/osm_policy_module/alarming/service.py +++ b/osm_policy_module/alarming/service.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +# pylint: disable=no-member # Copyright 2018 Whitestack, LLC # ************************************************************* @@ -26,6 +27,7 @@ import json import logging import requests +from requests.exceptions import ConnectionError from osm_policy_module.common.common_db_client import CommonDbClient from osm_policy_module.common.lcm_client import LcmClient @@ -84,22 +86,24 @@ class AlarmingService: vnf_monitoring_param = next( filter( lambda param: param['id'] == alarm_descriptor['vnf-monitoring-param-ref'], - vnfd['monitoring-param']) + vdu.get('monitoring-parameter', []) + ), + {} ) + metric_name = self._get_metric_name(vnf_monitoring_param) alarm_uuid = await self.mon_client.create_alarm( - metric_name=alarm_descriptor['vnf-monitoring-param-ref'], + metric_name=metric_name, ns_id=nsr_id, vdu_name=vdur['name'], vnf_member_index=vnfr['member-vnf-index-ref'], threshold=alarm_descriptor['value'], - operation=alarm_descriptor['operation'], - statistic=vnf_monitoring_param['aggregation-type'] + operation=alarm_descriptor['operation'] ) alarm = VnfAlarmRepository.create( alarm_id=alarm_descriptor['alarm-id'], alarm_uuid=alarm_uuid, nsr_id=nsr_id, - vnf_member_index=int(vnfr['member-vnf-index-ref']), + vnf_member_index=vnfr['member-vnf-index-ref'], vdu_name=vdur['name'] ) for action_type in ['ok', 'insufficient-data', 'alarm']: @@ -129,6 +133,7 @@ class AlarmingService: database.db.close() async def delete_orphaned_alarms(self, nsr_id): + # TODO: Review as it seems this code is never called log.info("Deleting orphaned vnf alarms for network service %s", nsr_id) database.db.connect() try: @@ -186,8 +191,17 @@ class AlarmingService: if action.type == status: log.info("Executing request to url %s for vnf alarm %s with status %s", action.url, alarm.alarm_id, status) - requests.post(url=action.url, json=json.dumps(payload)) + try: + requests.post(url=action.url, json=json.dumps(payload)) + except ConnectionError: + log.exception("Error connecting to url %s", action.url) + except VnfAlarm.DoesNotExist: log.debug("There is no alarming action configured for alarm %s.", alarm_uuid) finally: database.db.close() + + def _get_metric_name(self, vnf_monitoring_param: dict): + if 'performance-metric' in vnf_monitoring_param: + return vnf_monitoring_param['performance-metric'] + raise ValueError('No metric name found for vnf_monitoring_param %s' % vnf_monitoring_param['id'])