Commit 7a85ef8f authored by Jorge Moratinos's avatar Jorge Moratinos
Browse files

Merge branch 'OCF88-fix-enhanced-event-report' into 'staging'

Fix enhanced events

See merge request !78
parents 8579a96c 942fac6b
Loading
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ from .responses import internal_server_error, not_found_error, make_response, ba
from ..db.db import MongoDatabse
from ..util import serialize_clean_camel_case, clean_empty, dict_to_camel_case
from .auth_manager import AuthManager
import os


class EventSubscriptionsOperations(Resource):
@@ -53,6 +54,13 @@ class EventSubscriptionsOperations(Resource):
                current_app.logger.error("Bad url format")
                return bad_request_error(detail="Bad Param", cause = "Detected Bad formar of param", invalid_params=[{"param": "notificationDestination", "reason": "Not valid URL format"}])

            if event_subscription.supported_features is None:
                return bad_request_error(
                    detail="supportedFeatures not present in request",
                    cause="supportedFeatures not present",
                    invalid_params=[{"param": "supportedFeatures", "reason": "not defined"}]
                )

            ## Verify that this subscriberID exist in publishers or invokers

            result = self.__check_subscriber_id(subscriber_id)
@@ -75,8 +83,7 @@ class EventSubscriptionsOperations(Resource):
            self.auth_manager.add_auth_event(subscription_id, subscriber_id)

            res = make_response(object=serialize_clean_camel_case(event_subscription), status=201)
            res.headers['Location'] = "http://localhost:8080/capif-events/v1/" + \
                str(subscriber_id) + "/subscriptions/" + str(subscription_id)
            res.headers['Location'] = f"http://{os.getenv("CAPIF_HOSTNAME")}/capif-events/v1/{str(subscriber_id)}/subscriptions/{str(subscription_id)}"

            return res

@@ -125,6 +132,13 @@ class EventSubscriptionsOperations(Resource):

            current_app.logger.debug("Updating event subscription")
            
            if event_subscription.supported_features is None:
                return bad_request_error(
                    detail="supportedFeatures not present in request",
                    cause="supportedFeatures not present",
                    invalid_params=[{"param": "supportedFeatures", "reason": "not defined"}]
                )

            result = self.__check_subscriber_id(subscriber_id)

            if  isinstance(result, Response):
+20 −11
Original line number Diff line number Diff line
@@ -33,15 +33,24 @@ class Notifications():
                current_app.logger.debug(url)
                data = EventNotification(sub["subscription_id"], events=redis_event.get('event'))
                if redis_event.get('key', None) != None and redis_event.get('information', None) != None:
                    if EventSubscription.return_supp_feat_dict(sub["supported_features"])["EnhancedEventReport"]:
                        event_detail={}
                        for pos, key in enumerate(redis_event.get('key', None)):

                        if sub["supported_features"] is None:
                            if not (key == "serviceAPIDescriptions" and redis_event.get('event', None) in ["SERVICE_API_AVAILABLE", "SERVICE_API_UNAVAILABLE"]):
                                event_detail[key]=redis_event.get('information', None)[pos]
                        else:
                            if not (redis_event.get('event', None) in ["SERVICE_API_AVAILABLE", "SERVICE_API_UNAVAILABLE"] and key == "serviceAPIDescriptions" and not EventSubscription.return_supp_feat_dict(sub["supported_features"])["ApiStatusMonitoring"]):
                                event_detail[key]=redis_event.get('information', None)[pos]
                            current_app.logger.debug(f"information: {redis_event.get('information', None)[pos]}")
                            if redis_event.get('event', None) in ["SERVICE_API_AVAILABLE", "SERVICE_API_UNAVAILABLE"] and key == "apiIds":
                                event_detail["apiIds"]=[redis_event.get('information', None)[pos]]
                            elif EventSubscription.return_supp_feat_dict(sub["supported_features"])["ApiStatusMonitoring"] and  key == "serviceAPIDescriptions":
                                event_detail["serviceAPIDescriptions"]=redis_event.get('information', None)[pos]
                            elif redis_event.get('event', None) in ["SERVICE_API_UPDATE"]:
                                event_detail["serviceAPIDescriptions"]=redis_event.get('information', None)[pos]
                            elif redis_event.get('event', None) in ["API_INVOKER_ONBOARDED", "API_INVOKER_OFFBOARDED", "API_INVOKER_UPDATED"]:
                                event_detail["apiInvokerIds"]=redis_event.get('information', None)[pos]
                            elif redis_event.get('event', None) in ["ACCESS_CONTROL_POLICY_UPDATE"]:
                                event_detail["accCtrlPolList"]=redis_event.get('information', None)[pos]
                            elif redis_event.get('event', None) in ["SERVICE_API_INVOCATION_SUCCESS", "SERVICE_API_INVOCATION_FAILURE"]:
                                event_detail["invocationLogs"]=redis_event.get('information', None)[pos]
                            elif redis_event.get('event', None) in ["API_TOPOLOGY_HIDING_CREATED", "API_TOPOLOGY_HIDING_REVOKED"]:
                                event_detail["apiTopoHide"]=redis_event.get('information', None)[pos]

                        current_app.logger.debug(event_detail)
                        data.event_detail=event_detail
+14 −26
Original line number Diff line number Diff line
@@ -132,7 +132,6 @@ class PublishServiceOperations(Resource):
            if res.status_code == 201:
                current_app.logger.info("Service published")
                if serviceapidescription.api_status is None or len(serviceapidescription.api_status.aef_ids) > 0:
                    if serviceapidescription.supported_features is not None:
                    if serviceapidescription.return_supp_feat_dict(serviceapidescription.supported_features)["ApiStatusMonitoring"]:
                        current_app.logger.info(f"Service available")
                        RedisEvent("SERVICE_API_AVAILABLE",
@@ -144,12 +143,6 @@ class PublishServiceOperations(Resource):
                                    ["apiIds"],
                                    [str(api_id)]).send_event()
                else:
                        current_app.logger.info("Service available")
                        RedisEvent("SERVICE_API_AVAILABLE",
                                   ["apiIds"],
                                   [str(api_id)]).send_event()
                else:
                    if serviceapidescription.supported_features is not None:
                    if serviceapidescription.return_supp_feat_dict(serviceapidescription.supported_features)["ApiStatusMonitoring"]:
                        current_app.logger.info(f"Service unavailable")
                        RedisEvent("SERVICE_API_UNAVAILABLE",
@@ -160,11 +153,6 @@ class PublishServiceOperations(Resource):
                        RedisEvent("SERVICE_API_UNAVAILABLE",
                                    ["apiIds"],
                                    [str(api_id)]).send_event()
                    else:
                        current_app.logger.info("Service available")
                        RedisEvent("SERVICE_API_UNAVAILABLE",
                                   ["apiIds"],
                                   [str(api_id)]).send_event()

            return res