X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_policy_module%2Falarming%2Fservice.py;h=d1d1ea567a335b2c6644437423f737f78c7167a0;hb=3fbf2fbf60e3aed3ec7ca0134839f19bc0d733d4;hp=a938234ade34e7c4ff4d331f6469743a9560e89b;hpb=a50fbeb634449657dedcd008ba4a25272ea6441a;p=osm%2FPOL.git diff --git a/osm_policy_module/alarming/service.py b/osm_policy_module/alarming/service.py index a938234..d1d1ea5 100644 --- a/osm_policy_module/alarming/service.py +++ b/osm_policy_module/alarming/service.py @@ -124,6 +124,10 @@ class AlarmingService: nsr_id=nsr_id, vnf_member_index=vnfr["member-vnf-index-ref"], vdu_name=vdur["name"], + last_action='insufficient-data', + id_suffix=0, + ok_ack=False, + alarm_ack=False ) for action_type in ["ok", "insufficient-data", "alarm"]: if ( @@ -227,20 +231,69 @@ class AlarmingService: "Handling vnf alarm %s with status %s", alarm.alarm_id, status ) for action in alarm.actions: + """ + Compares the current status with the last_action status. + If both the status are 'alarm', it avoid sending repetitive alarm notification. + If both the status are 'ok', it avoid sending repetitive ok notification. + """ if action.type == status: - log.info( - "Executing request to url %s for vnf alarm %s with status %s", - action.url, - alarm.alarm_id, - status, - ) - try: - requests.post(url=action.url, json=json.dumps(payload), timeout=alert_timeout) - except RequestException as e: - log.info("Error: RequestException while connecting to url %s", action.url) - log.debug("RequestException %s", e) - except ConnectionError: - log.exception("Error connecting to url %s", action.url) + if bool(self.conf.get('alert', 'enhanced_alarms')): + if ((status != "ok" or (status == "ok" and alarm.ok_ack is False)) and + (status != "alarm" or (status == "alarm" and alarm.alarm_ack is False))): + log.info( + "Executing request to url %s for vnf alarm %s with status %s", + action.url, + alarm.alarm_id, + status + ) + try: + if status == "alarm" and alarm.last_action == "ok": + alarm.id_suffix += 1 + alarm.ok_ack = False + if status == "ok" and alarm.last_action == "alarm": + alarm.alarm_ack = False + alarm.last_action = status + alarm.save() + except Exception as e: + log.exception(e) + + payload["notify_details"]["alarm_number"] = alarm.id_suffix + headers = {"content-type": "application/json"} + try: + resp = requests.post(url=action.url, data=json.dumps(payload), + headers=headers, verify=False, timeout=alert_timeout) + log.info("Response %s", resp) + if resp.status_code == 200: + if status == "ok": + alarm.ok_ack = True + alarm.save() + if status == "alarm": + alarm.alarm_ack = True + alarm.save() + if status == "insufficient-data": + alarm.alarm_ack = False + alarm.ok_ack = False + alarm.save() + except RequestException as e: + log.info("Error: RequestException while connecting to url %s", action.url) + log.debug("RequestException %s", e) + + except ConnectionError: + log.exception("Error connecting to url %s", action.url) + else: + log.info( + "Executing request to url %s for vnf alarm %s with status %s", + action.url, + alarm.alarm_id, + status + ) + try: + requests.post(url=action.url, json=json.dumps(payload), timeout=alert_timeout) + except RequestException as e: + log.info("Error: RequestException while connecting to url %s", action.url) + log.debug("RequestException %s", e) + except ConnectionError: + log.exception("Error connecting to url %s", action.url) except VnfAlarm.DoesNotExist: log.debug(