{enb,epc,ms}_srs: refactor start/stop and KPI helpers
refactor some of the functionality to srslte_common
Change-Id: I2ff36df6f1a07ed8ddac39d296d62fe44a215283
diff --git a/src/osmo_gsm_tester/obj/srslte_common.py b/src/osmo_gsm_tester/obj/srslte_common.py
index 33f12d4..9619fb6 100644
--- a/src/osmo_gsm_tester/obj/srslte_common.py
+++ b/src/osmo_gsm_tester/obj/srslte_common.py
@@ -18,6 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from ..core import log
+from ..core.event_loop import MainLoop
class srslte_common(): # don't inherit from log.Origin here but instead use .name() from whoever inherits from us
@@ -25,21 +26,64 @@
self.log_file = None
self.process = None
self.metrics_file = None
+ self.stop_sleep_time = 6 # We require at most 5s to stop
+ self.kpis = None
+
+ def sleep_after_stop(self):
+ # Only sleep once
+ if self.stop_sleep_time > 0:
+ MainLoop.sleep(self.stop_sleep_time)
+ self.stop_sleep_time = 0
+
+ def stop(self):
+ self.testenv.stop_process(self.process)
+ self.sleep_after_stop()
def get_kpis(self):
+ ''' Return all KPI '''
+ if self.kpis is None:
+ self.extract_kpis()
+ return self.kpis
+
+ def get_log_kpis(self):
+ ''' Return KPIs extracted from log '''
+ if self.kpis is None:
+ self.extract_kpis()
+
+ # Use log KPIs if they exist for this node
+ if "log_" + self.name() in self.kpis:
+ log_kpi = self.kpis["log_" + self.name()]
+ else:
+ log_kpi = {}
+
+ # Make sure we have the errors and warnings counter in the dict
+ if 'total_errors' not in log_kpi:
+ log_kpi['total_errors'] = 0
+ if 'total_warnings' not in log_kpi:
+ log_kpi['total_warnings'] = 0
+ return log_kpi
+
+ def extract_kpis(self):
''' Use the srsLTE KPI analyzer module (part of srsLTE.git) if available to collect KPIs '''
- kpis = {}
+
+ # Stop application, copy back logs and process them
+ if self.running():
+ self.stop()
+ self.cleanup()
+
+ self.kpis = {}
try:
# Please make sure the srsLTE scripts folder is included in your PYTHONPATH env variable
from kpi_analyzer import kpi_analyzer
analyzer = kpi_analyzer(self.name())
if self.log_file is not None:
- kpis["log_" + self.name()] = analyzer.get_kpi_from_logfile(self.log_file)
+ self.kpis["log_" + self.name()] = analyzer.get_kpi_from_logfile(self.log_file)
if self.process.get_output_file('stdout') is not None:
- kpis["stdout_" + self.name()] = analyzer.get_kpi_from_stdout(self.process.get_output_file('stdout'))
+ self.kpis["stdout_" + self.name()] = analyzer.get_kpi_from_stdout(self.process.get_output_file('stdout'))
if self.metrics_file is not None:
- kpis["csv_" + self.name()] = analyzer.get_kpi_from_csv(self.metrics_file)
+ self.kpis["csv_" + self.name()] = analyzer.get_kpi_from_csv(self.metrics_file)
except ImportError:
self.log("Can't load KPI analyzer module.")
+ self.kpis = {}
- return kpis
+ return self.kpis