1 #==================================================================================
3 # Copyright (c) 2018-2019 AT&T Intellectual Property.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #==================================================================================
19 # Author : Ashwin Sridharan
24 # This initialization script reads in a json from the specified config map path
25 # to set up the initializations (route config map, variables etc) for the main
35 def signal_handler(signum, frame):
36 print("Received signal {0}\n".format(signum));
37 if(xapp_subprocess == None or xapp_pid == None):
38 print("No xapp running. Quiting without sending signal to xapp\n");
40 print("Sending signal {0} to xapp ...".format(signum));
41 xapp_subprocess.send_signal(signum);
44 def parseConfigJson(config):
46 for k1 in config.keys():
47 if k1 in ParseSection:
48 result = ParseSection[k1](config);
53 # for k2 in config[k1].keys():
55 # if k2 in ParseSection:
56 # result = ParseSection[k2](config[k1]);
62 def getMessagingInfo(config):
63 if 'messaging' in config.keys() and 'ports' in config['messaging'].keys():
64 port_list = config['messaging']['ports']
65 for portdesc in port_list :
66 if 'port' in portdesc.keys() and 'name' in portdesc.keys() and portdesc['name'] == 'rmr-data':
67 lport = portdesc['port']
68 # Set the environment variable
69 os.environ["HW_PORT"] = str(lport)
72 print("Error! No valid listening port");
75 def getXappName(config):
77 if myKey not in config.keys():
78 print(("Error ! No information found for {0} in config\n".format(myKey)));
81 xapp_name = config[myKey];
82 print("Xapp Name is: " + xapp_name);
83 os.environ["XAPP_NAME"] = xapp_name;
85 default_routing_file = "/tmp/routeinfo/routes.txt";
88 ParseSection["xapp_name"] = getXappName;
89 ParseSection["messaging"] = getMessagingInfo;
92 #================================================================
93 if __name__ == "__main__":
96 # cmd = ["../src/hw_xapp_main"];
97 cmd = ["/usr/local/bin/hw_xapp_main"];
100 config_file = sys.argv[1];
102 print("Error! No configuration file specified\n");
105 if len(sys.argv) > 2:
106 cmd[0] = sys.argv[2];
108 with open(config_file, 'r') as f:
110 config = json.load(f);
111 except Exception as e:
112 print(("Error loading json file from {0}. Reason = {1}\n".format(config_file, e)));
115 result = parseConfigJson(config);
118 print("Error parsing json. Not executing xAPP");
123 # Register signal handlers
124 signal.signal(signal.SIGINT, signal_handler);
125 signal.signal(signal.SIGTERM, signal_handler);
128 #print("Executing xAPP ....");
129 xapp_subprocess = subprocess.Popen(cmd, shell = False, stdin=None, stdout=None, stderr = None);
130 xapp_pid = xapp_subprocess.pid;
132 # Periodically poll the process every 5 seconds to check if still alive
134 xapp_status = xapp_subprocess.poll();
135 if xapp_status == None:
138 print("XaPP terminated via signal {0}\n".format(-1 * xapp_status));