X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=o2ims%2Fadapter%2Fclients%2Ffault_client.py;h=c9e1e95cf531f941009942200fda39c388adb7c4;hb=e00040ca7c6149995c5883bcd9dd81e02b25d0da;hp=78bd7bb93d9aedadcf2feb63fd0e684790a1ce57;hpb=4fabba9d441a1762e8ebd99cca3cea11dd0f0b62;p=pti%2Fo2.git diff --git a/o2ims/adapter/clients/fault_client.py b/o2ims/adapter/clients/fault_client.py index 78bd7bb..c9e1e95 100644 --- a/o2ims/adapter/clients/fault_client.py +++ b/o2ims/adapter/clients/fault_client.py @@ -1,4 +1,4 @@ -# Copyright (C) 2022 Wind River Systems, Inc. +# Copyright (C) 2022-2024 Wind River Systems, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -94,9 +94,10 @@ class StxAlarmClient(BaseClient): class StxEventClient(BaseClient): - def __init__(self, driver=None): + def __init__(self, uow: unit_of_work.AbstractUnitOfWork, driver=None): super().__init__() self.driver = driver if driver else StxFaultClientImp() + self.uow = uow def _get(self, id) -> alarmModel.FaultGenericModel: return self.driver.getEventInfo(id) @@ -107,6 +108,12 @@ class StxEventClient(BaseClient): def _set_stx_client(self): self.driver.setFaultClient(self._pool_id) + def suppression_list(self, alarm_id) -> List[alarmModel.FaultGenericModel]: + return self.driver.getSuppressionList(alarm_id) + + def suppress(self, id) -> alarmModel.FaultGenericModel: + return self.driver.suppressEvent(id) + # internal driver which implement client call to Stx Fault Management instance class StxFaultClientImp(object): @@ -132,6 +139,7 @@ class StxFaultClientImp(object): return config_client def getSubcloudList(self): + self.dcclient = self.getDcmanagerClient() subs = self.dcclient.subcloud_manager.list_subclouds() known_subs = [sub for sub in subs if sub.sync_status != 'unknown'] return known_subs @@ -218,8 +226,39 @@ class StxFaultClientImp(object): return alarmModel.FaultGenericModel( alarmModel.EventTypeEnum.EVENT, self._eventconverter(event)) + def suppressEvent(self, id) -> alarmModel.FaultGenericModel: + patch = [dict(path='/' + 'suppression_status', value='suppressed', + op='replace')] + event = self.fmclient.event_suppression.update(id, patch) + logger.debug('suppressed event id ' + id + ':' + str(event.to_dict())) + return alarmModel.FaultGenericModel( + alarmModel.EventTypeEnum.EVENT, self._suppression_converter(event)) + + def getSuppressionList(self, alarm_id) -> alarmModel.FaultGenericModel: + suppression_list = [] + queryAsArray = [] + events = self.fmclient.event_suppression.list(q=queryAsArray) + for event in events: + if event.alarm_id == alarm_id: + # logger.debug('suppression event:' + str(event.to_dict())) + suppression_list.append( + alarmModel.FaultGenericModel( + alarmModel.EventTypeEnum.EVENT, + self._suppression_converter(event))) + return suppression_list + @ staticmethod def _alarmconverter(alarm): + selected_keys = [ + 'alarm_id', 'alarm_state', 'entity_type_id', 'entity_instance_id', + 'reason_text', 'alarm_type', 'probable_cause', + 'proposed_repair_action', 'service_affecting', 'suppression', + 'suppression_status', 'mgmt_affecting', 'degrade_affecting' + ] + content = alarm.to_dict() + filtered = dict( + filter(lambda item: item[0] in selected_keys, content.items())) + setattr(alarm, 'filtered', filtered) # setattr(alarm, 'alarm_def_id', uuid.uuid3( # uuid.NAMESPACE_URL, alarm.alarm_id)) setattr(alarm, 'state', alarm.alarm_state) @@ -232,6 +271,16 @@ class StxFaultClientImp(object): @ staticmethod def _eventconverter(event, clear=False): + selected_keys = [ + 'event_log_id', 'state', 'entity_type_id', + 'entity_instance_id', 'reason_text', 'event_log_type', + 'probable_cause', 'proposed_repair_action', + 'service_affecting', 'suppression', 'suppression_status' + ] + content = event.to_dict() + filtered = dict( + filter(lambda item: item[0] in selected_keys, content.items())) + setattr(event, 'filtered', filtered) setattr(event, 'alarm_id', event.event_log_id) setattr(event, 'alarm_type', event.event_log_type) if clear: @@ -243,6 +292,27 @@ class StxFaultClientImp(object): uuid.NAMESPACE_URL, event.probable_cause))) return event + @ staticmethod + def _suppression_converter(event, clear=False): + selected_keys = [ + 'alarm_id', 'description', 'suppression_status', + 'links' + ] + content = event.to_dict() + filtered = dict( + filter(lambda item: item[0] in selected_keys, content.items())) + setattr(event, 'filtered', filtered) + setattr(event, 'uuid', event.uuid) + setattr(event, 'alarm_id', event.alarm_id) + setattr(event, 'description', event.description) + setattr(event, 'suppression_status', event.suppression_status) + setattr(event, 'alarm_type', None) + setattr(event, 'alarm_def_id', None) + setattr(event, 'probable_cause_id', None) + setattr(event, 'state', None) + setattr(event, 'timestamp', None) + return event + @ staticmethod def _alarmeventhasher(event, state=''): # The event model and the alarm model have different parameter name