diff options
Diffstat (limited to 'components/pm-subscription-handler/pmsh_service/mod/api/services/measurement_group_service.py')
-rw-r--r-- | components/pm-subscription-handler/pmsh_service/mod/api/services/measurement_group_service.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/components/pm-subscription-handler/pmsh_service/mod/api/services/measurement_group_service.py b/components/pm-subscription-handler/pmsh_service/mod/api/services/measurement_group_service.py index b272e5b8..07d1b642 100644 --- a/components/pm-subscription-handler/pmsh_service/mod/api/services/measurement_group_service.py +++ b/components/pm-subscription-handler/pmsh_service/mod/api/services/measurement_group_service.py @@ -24,6 +24,7 @@ from mod.api.services import nf_service, subscription_service from mod.network_function import NetworkFunction from mod.pmsh_config import MRTopic, AppConfig from mod.subscription import AdministrativeState, SubNfState +from sqlalchemy import or_ def save_measurement_group(measurement_group, subscription_name): @@ -318,3 +319,35 @@ def update_admin_status(measurement_group, status): deactivate_nfs(sub_model, measurement_group, nf_meas_relations) elif status == AdministrativeState.UNLOCKED.value: activate_nfs(sub_model, measurement_group) + + +def filter_nf_to_meas_grp(nf_name, measurement_group_name, status): + """ Performs successful status update for a nf under filter update + request for a particular subscription and measurement group + + Args: + nf_name (string): The network function name + measurement_group_name (string): Measurement group name + status (string): status of the network function for measurement group + """ + try: + if status == SubNfState.DELETED.value: + delete_nf_to_measurement_group(nf_name, measurement_group_name, + SubNfState.DELETED.value) + elif status == SubNfState.CREATED.value: + update_measurement_group_nf_status(measurement_group_name, + SubNfState.CREATED.value, nf_name) + nf_measurement_group_rels = NfMeasureGroupRelationalModel.query.filter( + NfMeasureGroupRelationalModel.measurement_grp_name == measurement_group_name, + or_(NfMeasureGroupRelationalModel.nf_measure_grp_status.like('PENDING_%'), + NfMeasureGroupRelationalModel.nf_measure_grp_status.like('%_FAILED')) + ).all() + if not nf_measurement_group_rels: + MeasurementGroupModel.query.filter( + MeasurementGroupModel.measurement_group_name == measurement_group_name). \ + update({MeasurementGroupModel.administrative_state: AdministrativeState. + UNLOCKED.value}, synchronize_session='evaluate') + db.session.commit() + except Exception as e: + logger.error('Failed update filter response for measurement group name: ' + f'{measurement_group_name}, nf name: {nf_name} due to: {e}') |