X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_policy_module%2Fhealing%2Fservice.py;h=1885d05efbacbb97d381cf54590347fc4543dbc2;hb=be42d54170ca40d8d52e2c9fc8d888621585d6cf;hp=8434c663b8595ce1f7063849fa4c675b0354b6ae;hpb=3cab75bfb39b4f03509ccb90dc26404bceec557a;p=osm%2FPOL.git diff --git a/osm_policy_module/healing/service.py b/osm_policy_module/healing/service.py index 8434c66..1885d05 100644 --- a/osm_policy_module/healing/service.py +++ b/osm_policy_module/healing/service.py @@ -43,7 +43,7 @@ log = logging.getLogger(__name__) class HealingService: def __init__(self, config: Config, loop=None): """ - Initializing the HealingService + Initializing the HealingService """ log.info("HealingService Initialized") self.conf = config @@ -57,8 +57,8 @@ class HealingService: async def configure_healing_alarms(self, nsr_id: str): """ - Configuring the Healing alarms - :param nsr_id: Network service record id + Configuring the Healing alarms + :param nsr_id: Network service record id """ log.info("Configuring Healing alarm for NS %s", nsr_id) alarms_created = [] @@ -67,32 +67,38 @@ class HealingService: with database.db.atomic(): vnfrs = self.db_client.get_vnfrs(nsr_id) for vnfr in vnfrs: - vnfd = self.db_client.get_vnfd(vnfr['vnfd-id']) + vnfd = self.db_client.get_vnfd(vnfr["vnfd-id"]) df = vnfd.get("df", [{}])[0] if "healing-aspect" not in df: log.info("No healing configuration present in vnfd") continue healing_aspects = df["healing-aspect"] for healing_aspect in healing_aspects: - for healing_policy in healing_aspect.get( - "healing-policy", () - ): - vdu_id = healing_policy['vdu-id'] + for healing_policy in healing_aspect.get("healing-policy", ()): + vdu_id = healing_policy["vdu-id"] for vdur in vnfr["vdur"]: if vdu_id == vdur["vdu-id-ref"]: try: HealingActionRepository.get( - HealingAction.alarm_id == healing_policy['event-name'], - HealingAction.vdur_name == vdur['name'], + HealingAction.alarm_id + == healing_policy["event-name"], + HealingAction.vdur_name == vdur["name"], HealingAction.nsr_id == nsr_id, - HealingAction.cooldown_time == healing_policy['cooldown-time'], - HealingAction.recovery_action == healing_policy['action-on-recovery'], - HealingAction.vnfinstance_id == vnfr['id'], - HealingAction.vdu_id == healing_policy['vdu-id'], - HealingAction.count_index == vdur['count-index'] + HealingAction.cooldown_time + == healing_policy["cooldown-time"], + HealingAction.recovery_action + == healing_policy["action-on-recovery"], + HealingAction.vnfinstance_id == vnfr["id"], + HealingAction.vdu_id + == healing_policy["vdu-id"], + HealingAction.count_index + == vdur["count-index"], + ) + log.debug( + "vdu %s already has an alarm configured with same id %s", + healing_policy["vdu-id"], + healing_policy["event-name"], ) - log.debug("vdu %s already has an alarm configured with same id %s", - healing_policy['vdu-id'], healing_policy['event-name']) continue except HealingAction.DoesNotExist: pass @@ -101,28 +107,26 @@ class HealingService: alarm_uuid = await self.mon_client.create_alarm( metric_name=metric_name, ns_id=nsr_id, - vdu_name=vdur['name'], - vnf_member_index=vnfr[ - 'member-vnf-index-ref' - ], + vdu_name=vdur["name"], + vnf_member_index=vnfr["member-vnf-index-ref"], threshold=1, operation="LT", - statistic="AVERAGE" + statistic="AVERAGE", ) alarm = HealingActionRepository.create( - alarm_id=healing_policy['event-name'], + alarm_id=healing_policy["event-name"], alarm_uuid=alarm_uuid, nsr_id=nsr_id, - vnf_member_index=vnfr[ - 'member-vnf-index-ref' + vnf_member_index=vnfr["member-vnf-index-ref"], + vdur_name=vdur["name"], + recovery_action=healing_policy[ + "action-on-recovery" ], - vdur_name=vdur['name'], - recovery_action=healing_policy['action-on-recovery'], - cooldown_time=healing_policy['cooldown-time'], - day1=healing_policy['day1'], - vdu_id=healing_policy['vdu-id'], - vnfinstance_id=vnfr['id'], - count_index=vdur['count-index'] + cooldown_time=healing_policy["cooldown-time"], + day1=healing_policy["day1"], + vdu_id=healing_policy["vdu-id"], + vnfinstance_id=vnfr["id"], + count_index=vdur["count-index"], ) alarms_created.append(alarm) @@ -131,12 +135,16 @@ class HealingService: if len(alarms_created) > 0: for alarm in alarms_created: try: - await self.mon_client.delete_alarm(alarm.nsr_id, - alarm.vnf_member_index, - alarm.vdu_name, - alarm.alarm_uuid) + await self.mon_client.delete_alarm( + alarm.nsr_id, + alarm.vnf_member_index, + alarm.vdu_name, + alarm.alarm_uuid, + ) except ValueError: - log.exception("Error deleting alarm in MON %s", alarm.alarm_uuid) + log.exception( + "Error deleting alarm in MON %s", alarm.alarm_uuid + ) raise e finally: database.db.close() @@ -151,26 +159,20 @@ class HealingService: ): try: self.db_client.get_vdur( - nsr_id, - alarm.vnf_member_index, - alarm.vdur_name + nsr_id, alarm.vnf_member_index, alarm.vdur_name ) except VdurNotFound: - log.info( - "Deleting orphaned alarm %s", - alarm.alarm_uuid - ) + log.info("Deleting orphaned alarm %s", alarm.alarm_uuid) try: await self.mon_client.delete_alarm( alarm.nsr_id, alarm.vnf_member_index, alarm.vdur_name, - alarm.alarm_uuid + alarm.alarm_uuid, ) except ValueError: log.exception( - "Error deleting alarm in MON %s", - alarm.alarm_uuid + "Error deleting alarm in MON %s", alarm.alarm_uuid ) alarm.delete_instance() @@ -182,8 +184,8 @@ class HealingService: async def delete_healing_alarms(self, nsr_id): """ - Deleting the healing alarms - :param nsr_id: Network service record id + Deleting the healing alarms + :param nsr_id: Network service record id """ log.info("Deleting healing vnf alarms for network service %s", nsr_id) database.db.connect() @@ -197,12 +199,11 @@ class HealingService: alarm.nsr_id, alarm.vnf_member_index, alarm.vdur_name, - alarm.alarm_uuid + alarm.alarm_uuid, ) except ValueError: log.exception( - "Error deleting alarm in MON %s", - alarm.alarm_uuid + "Error deleting alarm in MON %s", alarm.alarm_uuid ) alarm.delete_instance() @@ -214,9 +215,9 @@ class HealingService: async def update_alarm_status(self, alarm_uuid: str, status: str): """ - For updating the alarm status - :param alarm_uuid: vdu uuid - :param status: Status of an alarm + For updating the alarm status + :param alarm_uuid: vdu uuid + :param status: Status of an alarm """ database.db.connect() try: @@ -227,17 +228,15 @@ class HealingService: alarm.last_status = status alarm.save() except HealingAction.DoesNotExist: - log.debug( - "There is no healing action configured for alarm %s.", alarm_uuid - ) + log.debug("There is no healing action configured for alarm %s.", alarm_uuid) finally: database.db.close() async def handle_alarm(self, alarm_uuid: str, status: str): """ - For Handling the healing alarms - :param alarm_uuid: vdu uuid - :param status: Status of an alarm + For Handling the healing alarms + :param alarm_uuid: vdu uuid + :param status: Status of an alarm """ await self.update_alarm_status(alarm_uuid, status) database.db.connect() @@ -259,13 +258,13 @@ class HealingService: vnfinstance_id = alarm.vnfinstance_id alarms = HealingActionRepository.list( HealingAction.vnf_member_index == vnf_member_index, - HealingAction.vdur_name == vdur_name + HealingAction.vdur_name == vdur_name, ) statuses = [] for alarm in alarms: statuses.append(alarm.last_status) - if ((set(statuses) == {'alarm'}) or ('alarm' in statuses)): + if (set(statuses) == {"alarm"}) or ("alarm" in statuses): delta = datetime.datetime.now() - last_heal if delta.total_seconds() > cooldown_time: await self.lcm_client.heal( @@ -276,7 +275,7 @@ class HealingService: vnf_member_index, heal_type, day1, - count_index + count_index, ) last_heal = datetime.datetime.now() log.info("datetime.datetime.now %s", datetime.datetime.now) @@ -284,9 +283,6 @@ class HealingService: alarm.save() except HealingAction.DoesNotExist: - log.info( - "There is no healing action configured for alarm %s.", - alarm_uuid - ) + log.info("There is no healing action configured for alarm %s.", alarm_uuid) finally: database.db.close()