{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