diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index d66c0c6305..9923d515a4 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 5e3d8e388f..a1492b062a 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 24aebaec6b..112d8ff799 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 a62449f1a3..86d9e5d5f0 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 @@
0
lte
yes
+ yes
192.168.18.241
-
- Initialize_eNB
- Initialize gNB
- -O ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf -q
- 1
- 1
- nr
- 192.168.18.240
-
-
IdleSleep
Sleep