[RFC PATCH 6/7] usertools/telemetry-watcher: add eth name shortcuts
Bruce Richardson
bruce.richardson at intel.com
Wed Dec 10 17:55:31 CET 2025
Since an expected main use of the script is to monitor ethdev packet
stats, provide a shortened form of parameters to make it easier to
monitor all ports on the system. Any stat starting with "eth." is taken
not as a direct command, but instead as a shortcut for getting the stats
for all ports on the system. For example: eth.ibytes shows the byte
counts for all ports.
Beyond that, provide a shortcut for ipackets and opackets as just rx and
tx respectively. Therefore, to monitor the output rate of an app, one
can use "dpdk-telemetry-watcher -dT eth.tx"
Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
---
usertools/dpdk-telemetry-watcher.py | 49 ++++++++++++++++++++++++++++-
1 file changed, 48 insertions(+), 1 deletion(-)
diff --git a/usertools/dpdk-telemetry-watcher.py b/usertools/dpdk-telemetry-watcher.py
index 59ec4c85b6..6beb67d29a 100755
--- a/usertools/dpdk-telemetry-watcher.py
+++ b/usertools/dpdk-telemetry-watcher.py
@@ -139,6 +139,48 @@ def print_connected_app(process):
print(f'Connected to application: "{app_name}"')
+def expand_shortcuts(process, stat_specs):
+ """Expand special shortcuts like eth.rx and eth.tx into actual stat specifications.
+
+ Args:
+ process: The subprocess.Popen handle to the telemetry process
+ stat_specs: List of stat specifications, possibly including shortcuts
+
+ Returns:
+ List of expanded stat specifications
+ """
+ expanded = []
+ for spec in stat_specs:
+ if not spec.startswith("eth."):
+ expanded.append(spec)
+ continue
+
+ # Extract the field name after "eth."
+ field = spec[4:] # Remove "eth." prefix
+ if not field:
+ print(f"Error: Invalid shortcut '{spec}' - missing field name", file=sys.stderr)
+ return None
+
+ # Map common shortcuts to actual field names
+ field_map = {
+ "rx": "ipackets",
+ "tx": "opackets",
+ }
+ field = field_map.get(field, field)
+
+ # Get list of ethernet devices
+ port_list = query_telemetry(process, "/ethdev/list")
+ if not isinstance(port_list, list):
+ print(f"Error: Failed to get ethernet device list", file=sys.stderr)
+ return None
+
+ # Create stat specs for each port
+ for port in port_list:
+ expanded.append(f"/ethdev/stats,{port}.{field}")
+
+ return expanded
+
+
def validate_stats(process, stat_specs):
"""Validate stat specifications and check that fields are numeric.
@@ -202,8 +244,13 @@ def monitor_stats(process, args):
process: The subprocess.Popen handle to the telemetry process
args: Parsed command line arguments
"""
+ # Expand any shortcuts like eth-rx, eth-tx
+ expanded_stats = expand_shortcuts(process, args.stats)
+ if not expanded_stats:
+ return
+
# Validate all stat specifications and get initial values
- parsed_specs, prev_values = validate_stats(process, args.stats)
+ parsed_specs, prev_values = validate_stats(process, expanded_stats)
if not parsed_specs:
return
--
2.51.0
More information about the dev
mailing list