<p>srs_andre <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18986">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">{ms,enb}_srs: add method to read kpi from a test run<br><br>this method uses the kpi_analyzer module for analyzing<br>stdout, CSV metrics and the logfile (if present).<br><br>if the module can't be loaded, no KPI will be added.<br><br>Change-Id: I28226a375f9ac4e08424c488062ae6a74a19af92<br>---<br>M src/osmo_gsm_tester/obj/enb_srs.py<br>M src/osmo_gsm_tester/obj/ms_srs.py<br>A src/osmo_gsm_tester/obj/srslte_common.py<br>3 files changed, 56 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>index 0bf4f8b..fe1ea4e 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>@@ -23,6 +23,7 @@</span><br><span> from ..core import log, util, config, template, process, remote</span><br><span> from . import enb</span><br><span> from . import rfemu</span><br><span style="color: hsl(120, 100%, 40%);">+from .srslte_common import srslte_common</span><br><span> </span><br><span> from ..core import schema</span><br><span> </span><br><span>@@ -36,7 +37,7 @@</span><br><span> def rf_type_valid(rf_type_str):</span><br><span>     return rf_type_str in ('zmq', 'uhd', 'soapy', 'bladerf')</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-class srsENB(enb.eNodeB):</span><br><span style="color: hsl(120, 100%, 40%);">+class srsENB(enb.eNodeB, srslte_common):</span><br><span> </span><br><span>     REMOTE_DIR = '/osmo-gsm-tester-srsenb'</span><br><span>     BINFILE = 'srsenb'</span><br><span>@@ -68,6 +69,7 @@</span><br><span>         self.remote_log_file = None</span><br><span>         self.remote_pcap_file = None</span><br><span>         self.enable_pcap = False</span><br><span style="color: hsl(120, 100%, 40%);">+        self.metrics_file = None</span><br><span>         self.testenv = testenv</span><br><span>         self._additional_args = []</span><br><span>         if not rf_type_valid(conf.get('rf_dev_type', None)):</span><br><span>@@ -89,6 +91,9 @@</span><br><span>             except Exception as e:</span><br><span>                 self.log(repr(e))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        # Collect KPIs for each TC</span><br><span style="color: hsl(120, 100%, 40%);">+        self.testenv.test().set_kpis(self.get_kpis())</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def start(self, epc):</span><br><span>         self.log('Starting srsENB')</span><br><span>         self._epc = epc</span><br><span>diff --git a/src/osmo_gsm_tester/obj/ms_srs.py b/src/osmo_gsm_tester/obj/ms_srs.py</span><br><span>index 9f77bb6..ebd066d 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/ms_srs.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/ms_srs.py</span><br><span>@@ -26,6 +26,7 @@</span><br><span> from .run_node import RunNode</span><br><span> from ..core.event_loop import MainLoop</span><br><span> from .ms import MS</span><br><span style="color: hsl(120, 100%, 40%);">+from .srslte_common import srslte_common</span><br><span> </span><br><span> def rf_type_valid(rf_type_str):</span><br><span>     return rf_type_str in ('zmq', 'uhd', 'soapy', 'bladerf')</span><br><span>@@ -64,7 +65,7 @@</span><br><span> def num_prb2base_srate(num_prb):</span><br><span>     return num_prb2symbol_sz(num_prb) * 15 * 1000</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-class srsUE(MS):</span><br><span style="color: hsl(120, 100%, 40%);">+class srsUE(MS, srslte_common):</span><br><span> </span><br><span>     REMOTE_DIR = '/osmo-gsm-tester-srsue'</span><br><span>     BINFILE = 'srsue'</span><br><span>@@ -120,6 +121,9 @@</span><br><span>             except Exception as e:</span><br><span>                 self.log(repr(e))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        # Collect KPIs for each TC</span><br><span style="color: hsl(120, 100%, 40%);">+        self.testenv.test().set_kpis(self.get_kpis())</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def scp_back_metrics(self, raiseException=True):</span><br><span>         ''' Copy back metrics only if they have not been copied back yet '''</span><br><span>         if not self.have_metrics_file:</span><br><span>diff --git a/src/osmo_gsm_tester/obj/srslte_common.py b/src/osmo_gsm_tester/obj/srslte_common.py</span><br><span>new file mode 100644</span><br><span>index 0000000..33f12d4</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo_gsm_tester/obj/srslte_common.py</span><br><span>@@ -0,0 +1,45 @@</span><br><span style="color: hsl(120, 100%, 40%);">+# osmo_gsm_tester: common methods shared among srsLTE components</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright (C) 2020 by Software Radio Systems Ltd</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Author: Andre Puschmann <andre@softwareradiosystems.com></span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is free software: you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+# it under the terms of the GNU General Public License as</span><br><span style="color: hsl(120, 100%, 40%);">+# published by the Free Software Foundation, either version 3 of the</span><br><span style="color: hsl(120, 100%, 40%);">+# License, or (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+# GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+# along with this program.  If not, see <http://www.gnu.org/licenses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+from ..core import log</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class srslte_common(): # don't inherit from log.Origin here but instead use .name() from whoever inherits from us</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  def __init__(self):</span><br><span style="color: hsl(120, 100%, 40%);">+    self.log_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+    self.process = None</span><br><span style="color: hsl(120, 100%, 40%);">+    self.metrics_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  def get_kpis(self):</span><br><span style="color: hsl(120, 100%, 40%);">+      ''' Use the srsLTE KPI analyzer module (part of srsLTE.git) if available to collect KPIs '''</span><br><span style="color: hsl(120, 100%, 40%);">+      kpis = {}</span><br><span style="color: hsl(120, 100%, 40%);">+      try:</span><br><span style="color: hsl(120, 100%, 40%);">+          # Please make sure the srsLTE scripts folder is included in your PYTHONPATH env variable</span><br><span style="color: hsl(120, 100%, 40%);">+          from kpi_analyzer import kpi_analyzer</span><br><span style="color: hsl(120, 100%, 40%);">+          analyzer = kpi_analyzer(self.name())</span><br><span style="color: hsl(120, 100%, 40%);">+          if self.log_file is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+              kpis["log_" + self.name()] = analyzer.get_kpi_from_logfile(self.log_file)</span><br><span style="color: hsl(120, 100%, 40%);">+          if self.process.get_output_file('stdout') is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+              kpis["stdout_" + self.name()] = analyzer.get_kpi_from_stdout(self.process.get_output_file('stdout'))</span><br><span style="color: hsl(120, 100%, 40%);">+          if self.metrics_file is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+              kpis["csv_" + self.name()] = analyzer.get_kpi_from_csv(self.metrics_file)</span><br><span style="color: hsl(120, 100%, 40%);">+      except ImportError:</span><br><span style="color: hsl(120, 100%, 40%);">+          self.log("Can't load KPI analyzer module.")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return kpis</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18986">change 18986</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18986"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I28226a375f9ac4e08424c488062ae6a74a19af92 </div>
<div style="display:none"> Gerrit-Change-Number: 18986 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: srs_andre <andre@softwareradiosystems.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: srs_andre <andre@softwareradiosystems.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>