aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--resources/libraries/python/DUTSetup.py37
-rw-r--r--resources/tools/ab/ABTools.py12
2 files changed, 17 insertions, 32 deletions
diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py
index 6e3530277a..419a4e291f 100644
--- a/resources/libraries/python/DUTSetup.py
+++ b/resources/libraries/python/DUTSetup.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2022 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -207,42 +207,25 @@ class DUTSetup:
exec_cmd_no_error(node, cmd, message=f"{program} is not installed")
@staticmethod
- def get_pid(node, process):
+ def get_pid(node, process, retries=3):
"""Get PID of running process.
:param node: DUT node.
:param process: process name.
+ :param retries: How many times to retry on failure.
:type node: dict
:type process: str
+ :type retries: int
:returns: PID
:rtype: int
:raises RuntimeError: If it is not possible to get the PID.
"""
- ssh = SSH()
- ssh.connect(node)
-
- retval = None
- for i in range(3):
- logger.trace(f"Try {i}: Get {process} PID")
- ret_code, stdout, stderr = ssh.exec_command(f"pidof {process}")
-
- if int(ret_code):
- raise RuntimeError(
- f"Not possible to get PID of {process} process on node: "
- f"{node[u'host']}\n {stdout + stderr}"
- )
-
- pid_list = stdout.split()
- if len(pid_list) == 1:
- return [int(stdout)]
- if not pid_list:
- logger.debug(f"No {process} PID found on node {node[u'host']}")
- continue
- logger.debug(f"More than one {process} PID found " \
- f"on node {node[u'host']}")
- retval = [int(pid) for pid in pid_list]
-
- return retval
+ cmd = f"pidof {process}"
+ stdout, _ = exec_cmd_no_error(
+ node, cmd, retries=retries,
+ message=f"No {process} PID found on node {node[u'host']}")
+ pid_list = stdout.split()
+ return [int(pid) for pid in pid_list]
@staticmethod
def get_vpp_pids(nodes):
diff --git a/resources/tools/ab/ABTools.py b/resources/tools/ab/ABTools.py
index bb21ea351f..b929b49fdd 100644
--- a/resources/tools/ab/ABTools.py
+++ b/resources/tools/ab/ABTools.py
@@ -13,6 +13,7 @@
"""ab implementation into CSIT framework."""
+from re import search
from resources.libraries.python.Constants import Constants
from resources.libraries.python.model.ExportResult import (
export_hoststack_results
@@ -167,15 +168,16 @@ class ABTools:
failed_requests = None
for line in stdout.splitlines():
if f"Connection {rps_cps} rate:" in line:
- rate = float(line.split(" ")[3])
+ rate = float(search(r":\s*(\d+\.?\d+)", line).group(1))
elif "Transfer Rate:" in line:
- bandwidth = float(line.split(" ")[2]) * 8000
+ bandwidth = \
+ float(search(r":\s*(\d+\.?\d+)", line).group(1)) * 8000
elif "Latency:" in line:
- latency = float(line.split(" ")[1])
+ latency = float(search(r":\s*(\d+\.?\d+)", line).group(1))
elif "Completed requests:" in line:
- completed_requests = int(line.split(" ")[2])
+ completed_requests = int(search(r":\s*(\d+)", line).group(1))
elif "Failed requests" in line:
- failed_requests = int(line.split(" ")[2])
+ failed_requests = int(search(r":\s*(\d+)", line).group(1))
export_hoststack_results(
bandwidth, rate, rate_unit, latency, failed_requests,