X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=near-rt-ric-simulator%2Fsrc%2FOSC_2.1.0%2Fcontrollers%2Fa1_mediator_controller.py;fp=near-rt-ric-simulator%2Fsrc%2FOSC_2.1.0%2Fa1.py;h=aec84c512e3f5076a93cd461212715d2c971f2df;hb=refs%2Fchanges%2F47%2F11547%2F2;hp=b343e30e5c776bac2a7ddee3dba7434643cf55b0;hpb=8f8c91b8e22e1941b61b916f149c9783841a4e7a;p=sim%2Fa1-interface.git diff --git a/near-rt-ric-simulator/src/OSC_2.1.0/a1.py b/near-rt-ric-simulator/src/OSC_2.1.0/controllers/a1_mediator_controller.py similarity index 78% rename from near-rt-ric-simulator/src/OSC_2.1.0/a1.py rename to near-rt-ric-simulator/src/OSC_2.1.0/controllers/a1_mediator_controller.py index b343e30..aec84c5 100644 --- a/near-rt-ric-simulator/src/OSC_2.1.0/a1.py +++ b/near-rt-ric-simulator/src/OSC_2.1.0/controllers/a1_mediator_controller.py @@ -1,5 +1,5 @@ # ============LICENSE_START=============================================== -# Copyright (C) 2021 Nordix Foundation. All rights reserved. +# Copyright (C) 2021-2023 Nordix Foundation. All rights reserved. # ======================================================================== # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,21 +16,20 @@ # import json -import datetime +# import datetime import time from datetime import datetime -from connexion import NoContent -from flask import Flask, request, Response +from flask import request, Response from jsonschema import validate -from var_declaration import policy_instances, policy_types, policy_status, policy_fingerprint, forced_settings, hosts_set +from var_declaration import policy_instances, policy_types, policy_status, policy_fingerprint, callbacks, forced_settings, hosts_set, jobs, data_delivery +from models.enforceStatus import EnforceStatus from utils import calcFingerprint from maincommon import extract_host_name, is_duplicate_check from payload_logging import is_payload_logging -#Constsants -APPL_JSON='application/json' - +# Constants +APPL_JSON = 'application/json' #Helper funtion to log http reponse def log_resp_text(msg): @@ -40,7 +39,7 @@ def log_resp_text(msg): print(str(msg)) # API Function: Health check -def get_healthcheck(): +def a1_controller_get_healthcheck(): extract_host_name(hosts_set, request) @@ -50,8 +49,7 @@ def get_healthcheck(): return (None, 200) # API Function: Get all policy type ids -def get_all_policy_types(): - +def a1_controller_get_all_policy_types(): extract_host_name(hosts_set, request) if ((r := check_modified_response()) is not None): @@ -62,8 +60,7 @@ def get_all_policy_types(): return (res, 200) # API Function: Get a policy type -def get_policy_type(policy_type_id): - +def a1_controller_get_policy_type(policy_type_id): extract_host_name(hosts_set, request) if ((r := check_modified_response()) is not None): @@ -78,7 +75,7 @@ def get_policy_type(policy_type_id): return Response(json.dumps(policy_types[policy_type_id]), 200, mimetype=APPL_JSON) # API Function: Delete a policy type -def delete_policy_type(policy_type_id): +def a1_controller_delete_policy_type(policy_type_id): extract_host_name(hosts_set, request) @@ -102,7 +99,7 @@ def delete_policy_type(policy_type_id): # API Function: Create a policy type -def create_policy_type(policy_type_id): +def a1_controller_create_policy_type(policy_type_id): extract_host_name(hosts_set, request) @@ -141,7 +138,7 @@ def create_policy_type(policy_type_id): # API Function: Get all policy ids for a type -def get_all_policy_identities(policy_type_id): +def a1_controller_get_all_instances_for_type(policy_type_id): extract_host_name(hosts_set, request) @@ -156,7 +153,7 @@ def get_all_policy_identities(policy_type_id): return (list(policy_instances[policy_type_id].keys()), 200) # API Function: Get a policy instance -def get_policy_instance(policy_type_id, policy_instance_id): +def a1_controller_get_policy_instance(policy_type_id, policy_instance_id): extract_host_name(hosts_set, request) @@ -176,7 +173,7 @@ def get_policy_instance(policy_type_id, policy_instance_id): return Response(json.dumps(policy_instances[policy_type_id][policy_instance_id]), 200, mimetype=APPL_JSON) # API function: Delete a policy -def delete_policy_instance(policy_type_id, policy_instance_id): +def a1_controller_delete_policy_instance(policy_type_id, policy_instance_id): extract_host_name(hosts_set, request) @@ -201,11 +198,13 @@ def delete_policy_instance(policy_type_id, policy_instance_id): del policy_fingerprint[fp_previous] del policy_instances[policy_type_id][policy_instance_id] del policy_status[policy_instance_id] + callbacks.pop(policy_instance_id) return (None, 202) + # API function: Create/update a policy -def create_or_replace_policy_instance(policy_type_id, policy_instance_id): +def a1_controller_create_or_replace_policy_instance(policy_type_id, policy_instance_id): extract_host_name(hosts_set, request) @@ -243,33 +242,35 @@ def create_or_replace_policy_instance(policy_type_id, policy_instance_id): log_resp_text("Policy id already exist for other type") return (None, 400) - if (is_duplicate_check()): - fp=calcFingerprint(data, policy_type_id) + if is_duplicate_check(): + fp = calcFingerprint(data, policy_type_id) else: - fp=policy_instance_id + fp = policy_instance_id - if ((fp in policy_fingerprint.keys()) and is_duplicate_check()): - p_id=policy_fingerprint[fp] + if (fp in policy_fingerprint.keys()) and is_duplicate_check(): + p_id = policy_fingerprint[fp] if (p_id != policy_instance_id): log_resp_text("Policy json duplicate of other instance") return (None, 400) - if (fp_previous is not None): + if fp_previous is not None: del policy_fingerprint[fp_previous] policy_fingerprint[fp]=policy_instance_id + noti = request.args.get('notificationDestination') + callbacks[policy_instance_id] = noti + policy_instances[policy_type_id][policy_instance_id]=data - ps={} - ps["instance_status"] = "NOT IN EFFECT" - ps["has_been_deleted"] = "false" - ps["created_at"] = str(datetime.now().strftime("%m/%d/%Y, %H:%M:%S")) - policy_status[policy_instance_id]=ps + enforceStatus = EnforceStatus("NOT_ENFORCED", "OTHER_REASON") + policy_status[policy_instance_id] = enforceStatus.to_dict() + + # return Response(json.dumps(data), 200, mimetype=APPL_JSON) return (None, 202) # API function: Get policy status -def get_policy_instance_status(policy_type_id, policy_instance_id): +def a1_controller_get_policy_instance_status(policy_type_id, policy_instance_id): extract_host_name(hosts_set, request) @@ -287,6 +288,27 @@ def get_policy_instance_status(policy_type_id, policy_instance_id): return Response(json.dumps(policy_status[policy_instance_id]), 200, mimetype=APPL_JSON) +# API function: Receive a data delivery package +def a1_controller_data_delivery(): + + extract_host_name(hosts_set, request) + if ((r := check_modified_response()) is not None): + return r + + try: + data = request.data + data = json.loads(data) + job = data['job'] + jobs.index(job) + except ValueError: + log_resp_text("no job id defined for this data delivery") + return (None, 404) + except Exception: + log_resp_text("The data is corrupt or missing.") + return (None, 400) + data_delivery.append(data) + return (None, 200) # Should A1 and the A1 Simulator return 201 for creating a new resource? + # Helper: Create a response object if forced http response code is set def get_forced_response():