numam-dpdk/usertools/dpdk-telemetry.py
Louise Kilheeney 3f6f83626c support python 3 only
Changed scripts to explicitly use Python 3 only, to avoid
maintaining Python 2.
Removed deprecation notices.

Signed-off-by: Louise Kilheeney <louise.kilheeney@intel.com>
Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Robin Jarry <robin.jarry@6wind.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Ray Kinsella <mdr@ashroe.eu>
2020-10-02 13:51:00 +02:00

84 lines
2.2 KiB
Python
Executable File

#! /usr/bin/env python3
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2020 Intel Corporation
"""
Script to be used with V2 Telemetry.
Allows the user input commands and read the Telemetry response.
"""
import socket
import os
import glob
import json
import readline
# global vars
TELEMETRY_VERSION = "v2"
CMDS = []
def read_socket(sock, buf_len, echo=True):
""" Read data from socket and return it in JSON format """
reply = sock.recv(buf_len).decode()
try:
ret = json.loads(reply)
except json.JSONDecodeError:
print("Error in reply: ", reply)
sock.close()
raise
if echo:
print(json.dumps(ret))
return ret
def handle_socket(path):
""" Connect to socket and handle user input """
sock = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)
global CMDS
print("Connecting to " + path)
try:
sock.connect(path)
except OSError:
print("Error connecting to " + path)
sock.close()
return
json_reply = read_socket(sock, 1024)
output_buf_len = json_reply["max_output_len"]
# get list of commands for readline completion
sock.send("/".encode())
CMDS = read_socket(sock, output_buf_len, False)["/"]
# interactive prompt
text = input('--> ').strip()
while text != "quit":
if text.startswith('/'):
sock.send(text.encode())
read_socket(sock, output_buf_len)
text = input('--> ').strip()
sock.close()
def readline_complete(text, state):
""" Find any matching commands from the list based on user input """
all_cmds = ['quit'] + CMDS
if text:
matches = [c for c in all_cmds if c.startswith(text)]
else:
matches = all_cmds
return matches[state]
readline.parse_and_bind('tab: complete')
readline.set_completer(readline_complete)
readline.set_completer_delims(readline.get_completer_delims().replace('/', ''))
# Path to sockets for processes run as a root user
for f in glob.glob('/var/run/dpdk/*/dpdk_telemetry.%s' % TELEMETRY_VERSION):
handle_socket(f)
# Path to sockets for processes run as a regular user
for f in glob.glob('%s/dpdk/*/dpdk_telemetry.%s' %
(os.environ.get('XDG_RUNTIME_DIR', '/tmp'), TELEMETRY_VERSION)):
handle_socket(f)