# For those usages not covered by the Apache License, Version 2.0 please
# contact: bdiaz@whitestack.com or glavado@whitestack.com
##
-import asyncio
import logging
import datetime
class HealingService:
- def __init__(self, config: Config, loop=None):
+ def __init__(self, config: Config):
"""
Initializing the HealingService
"""
log.info("HealingService Initialized")
self.conf = config
- if not loop:
- loop = asyncio.get_event_loop()
- self.loop = loop
self.db_client = CommonDbClient(config)
- self.mon_client = MonClient(config, loop=self.loop)
- self.lcm_client = LcmClient(config, loop=self.loop)
+ self.mon_client = MonClient(config)
+ self.lcm_client = LcmClient(config)
log.info("Constructor created for HealingService")
async def configure_healing_alarms(self, nsr_id: str):
database.db.connect()
try:
if status == "alarm":
- with database.db.atomic():
- alarm = HealingActionRepository.get(
- HealingAction.alarm_uuid == alarm_uuid
- )
- vnf_member_index = alarm.vnf_member_index
- vdur_name = alarm.vdur_name
- vdu_id = alarm.vdu_id
- nsr_id = alarm.nsr_id
- heal_type = alarm.recovery_action
- cooldown_time = alarm.cooldown_time
- count_index = alarm.count_index
- last_heal = alarm.last_heal
- day1 = alarm.day1
- vnfinstance_id = alarm.vnfinstance_id
- alarms = HealingActionRepository.list(
- HealingAction.vnf_member_index == vnf_member_index,
- HealingAction.vdur_name == vdur_name,
- )
- statuses = []
+ if self.conf.get("autoheal", "enabled") == "True":
+ with database.db.atomic():
+ alarm = HealingActionRepository.get(
+ HealingAction.alarm_uuid == alarm_uuid
+ )
+ vnf_member_index = alarm.vnf_member_index
+ vdur_name = alarm.vdur_name
+ vdu_id = alarm.vdu_id
+ nsr_id = alarm.nsr_id
+ heal_type = alarm.recovery_action
+ cooldown_time = alarm.cooldown_time
+ count_index = alarm.count_index
+ last_heal = alarm.last_heal
+ day1 = alarm.day1
+ vnfinstance_id = alarm.vnfinstance_id
+ alarms = HealingActionRepository.list(
+ HealingAction.vnf_member_index == vnf_member_index,
+ HealingAction.vdur_name == vdur_name,
+ )
+ statuses = []
- for alarm in alarms:
- statuses.append(alarm.last_status)
- 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(
- nsr_id,
- vnfinstance_id,
- vdur_name,
- vdu_id,
- vnf_member_index,
- heal_type,
- day1,
- count_index,
- )
- last_heal = datetime.datetime.now()
- log.info("datetime.datetime.now %s", datetime.datetime.now)
- alarm.last_heal = last_heal
- alarm.save()
+ for alarm in alarms:
+ statuses.append(alarm.last_status)
+ 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(
+ nsr_id,
+ vnfinstance_id,
+ vdur_name,
+ vdu_id,
+ vnf_member_index,
+ heal_type,
+ day1,
+ count_index,
+ )
+ last_heal = datetime.datetime.now()
+ log.info(
+ "datetime.datetime.now %s", datetime.datetime.now
+ )
+ alarm.last_heal = last_heal
+ alarm.save()
except HealingAction.DoesNotExist:
log.info("There is no healing action configured for alarm %s.", alarm_uuid)