From 8ce6e4f6e09e0a99d72db0b8cb0a22e6808e2c89 Mon Sep 17 00:00:00 2001 From: hardy <remi.hardy@openairinterface.org> Date: Sun, 3 Oct 2021 20:38:43 +0200 Subject: [PATCH] poc : stats monitoring --- ci-scripts/main.py | 1 + ci-scripts/ran.py | 22 ++++++++++++++- .../{radio_monitor.py => stats_monitor.py} | 27 ++++++++++--------- ci-scripts/xml_files/fr1_lte_2x2_quectel.xml | 11 +------- 4 files changed, 37 insertions(+), 24 deletions(-) rename ci-scripts/{radio_monitor.py => stats_monitor.py} (71%) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index d66c0c63057..9923d515a47 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -154,6 +154,7 @@ def GetParametersFromXML(action): elif action == 'Initialize_eNB': RAN.eNB_Trace=test.findtext('eNB_Trace') + RAN.eNB_Stats=test.findtext('eNB_Stats') RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args') eNB_instance=test.findtext('eNB_instance') USRPIPAddress=test.findtext('USRP_IPAddress') diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py index 5e3d8e388f8..a1492b062a3 100644 --- a/ci-scripts/ran.py +++ b/ci-scripts/ran.py @@ -94,6 +94,7 @@ class RANManagement(): self.runtime_stats= '' self.datalog_rt_stats={} self.eNB_Trace = '' #if 'yes', Tshark will be launched at initialization + self.eNB_Stats = '' #if 'yes', Statistics Monitor will be launched at initialization self.USRPIPAddress = '' @@ -539,6 +540,23 @@ class RANManagement(): self.eNBstatuses[int(self.eNB_instance)] = int(self.eNB_serverId[self.eNB_instance]) mySSH.close() + + + #if enabled in the xml, + #copyout the monitor script and launch it + if self.eNB_Stats=='yes': + + mySSH.open(lIpAddr, lUserName, lPassWord) + + monitor_file='stats_monitor.py' + mySSH.command('echo ' + lPassWord + ' | sudo -S cp ' + self.eNBSourceCodePath + '/ci-scripts/'+ monitor_file + ' ' + self.eNBSourceCodePath + '/cmake_targets/ran_build/build/.','\$', 5) + + #launch, it will stop when the softmodem stops + mySSH.command('echo $USER; nohup python3 ' + self.eNBSourceCodePath + '/cmake_targets/ran_build/build/' + monitor_file + ' 2>&1 &', '\$', 5) + + mySSH.close() + + HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'OK', CONST.ALL_PROCESSES_OK) logging.debug('\u001B[1m Initialize eNB/gNB/ocp-eNB Completed\u001B[0m') @@ -690,8 +708,10 @@ class RANManagement(): mySSH.command('cd cmake_targets', '\$', 5) mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/enb_*.pcap .','\$',20) mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/gnb_*.pcap .','\$',20) + mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/*monitor.pickle .','\$',20) + mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/*monitor.png .','\$',20) mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5) - mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log', '\$', 60) + mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor.png', '\$', 60) mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log', '\$', 5) mySSH.close() diff --git a/ci-scripts/radio_monitor.py b/ci-scripts/stats_monitor.py similarity index 71% rename from ci-scripts/radio_monitor.py rename to ci-scripts/stats_monitor.py index 24aebaec6bf..112d8ff7998 100755 --- a/ci-scripts/radio_monitor.py +++ b/ci-scripts/stats_monitor.py @@ -6,19 +6,20 @@ import sys import matplotlib.pyplot as plt import pickle import numpy as np +import os def collect(d): - cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log' - process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE) - output = process.stdout.readlines() - for l in output: - tmp=l.decode("utf-8") - result=re.match(rf'^.*\bPHR\b ([0-9]+).+\bbler\b ([0-9]+\.[0-9]+).+\bmcsoff\b ([0-9]+).+\bmcs\b ([0-9]+)',tmp) - if result is not None: - d['PHR'].append(int(result.group(1))) - d['bler'].append(float(result.group(2))) - d['mcsoff'].append(int(result.group(3))) - d['mcs'].append(int(result.group(4))) + cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log' + process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE) + output = process.stdout.readlines() + for l in output: + tmp=l.decode("utf-8") + result=re.match(rf'^.*\bPHR\b ([0-9]+).+\bbler\b ([0-9]+\.[0-9]+).+\bmcsoff\b ([0-9]+).+\bmcs\b ([0-9]+)',tmp) + if result is not None: + d['PHR'].append(int(result.group(1))) + d['bler'].append(float(result.group(2))) + d['mcsoff'].append(int(result.group(3))) + d['mcs'].append(int(result.group(4))) def graph(d): @@ -60,7 +61,7 @@ def graph(d): plt.tight_layout() # Combine all the operations and display - plt.savefig('/tmp/radio_monitor_dump.png') + plt.savefig('/tmp/stats_monitor.png') plt.show() if __name__ == "__main__": @@ -82,7 +83,7 @@ if __name__ == "__main__": output = process.stdout.readlines() time.sleep(1) print('process stopped') - with open('/tmp/radio_monitor_dump.pickle', 'wb') as handle: + with open('/tmp/stats_monitor.pickle', 'wb') as handle: pickle.dump(d, handle, protocol=pickle.HIGHEST_PROTOCOL) graph(d) diff --git a/ci-scripts/xml_files/fr1_lte_2x2_quectel.xml b/ci-scripts/xml_files/fr1_lte_2x2_quectel.xml index a62449f1a3b..86d9e5d5f0d 100644 --- a/ci-scripts/xml_files/fr1_lte_2x2_quectel.xml +++ b/ci-scripts/xml_files/fr1_lte_2x2_quectel.xml @@ -64,20 +64,11 @@ <eNB_serverId>0</eNB_serverId> <air_interface>lte</air_interface> <eNB_Trace>yes</eNB_Trace> + <eNB_Stats>yes</eNB_Stats> <USRP_IPAddress>192.168.18.241</USRP_IPAddress> </testCase> - <testCase id="040000"> - <class>Initialize_eNB</class> - <desc>Initialize gNB</desc> - <Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf -q</Initialize_eNB_args> - <eNB_instance>1</eNB_instance> - <eNB_serverId>1</eNB_serverId> - <air_interface>nr</air_interface> - <USRP_IPAddress>192.168.18.240</USRP_IPAddress> - </testCase> - <testCase id="000001"> <class>IdleSleep</class> <desc>Sleep</desc> -- GitLab