X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=o2ims%2Fservice%2Fcommand%2Fnotify_handler.py;h=34470f3ebf6f2958aad68ff6542612c5bb28c76a;hb=00c91afdecfe15a2e1db1f7fc17fa75f2897b7d2;hp=06dc824fc145d58bbb3acb989c2e3825dcdc4402;hpb=0c60b5232b47e292f54728e78bd0161901cdd974;p=pti%2Fo2.git diff --git a/o2ims/service/command/notify_handler.py b/o2ims/service/command/notify_handler.py index 06dc824..34470f3 100644 --- a/o2ims/service/command/notify_handler.py +++ b/o2ims/service/command/notify_handler.py @@ -78,7 +78,7 @@ def _notify_resourcetype(uow, data): if not filters: callback_smo(sub, data, resource_type_dict) continue - filter_effect = 0 + filter_hit = False for filter in filters: try: args = gen_orm_filter(ocloud.ResourceType, filter) @@ -89,18 +89,19 @@ def _notify_resourcetype(uow, data): sub_data['subscriptionId'], sub_data['filter'])) continue + if len(args) == 0 and 'objectType' in filter: + filter_hit = True + break args.append(ocloud.ResourceType.resourceTypeId == data.id) - ret = uow.resource_types.list_with_count(*args) - if ret[0] > 0: - logger.debug( - 'ResourcePool {} skip for subscription {} because of' - ' the filter.' - .format(data.id, sub_data['subscriptionId'])) - filter_effect += 1 + obj_count, _ = uow.resource_types.list_with_count(*args) + if obj_count > 0: + filter_hit = True break - if filter_effect > 0: - continue - callback_smo(sub, data, resource_type_dict) + if filter_hit: + logger.info('Subscription {} filter hit, skip ResourceType {}.' + .format(sub_data['subscriptionId'], data.id)) + else: + callback_smo(sub, data, resource_type_dict) def _notify_resourcepool(uow, data): @@ -125,7 +126,7 @@ def _notify_resourcepool(uow, data): if not filters: callback_smo(sub, data, resource_pool_dict) continue - filter_effect = 0 + filter_hit = False for filter in filters: try: args = gen_orm_filter(ocloud.ResourcePool, filter) @@ -136,18 +137,19 @@ def _notify_resourcepool(uow, data): sub_data['subscriptionId'], sub_data['filter'])) continue + if len(args) == 0 and 'objectType' in filter: + filter_hit = True + break args.append(ocloud.ResourcePool.resourcePoolId == data.id) - ret = uow.resource_pools.list_with_count(*args) - if ret[0] > 0: - logger.debug( - 'ResourcePool {} skip for subscription {} because of' - ' the filter.' - .format(data.id, sub_data['subscriptionId'])) - filter_effect += 1 + obj_count, _ = uow.resource_pools.list_with_count(*args) + if obj_count > 0: + filter_hit = True break - if filter_effect > 0: - continue - callback_smo(sub, data, resource_pool_dict) + if filter_hit: + logger.info('Subscription {} filter hit, skip ResourcePool {}.' + .format(sub_data['subscriptionId'], data.id)) + else: + callback_smo(sub, data, resource_pool_dict) def _notify_dms(uow, data): @@ -174,7 +176,7 @@ def _notify_dms(uow, data): if not filters: callback_smo(sub, data, dms_dict) continue - filter_effect = 0 + filter_hit = False for filter in filters: try: args = gen_orm_filter(ocloud.DeploymentManager, filter) @@ -185,27 +187,21 @@ def _notify_dms(uow, data): sub_data['subscriptionId'], sub_data['filter'])) continue + if len(args) == 0 and 'objectType' in filter: + filter_hit = True + break args.append( ocloud.DeploymentManager.deploymentManagerId == data.id) - ret = uow.deployment_managers.list_with_count(*args) - if ret[0] > 0: - logger.debug( - 'DeploymentManager {} skip for subscription {} because' - ' of the filter.' - .format(data.id, sub_data['subscriptionId'])) - filter_effect += 1 + obj_count, _ = uow.deployment_managers.list_with_count(*args) + if obj_count > 0: + filter_hit = True break - if filter_effect > 0: - continue - callback_smo(sub, data, dms_dict) - - -class FilterNotEffect(Exception): - pass - - -class FilterEffect(Exception): - pass + if filter_hit: + logger.info('Subscription {} filter hit, skip ' + 'DeploymentManager {}.' + .format(sub_data['subscriptionId'], data.id)) + else: + callback_smo(sub, data, dms_dict) def _notify_resource(uow, data): @@ -232,7 +228,7 @@ def _notify_resource(uow, data): if not filters: callback_smo(sub, data, res_dict) continue - filter_effect = 0 + filter_hit = False for filter in filters: try: args = gen_orm_filter(ocloud.Resource, filter) @@ -243,18 +239,20 @@ def _notify_resource(uow, data): sub_data['subscriptionId'], sub_data['filter'])) continue + if len(args) == 0 and 'objectType' in filter: + filter_hit = True + break args.append(ocloud.Resource.resourceId == data.id) - ret = uow.resources.list_with_count(res_pool_id, *args) - if ret[0] > 0: - logger.debug( - 'Resource {} skip for subscription {} because of ' - 'the filter.' - .format(data.id, sub_data['subscriptionId'])) - filter_effect += 1 + obj_count, _ = uow.resources.list_with_count( + res_pool_id, *args) + if obj_count > 0: + filter_hit = True break - if filter_effect > 0: - continue - callback_smo(sub, data, res_dict) + if filter_hit: + logger.info('Subscription {} filter hit, skip Resource {}.' + .format(sub_data['subscriptionId'], data.id)) + else: + callback_smo(sub, data, res_dict) def handle_filter(filter: str, f_type: str): @@ -294,15 +292,15 @@ def callback_smo(sub: Subscription, msg: Message2SMO, obj_dict: dict = None): } if msg.notificationEventType in [NotificationEventEnum.DELETE, NotificationEventEnum.MODIFY]: - callback['priorObjectState'] = obj_dict + callback['priorObjectState'] = json.dumps(obj_dict) if msg.notificationEventType in [NotificationEventEnum.CREATE, NotificationEventEnum.MODIFY]: - callback['postObjectState'] = obj_dict + callback['postObjectState'] = json.dumps(obj_dict) if msg.notificationEventType == NotificationEventEnum.DELETE: callback.pop('objectRef') callback_data = json.dumps(callback) - logger.info('URL: {}, data: {}'.format( - sub_data['callback'], callback_data)) + logger.info('callback URL: {}'.format(sub_data['callback'])) + logger.debug('callback data: {}'.format(callback_data)) # Call SMO through the SMO callback url o = urlparse(sub_data['callback'])