From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 08427A0597; Wed, 8 Apr 2020 19:10:14 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 249421C1D8; Wed, 8 Apr 2020 19:08:26 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 5CBAC1C1D3 for ; Wed, 8 Apr 2020 19:08:24 +0200 (CEST) IronPort-SDR: JBzSQAIl2r+73ReWJJjpDqBfRxIl3SG6agOOSP8cgFg8sGrD+P+hJJBnCRChkEqgbXXvQ4+ba9 vqMLI9tfylAw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2020 10:08:24 -0700 IronPort-SDR: 6aT6j2UUgR5cU8v3Iz3jR/IkH16tXPc2NS8OVcfZfJCC2c82wzrAN/9GGMyKte0ygxkG9SFVJE rySg2qTL+9mg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,359,1580803200"; d="scan'208";a="452880239" Received: from silpixa00399953.ir.intel.com (HELO silpixa00399953.ger.corp.intel.com) ([10.237.222.53]) by fmsmga006.fm.intel.com with ESMTP; 08 Apr 2020 10:08:21 -0700 From: Ciara Power To: dev@dpdk.org, kevin.laatz@intel.com Cc: reshma.pattan@intel.com, jerinjacobk@gmail.com, david.marchand@redhat.com, keith.wiles@intel.com, mb@smartsharesystems.com, thomas@monjalon.net, Bruce Richardson , Ciara Power Date: Wed, 8 Apr 2020 17:49:49 +0100 Message-Id: <20200408164956.47864-10-ciara.power@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200408164956.47864-1-ciara.power@intel.com> References: <20200319171907.60891-1-ciara.power@intel.com> <20200408164956.47864-1-ciara.power@intel.com> Subject: [dpdk-dev] [PATCH v2 09/16] usertools: add new telemetry python script X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Bruce Richardson This patch adds a python script that can be used with the new telemetry socket. It connects as a client to the socket, and allows the user send a command and see the JSON response. The example usage below shows the script connecting to the new telemetry socket, and sending two basic ethdev commands entered by the user. The response for each command is shown below the user input. Connecting to /var/run/dpdk/rte/dpdk_telemetry.v2 {"pid": 63724, "version": "DPDK 20.05.0-rc0", "max_output_len": 16384} --> / {"/": ["/", "/ethdev/link_status", "/ethdev/list", "/ethdev/xstats", \ "/info"]} --> /info {"/info": {"pid": 63724, "version": "DPDK 20.05.0-rc0", \ "max_output_len": 16384}} --> /ethdev/list {"/ethdev/list": [0, 1]} --> /ethdev/link_status,0 {"/ethdev/link_status": {"status": "UP", "speed": 10000, "duplex": \ "full-duplex"}} --> /ethdev/xstats,0 {"/ethdev/xstats": {"rx_good_packets": 0, "tx_good_packets": 0, \ "tx_priority7_xon_to_xoff_packets": 0}} Signed-off-by: Bruce Richardson Signed-off-by: Ciara Power --- v2: - Renamed new python script to dpdk-telemetry.py. - Fixed script to validate input before sending to Telemetry. --- usertools/dpdk-telemetry.py | 44 +++++++++++++++++++++++++++++++++++++ usertools/meson.build | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100755 usertools/dpdk-telemetry.py diff --git a/usertools/dpdk-telemetry.py b/usertools/dpdk-telemetry.py new file mode 100755 index 0000000000..55fa532136 --- /dev/null +++ b/usertools/dpdk-telemetry.py @@ -0,0 +1,44 @@ +#! /usr/bin/python3 +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2020 Intel Corporation + +import socket +import os +import glob +import json + +telemetry_version = "v2" + +def read_socket(buf_len): + reply = fd.recv(buf_len).decode() + try: + print(json.dumps(json.loads(reply))) + return json.loads(reply) + except: + print("Error in reply: ", reply) + raise + +def handle_socket(path): + print("Connecting to " + path) + try: + fd.connect(path) + except OSError: + return + json_reply = read_socket(1024) + output_buf_len = json_reply["max_output_len"] + text = input('--> ').strip() + while (text != "quit"): + if text.startswith('/'): + fd.send(text.encode()) + read_socket(output_buf_len) + text = input('--> ').strip() + + fd.close() + +fd = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET) +# 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('/run/user/%d/dpdk/*/dpdk_telemetry.%s' % (os.getuid(), telemetry_version)): + handle_socket(f) diff --git a/usertools/meson.build b/usertools/meson.build index 149e788e3d..64e27238f4 100644 --- a/usertools/meson.build +++ b/usertools/meson.build @@ -1,4 +1,4 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation -install_data(['dpdk-devbind.py', 'dpdk-pmdinfo.py'], install_dir: 'bin') +install_data(['dpdk-devbind.py', 'dpdk-pmdinfo.py', 'dpdk-telemetry.py'], install_dir: 'bin') -- 2.17.1