X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=Bouncer%2Finit%2Finit_script.py;fp=Bouncer%2Finit%2Finit_script.py;h=d64522700d58358496c1935c6b5348562e9ca94d;hb=ff20129c8f517cca6e0b4de6544ff64aebe7c171;hp=0000000000000000000000000000000000000000;hpb=35882dccfbc1b35af0e5704e14e0ecb9eba0f52a;p=ric-app%2Fbouncer.git diff --git a/Bouncer/init/init_script.py b/Bouncer/init/init_script.py new file mode 100644 index 0000000..d645227 --- /dev/null +++ b/Bouncer/init/init_script.py @@ -0,0 +1,132 @@ +# ================================================================================== +# Copyright (c) 2020 HCL Technologies Limited. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ================================================================================== + +# This initialization script reads in a json from the specified config map path +# to set up the initializations (route config map, variables etc) for the main +# xapp process + +import json; +import sys; +import os; +import signal; +import time; +import ast; + +def signal_handler(signum, frame): + print("Received signal {0}\n".format(signum)); + if(xapp_subprocess == None or xapp_pid == None): + print("No xapp running. Quiting without sending signal to xapp\n"); + else: + print("Sending signal {0} to xapp ...".format(signum)); + xapp_subprocess.send_signal(signum); + + +def parseConfigJson(config): + + for k1 in config.keys(): + if k1 in ParseSection: + result = ParseSection[k1](config); + if result == False: + return False; + + +# for k2 in config[k1].keys(): + #print(k2); +# if k2 in ParseSection: +# result = ParseSection[k2](config[k1]); +# if result == False: +# return False; + + + +def getMessagingInfo(config): + if 'messaging' in config.keys() and 'ports' in config['messaging'].keys(): + port_list = config['messaging']['ports'] + for portdesc in port_list : + if 'port' in portdesc.keys() and 'name' in portdesc.keys() and portdesc['name'] == 'rmr-data': + lport = portdesc['port'] + # Set the environment variable + os.environ["BOUNCER_PORT"] = str(lport) + return True; + if lport == 0: + print("Error! No valid listening port"); + return False; + +def getXappName(config): + myKey = "xapp_name"; + if myKey not in config.keys(): + print(("Error ! No information found for {0} in config\n".format(myKey))); + return False; + + xapp_name = config[myKey]; + print("Xapp Name is: " + xapp_name); + os.environ["XAPP_NAME"] = xapp_name; + +default_routing_file = "/tmp/routeinfo/routes.txt"; +lport = 0; +ParseSection = {}; +ParseSection["xapp_name"] = getXappName; +ParseSection["messaging"] = getMessagingInfo; + + +#================================================================ +if __name__ == "__main__": + + import subprocess; + cmd = ["/usr/local/bin/b_xapp_main"]; + + if len(sys.argv) > 1: + config_file = sys.argv[1]; + else: + print("Error! No configuration file specified\n"); + sys.exit(1); + + if len(sys.argv) > 2: + cmd[0] = sys.argv[2]; + + with open(config_file, 'r') as f: + try: + config = json.load(f); + except Exception as e: + print(("Error loading json file from {0}. Reason = {1}\n".format(config_file, e))); + sys.exit(1); + + result = parseConfigJson(config); + time.sleep(10); + if result == False: + print("Error parsing json. Not executing xAPP"); + sys.exit(1); + + else: + + # Register signal handlers + signal.signal(signal.SIGINT, signal_handler); + signal.signal(signal.SIGTERM, signal_handler); + + # Start the xAPP + #print("Executing xAPP ...."); + xapp_subprocess = subprocess.Popen(cmd, shell = False, stdin=None, stdout=None, stderr = None); + xapp_pid = xapp_subprocess.pid; + + # Periodically poll the process every 5 seconds to check if still alive + while(1): + xapp_status = xapp_subprocess.poll(); + if xapp_status == None: + time.sleep(5); + else: + print("XaPP terminated via signal {0}\n".format(-1 * xapp_status)); + break; +