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=45a27ff1975f968b3e913b4c9c6aee8fada8651d;hpb=586f039c73d102429517cb6068de4342976e4e3f;p=pti%2Fo2.git diff --git a/o2ims/adapter/clients/fault_client.py b/o2ims/adapter/clients/fault_client.py index 45a27ff..78bd7bb 100644 --- a/o2ims/adapter/clients/fault_client.py +++ b/o2ims/adapter/clients/fault_client.py @@ -17,17 +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 o2app.adapter import unit_of_work from o2common.helper import o2logging logger = o2logging.get_logger(__name__) @@ -47,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 = {} @@ -81,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): @@ -102,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: @@ -132,7 +196,6 @@ class StxFaultClientImp(object): 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( @@ -152,7 +215,6 @@ class StxFaultClientImp(object): 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( alarmModel.EventTypeEnum.EVENT, self._eventconverter(event))