X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=o2ims%2Fadapter%2Fclients%2Ffault_client.py;h=78bd7bb93d9aedadcf2feb63fd0e684790a1ce57;hb=refs%2Fchanges%2F69%2F9669%2F1;hp=b37a4d277ab0c18f18e8e33524bb09eeb8ca2834;hpb=d2f6cc674bf3623caf114a8d7709e70d55ec9340;p=pti%2Fo2.git diff --git a/o2ims/adapter/clients/fault_client.py b/o2ims/adapter/clients/fault_client.py index b37a4d2..78bd7bb 100644 --- a/o2ims/adapter/clients/fault_client.py +++ b/o2ims/adapter/clients/fault_client.py @@ -17,18 +17,16 @@ from typing import List # Optional, Set import uuid as uuid -# from dcmanagerclient.api import client -# from cgtsclient.client import get_client as get_stx_client -# from cgtsclient.exc import EndpointException -# from dcmanagerclient.api.client import client as get_dc_client +from cgtsclient.client import get_client as get_stx_client +from cgtsclient.exc import EndpointException +from dcmanagerclient.api.client import client as get_dc_client from fmclient.client import get_client as get_fm_client from fmclient.common.exceptions import HTTPNotFound -from o2common.service.client.base_client import BaseClient +from o2app.adapter import unit_of_work from o2common.config import config +from o2common.service.client.base_client import BaseClient from o2ims.domain import alarm_obj as alarmModel -from o2ims.domain.resource_type import ResourceTypeEnum -from o2app.adapter import unit_of_work from o2common.helper import o2logging logger = o2logging.get_logger(__name__) @@ -48,7 +46,6 @@ class StxAlarmClient(BaseClient): return self.driver.getAlarmInfo(id) def _list(self, **filters) -> List[alarmModel.FaultGenericModel]: - # filters['resourcetypeid'] newmodels = self.driver.getAlarmList(**filters) uow = self.uow exist_alarms = {} @@ -82,13 +79,18 @@ class StxAlarmClient(BaseClient): if exist_alarms[alarm]: # exist alarm is active continue - event = self._get(alarm) + try: + event = self._get(alarm) + except HTTPNotFound: + logger.debug('alarm {} not in this resource pool {}' + .format(alarm, self._pool_id)) + continue ret.append(event) return ret def _set_stx_client(self): - pass + self.driver.setFaultClient(self._pool_id) class StxEventClient(BaseClient): @@ -103,22 +105,83 @@ class StxEventClient(BaseClient): return self.driver.getEventList(**filters) def _set_stx_client(self): - pass + self.driver.setFaultClient(self._pool_id) # internal driver which implement client call to Stx Fault Management instance class StxFaultClientImp(object): - def __init__(self, fm_client=None): + def __init__(self, fm_client=None, stx_client=None, dc_client=None): super().__init__() self.fmclient = fm_client if fm_client else self.getFmClient() - # if subcloud_id is not None: - # self.stxclient = self.getSubcloudClient(subcloud_id) + self.stxclient = stx_client if stx_client else self.getStxClient() + self.dcclient = dc_client if dc_client else self.getDcmanagerClient() + + def getStxClient(self): + os_client_args = config.get_stx_access_info() + config_client = get_stx_client(**os_client_args) + return config_client + + def getDcmanagerClient(self): + os_client_args = config.get_dc_access_info() + config_client = get_dc_client(**os_client_args) + return config_client def getFmClient(self): os_client_args = config.get_fm_access_info() config_client = get_fm_client(1, **os_client_args) return config_client + def getSubcloudList(self): + subs = self.dcclient.subcloud_manager.list_subclouds() + known_subs = [sub for sub in subs if sub.sync_status != 'unknown'] + return known_subs + + def getSubcloudFaultClient(self, subcloud_id): + subcloud = self.dcclient.subcloud_manager.\ + subcloud_additional_details(subcloud_id) + logger.debug('subcloud name: %s, oam_floating_ip: %s' % + (subcloud[0].name, subcloud[0].oam_floating_ip)) + try: + sub_is_https = False + os_client_args = config.get_stx_access_info( + region_name=subcloud[0].name, + subcloud_hostname=subcloud[0].oam_floating_ip) + stx_client = get_stx_client(**os_client_args) + except EndpointException as e: + msg = e.format_message() + if CGTSCLIENT_ENDPOINT_ERROR_MSG in msg: + sub_is_https = True + os_client_args = config.get_stx_access_info( + region_name=subcloud[0].name, sub_is_https=sub_is_https, + subcloud_hostname=subcloud[0].oam_floating_ip) + stx_client = get_stx_client(**os_client_args) + else: + raise ValueError('Stx endpoint exception: %s' % msg) + except Exception: + raise ValueError('cgtsclient get subcloud client failed') + + os_client_args = config.get_fm_access_info( + sub_is_https=sub_is_https, + subcloud_hostname=subcloud[0].oam_floating_ip) + fm_client = get_fm_client(1, **os_client_args) + + return stx_client, fm_client + + def setFaultClient(self, resource_pool_id): + systems = self.stxclient.isystem.list() + if resource_pool_id == systems[0].uuid: + logger.debug('Fault Client not change: %s' % resource_pool_id) + self.fmclient = self.getFmClient() + return + + subclouds = self.getSubcloudList() + for subcloud in subclouds: + substxclient, subfaultclient = self.getSubcloudFaultClient( + subcloud.subcloud_id) + systems = substxclient.isystem.list() + if resource_pool_id == systems[0].uuid: + self.fmclient = subfaultclient + def getAlarmList(self, **filters) -> List[alarmModel.FaultGenericModel]: alarms = self.fmclient.alarm.list(expand=True) if len(alarms) == 0: @@ -126,48 +189,45 @@ class StxFaultClientImp(object): logger.debug('alarm 1:' + str(alarms[0].to_dict())) # [print('alarm:' + str(alarm.to_dict())) for alarm in alarms if alarm] return [alarmModel.FaultGenericModel( - ResourceTypeEnum.PSERVER, self._alarmconverter(alarm)) + alarmModel.EventTypeEnum.ALARM, self._alarmconverter(alarm)) for alarm in alarms if alarm] def getAlarmInfo(self, id) -> alarmModel.FaultGenericModel: try: alarm = self.fmclient.alarm.get(id) logger.debug('get alarm id ' + id + ':' + str(alarm.to_dict())) - # print(alarm.to_dict()) except HTTPNotFound: event = self.fmclient.event_log.get(id) return alarmModel.FaultGenericModel( - ResourceTypeEnum.PSERVER, self._eventconverter(event, True)) + alarmModel.EventTypeEnum.ALARM, self._eventconverter(event, + True)) return alarmModel.FaultGenericModel( - ResourceTypeEnum.PSERVER, self._alarmconverter(alarm)) + alarmModel.EventTypeEnum.ALARM, self._alarmconverter(alarm)) def getEventList(self, **filters) -> List[alarmModel.FaultGenericModel]: events = self.fmclient.event_log.list(alarms=True, expand=True) logger.debug('event 1:' + str(events[0].to_dict())) # [print('alarm:' + str(event.to_dict())) for event in events if event] return [alarmModel.FaultGenericModel( - ResourceTypeEnum.PSERVER, self._eventconverter(event)) + alarmModel.EventTypeEnum.EVENT, self._eventconverter(event)) for event in events if event] def getEventInfo(self, id) -> alarmModel.FaultGenericModel: event = self.fmclient.event_log.get(id) logger.debug('get event id ' + id + ':' + str(event.to_dict())) - # print(event.to_dict()) return alarmModel.FaultGenericModel( - ResourceTypeEnum.PSERVER, self._eventconverter(event)) + alarmModel.EventTypeEnum.EVENT, self._eventconverter(event)) @ staticmethod def _alarmconverter(alarm): # setattr(alarm, 'alarm_def_id', uuid.uuid3( # uuid.NAMESPACE_URL, alarm.alarm_id)) setattr(alarm, 'state', alarm.alarm_state) - setattr(alarm, 'event_log_type', alarm.alarm_type) - setattr(alarm, 'event_log_id', alarm.alarm_id) - setattr(alarm, 'alarm_def_id', uuid.uuid3( - uuid.NAMESPACE_URL, alarm.alarm_id)) - setattr(alarm, 'probable_cause_id', uuid.uuid3( - uuid.NAMESPACE_URL, alarm.probale_cause)) + setattr(alarm, 'alarm_def_id', str(uuid.uuid3( + uuid.NAMESPACE_URL, alarm.alarm_id))) + setattr(alarm, 'probable_cause_id', str(uuid.uuid3( + uuid.NAMESPACE_URL, alarm.probable_cause))) return alarm @ staticmethod @@ -177,10 +237,10 @@ class StxFaultClientImp(object): if clear: logger.debug('alarm is clear') event.state = 'clear' - setattr(event, 'alarm_def_id', uuid.uuid3( - uuid.NAMESPACE_URL, event.alarm_id)) - setattr(event, 'probable_cause_id', uuid.uuid3( - uuid.NAMESPACE_URL, event.probale_cause)) + setattr(event, 'alarm_def_id', str(uuid.uuid3( + uuid.NAMESPACE_URL, event.alarm_id))) + setattr(event, 'probable_cause_id', str(uuid.uuid3( + uuid.NAMESPACE_URL, event.probable_cause))) return event @ staticmethod