Commit 96bba8c2 authored by George Papathanail's avatar George Papathanail
Browse files

Merge branch 'fix/adapter-response-qod' into 'main'

Fix adapter responses and QoD session handling

See merge request !7
parents efa74463 52479752
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5,4 +5,4 @@ requests==2.32.4
psycopg2-binary
urllib3 
pydantic-extra-types==2.10.3
sunrise6g-opensdk==1.0.2.post3
 No newline at end of file
sunrise6g-opensdk==1.0.29
+47 −10
Original line number Diff line number Diff line
import connexion
import logging
from os import environ
from requests import Response as RequestsResponse
from sunrise6g_opensdk import Sdk as sdkclient
import sys

@@ -20,6 +21,27 @@ if environ['EDGE_CLOUD_ADAPTER_NAME'] is not None:
#       sys.exit()


def _normalize_adapter_response(response):
    if isinstance(response, RequestsResponse):
        try:
            data = response.json()
        except ValueError:
            data = response.text
        return data, response.status_code
    return response


def _ensure_edge_cloud_region(data):
    if isinstance(data, list):
        for item in data:
            if isinstance(item, dict) and not item.get("edgeCloudRegion"):
                item["edgeCloudRegion"] = "unknown"
    elif isinstance(data, dict):
        if not data.get("edgeCloudRegion"):
            data["edgeCloudRegion"] = "unknown"
    return data


def deregister_service_function(service_function_id: str):  # noqa: E501
    """Deregister service.

@@ -38,7 +60,7 @@ def get_service_function(service_function_id: str): # noqa: E501

    try:
        service_function = edgecloud_adapter.get_onboarded_app(service_function_id)
        return service_function
        return _normalize_adapter_response(service_function)
    except Exception as ce_:
        raise Exception("An exception occurred :", ce_)

@@ -48,7 +70,7 @@ def get_service_functions(): # noqa: E501
    """
    try:
        service_functions = edgecloud_adapter.get_all_onboarded_apps()
        return service_functions
        return _normalize_adapter_response(service_functions)
    except Exception as ce_:
        raise Exception("An exception occurred :", ce_)

@@ -61,7 +83,8 @@ def register_service_function(body=None): # noqa: E501

            insert_doc = connexion.request.get_json()
            try:
                 return edgecloud_adapter.onboard_app(insert_doc)
                 response = edgecloud_adapter.onboard_app(insert_doc)
                 return _normalize_adapter_response(response)
            except Exception as ce_:
                return ce_

@@ -72,6 +95,7 @@ def delete_deployed_service_function(app_id: str): # noqa: E501
    response = None
    try:
                response = edgecloud_adapter.undeploy_app(app_id)
                return _normalize_adapter_response(response)
                # return response

    except Exception as ce_:
@@ -98,10 +122,15 @@ def deploy_service_function(): # noqa: E501
            try:
                # body = DeployApp.from_dict(connexion.request.get_json())
                body = connexion.request.get_json()
                app_id = body.get("appId") if isinstance(body, dict) else None
                app_zones = body.get("appZones") if isinstance(body, dict) else None
                if app_id is not None and app_zones is not None:
                    response = edgecloud_adapter.deploy_app(app_id, app_zones)
                else:
                    response = edgecloud_adapter.deploy_app(body)
                # body = DeployServiceFunction.from_dict(connexion.request.get_json())
                # response = piedge_encoder.deploy_service_function(body)
                return response
                return _normalize_adapter_response(response)
            except Exception as ce_:
                logger.error(ce_)
                return ce_
@@ -123,7 +152,7 @@ def get_deployed_service_functions(): # noqa: E501
    # if role is not None and role == "admin":
    try:
            response = edgecloud_adapter.get_all_deployed_apps()
            return response
            return _normalize_adapter_response(response)
    except Exception as ce_:
                logger.error(ce_)
                return ce_
@@ -143,7 +172,7 @@ def get_deployed_service_function(app_id: str): # noqa: E501
    # if role is not None and role == "admin":
    try:
            response = edgecloud_adapter.get_deployed_app(app_id=app_id)
            return response
            return _normalize_adapter_response(response)
    except Exception as ce_:
                logger.error(ce_)
                return ce_
