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