From dc905a7dd6c6938b170964d957a0fafb3cb1ac7f Mon Sep 17 00:00:00 2001 From: Yaroslav Brustinov Date: Wed, 1 Mar 2017 18:40:58 +0200 Subject: STF publisher: ensure latest results are sent by CPP + get latest dump via Python API Change-Id: I1836c0366785246acbcd8d238400440f5f3970f5 Signed-off-by: Yaroslav Brustinov --- .../server/trex_launch_thread.py | 2 +- .../trex_control_plane/server/trex_server.py | 24 ++++++++++++++++++---- .../server/zmq_monitor_thread.py | 2 +- 3 files changed, 22 insertions(+), 6 deletions(-) (limited to 'scripts/automation/trex_control_plane/server') diff --git a/scripts/automation/trex_control_plane/server/trex_launch_thread.py b/scripts/automation/trex_control_plane/server/trex_launch_thread.py index f4ee0d6b..a4a7a97c 100755 --- a/scripts/automation/trex_control_plane/server/trex_launch_thread.py +++ b/scripts/automation/trex_control_plane/server/trex_launch_thread.py @@ -27,7 +27,7 @@ class AsynchronousTRexSession(threading.Thread): self.session = None self.trexObj = trexObj self.time_stamps = {'start' : None, 'run_time' : None} - self.trexObj.zmq_dump = {} + self.trexObj.clear_zmq_dump() def run (self): try: diff --git a/scripts/automation/trex_control_plane/server/trex_server.py b/scripts/automation/trex_control_plane/server/trex_server.py index 60febc6a..cd4af11a 100755 --- a/scripts/automation/trex_control_plane/server/trex_server.py +++ b/scripts/automation/trex_control_plane/server/trex_server.py @@ -25,7 +25,7 @@ import CCustomLogger from trex_launch_thread import AsynchronousTRexSession from zmq_monitor_thread import ZmqMonitorSession from argparse import ArgumentParser, RawTextHelpFormatter -from json import JSONEncoder +import json import re import shlex import tempfile @@ -140,6 +140,7 @@ class CTRexServer(object): self.server.register_function(self.get_file) self.server.register_function(self.get_files_list) self.server.register_function(self.get_files_path) + self.server.register_function(self.get_latest_dump) self.server.register_function(self.get_running_info) self.server.register_function(self.get_running_status) self.server.register_function(self.get_trex_cmds) @@ -432,6 +433,9 @@ class CTRexServer(object): logger.info("Processing get_running_info() command.") return self.trex.get_running_info() + def get_latest_dump(self): + logger.info("Processing get_latest_dump() command.") + return self.trex.get_latest_dump() def generate_run_cmd (self, iom = 0, export_path="/tmp/trex.txt", stateless = False, debug_image = False, trex_args = '', **kwargs): """ generate_run_cmd(self, iom, export_path, kwargs) -> str @@ -554,11 +558,11 @@ class CTRex(object): self.errcode = None self.session = None self.zmq_monitor = None - self.zmq_dump = None + self.__zmq_dump = {} + self.zmq_dump_lock = threading.Lock() self.zmq_error = None self.seq = None self.expect_trex = threading.Event() - self.encoder = JSONEncoder() def get_status(self): return self.status @@ -578,9 +582,21 @@ class CTRex(object): def get_seq (self): return self.seq + def get_latest_dump(self): + with self.zmq_dump_lock: + return json.dumps(self.__zmq_dump) + + def update_zmq_dump_key(self, key, val): + with self.zmq_dump_lock: + self.__zmq_dump[key] = val + + def clear_zmq_dump(self): + with self.zmq_dump_lock: + self.__zmq_dump = {} + def get_running_info (self): if self.status == TRexStatus.Running: - return self.encoder.encode(self.zmq_dump) + return self.get_latest_dump() else: logger.info("TRex isn't running. Running information isn't available.") if self.status == TRexStatus.Idle: diff --git a/scripts/automation/trex_control_plane/server/zmq_monitor_thread.py b/scripts/automation/trex_control_plane/server/zmq_monitor_thread.py index f559ebc1..172e2eb3 100755 --- a/scripts/automation/trex_control_plane/server/zmq_monitor_thread.py +++ b/scripts/automation/trex_control_plane/server/zmq_monitor_thread.py @@ -72,7 +72,7 @@ class ZmqMonitorSession(threading.Thread): # add to trex_obj zmq latest dump, based on its 'name' header if dict_obj != {}: - self.trexObj.zmq_dump[dict_obj['name']] = dict_obj + self.trexObj.update_zmq_dump_key(dict_obj['name'], dict_obj) if self.first_dump: # change TRexStatus from starting to Running once the first ZMQ dump is obtained and parsed successfully self.first_dump = False -- cgit 1.2.3-korg