@@ -157,7 +186,11 @@ def get_nodes(): # noqa: E501
    """
    # try:
    response = edgecloud_adapter.get_edge_cloud_zones()
    return response
    normalized = _normalize_adapter_response(response)
    if isinstance(normalized, tuple):
        data, status = normalized
        return _ensure_edge_cloud_region(data), status
    return _ensure_edge_cloud_region(normalized)
    # except Exception as ce_:
    #         logger.info(ce_)

@@ -170,6 +203,10 @@ def node_details(node_id: str): # noqa: E501
    """
    try:
         response = edgecloud_adapter.get_edge_cloud_zones_details(zone_id=node_id)
         return response
         normalized = _normalize_adapter_response(response)
         if isinstance(normalized, tuple):
             data, status = normalized
             return _ensure_edge_cloud_region(data), status
         return _ensure_edge_cloud_region(normalized)
    except Exception as ce_:
            logger.info(ce_)
+32 −15
Original line number Diff line number Diff line
from os import environ
import logging
from os import environ
from typing import Any

import connexion
import sys
from requests import Response as RequestsResponse
from sunrise6g_opensdk.common.sdk import Sdk as sdkclient

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
network_adapter = None
network_adapter: Any = None

if environ.get('NETWORK_ADAPTER_NAME') is not None:
    network_adapter_name = environ.get('NETWORK_ADAPTER_NAME')
    adapter_base_url = environ.get('NETWORK_ADAPTER_BASE_URL')
    scs_as_id = environ.get('SCS_AS_ID')
    network_adapter_specs = {'client_name': network_adapter_name, 'base_url': adapter_base_url, 'scs_as_id': scs_as_id}
    network_adapter_specs.update(environ)
    adapter_base_url = environ.get('NETWORK_ADAPTER_BASE_URL') or ""
    scs_as_id = environ.get('SCS_AS_ID') or ""
    network_adapter_specs = {
        'client_name': network_adapter_name,
        'base_url': adapter_base_url,
        'scs_as_id': scs_as_id,
    }
    print('Creating network adapter with env: ', network_adapter_specs)
    adapters = sdkclient.create_adapters_from(adapter_specs={'network': network_adapter_specs})
    network_adapter = adapters.get("network")
@@ -21,13 +27,23 @@ if environ.get('NETWORK_ADAPTER_NAME') is not None:
#       logging.error('Network adapter has not been specified! Aborting...')
#       sys.exit()


def _normalize_adapter_response(response):
    if isinstance(response, RequestsResponse):
        try:
            data = response.json()
        except ValueError:
            data = response.text
        return data, response.status_code
    return response

def create_qod_session():
     
    if connexion.request.is_json:
        try:
            if network_adapter is not None:
                response = network_adapter.create_qod_session(connexion.request.get_json())
                return response
                return _normalize_adapter_response(response)
            else:
                return {
                        "applicationServer": {
@@ -41,7 +57,7 @@ def create_qod_session():
                        }
        except Exception as ce_:
            logger.error(ce_)
            return ce_
            return {"error": str(ce_)}, 500
    else:
        return 'ERROR: Could not read JSON payload.', 400

@@ -49,25 +65,26 @@ def get_qod_session(session_id: str):
    
    try:
        if network_adapter is not None:
            response = network_adapter.get_qod_session(id)
            return {'status': 200, 'session': response}
            response = network_adapter.get_qod_session(session_id)
            normalized = _normalize_adapter_response(response)
            return normalized
        else:
            return "Requested QoD session with ID: "+session_id
    except Exception as ce_:
        logger.error(ce_)
        return ce_
        return {"error": str(ce_)}, 500

def delete_qod_session(session_id: str):
   
    try:
        if network_adapter is not None:
                response = network_adapter.delete_qod_session(id)
                return response
                response = network_adapter.delete_qod_session(session_id)
                return _normalize_adapter_response(response)
        else:
            return "Deleting QoD session with ID: "+ session_id
    except Exception as ce_:
        logger.error(ce_)
        return ce_
        return {"error": str(ce_)}, 500

def create_traffic_influence_resource(body):
     try: