From patchwork Tue Jan 21 17:03:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Power, Ciara" X-Patchwork-Id: 65018 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8ED86A04DD; Tue, 21 Jan 2020 18:11:46 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EC30E11A4; Tue, 21 Jan 2020 18:11:45 +0100 (CET) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id E40C9DE3; Tue, 21 Jan 2020 18:11:43 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Jan 2020 09:11:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,346,1574150400"; d="scan'208";a="427118476" Received: from silpixa00399953.ir.intel.com (HELO silpixa00399953.ger.corp.intel.com) ([10.237.222.53]) by fmsmga006.fm.intel.com with ESMTP; 21 Jan 2020 09:11:40 -0800 From: Ciara Power To: kevin.laatz@intel.com Cc: dev@dpdk.org, Ciara Power , andrius.sirvys@intel.com, robin.jarry@6wind.com, reshma.pattan@intel.com, stable@dpdk.org Date: Tue, 21 Jan 2020 17:03:10 +0000 Message-Id: <20200121170310.25382-1-ciara.power@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200116172425.19246-1-ciara.power@intel.com> References: <20200116172425.19246-1-ciara.power@intel.com> Subject: [dpdk-dev] [PATCH v2] usertools: fix telemetry python3 compatibility 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" The client script for use with the telemetry library did not support Python3, as the data being sent over the socket was in string format. Python3 requires the data be explicitly converted to bytes before being sent. Similarily, the received bytes need to be decoded into string format. Fixes: 53f293c9a783 ("usertools: replace unsafe input function") Fixes: fe35622659ed ("usertools: fix telemetry client with python 3") Fixes: d1b94da4a4e0 ("usertools: add client script for telemetry") Fixes: 4080e46c8078 ("telemetry: support global metrics") Cc: andrius.sirvys@intel.com Cc: robin.jarry@6wind.com Cc: reshma.pattan@intel.com Cc: stable@dpdk.org Signed-off-by: Ciara Power Reviewed-by: Robin Jarry Acked-by: Kevin Laatz --- V2: added future import for unicode literals to ensure consistency of data types for Python2 and Python3. --- usertools/dpdk-telemetry-client.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/usertools/dpdk-telemetry-client.py b/usertools/dpdk-telemetry-client.py index 290345dcc..35edb7cd2 100755 --- a/usertools/dpdk-telemetry-client.py +++ b/usertools/dpdk-telemetry-client.py @@ -3,6 +3,7 @@ # Copyright(c) 2018 Intel Corporation from __future__ import print_function +from __future__ import unicode_literals import socket import os @@ -65,18 +66,19 @@ def register(self): # Connects a client to DPDK-instance self.socket.recv_fd.settimeout(2) self.socket.send_fd.connect("/var/run/dpdk/rte/telemetry") JSON = (API_REG + self.file_path + "\"}}") - self.socket.send_fd.sendall(JSON) + self.socket.send_fd.sendall(JSON.encode()) + self.socket.recv_fd.listen(1) self.socket.client_fd = self.socket.recv_fd.accept()[0] def unregister(self): # Unregister a given client - self.socket.client_fd.send(API_UNREG + self.file_path + "\"}}") + self.socket.client_fd.send((API_UNREG + self.file_path + "\"}}").encode()) self.socket.client_fd.close() def requestMetrics(self): # Requests metrics for given client - self.socket.client_fd.send(METRICS_REQ) - data = self.socket.client_fd.recv(BUFFER_SIZE) - print("\nResponse: \n", str(data)) + self.socket.client_fd.send(METRICS_REQ.encode()) + data = self.socket.client_fd.recv(BUFFER_SIZE).decode() + print("\nResponse: \n", data) def repeatedlyRequestMetrics(self, sleep_time): # Recursively requests metrics for given client print("\nPlease enter the number of times you'd like to continuously request Metrics:") @@ -88,9 +90,9 @@ def repeatedlyRequestMetrics(self, sleep_time): # Recursively requests metrics f time.sleep(sleep_time) def requestGlobalMetrics(self): #Requests global metrics for given client - self.socket.client_fd.send(GLOBAL_METRICS_REQ) - data = self.socket.client_fd.recv(BUFFER_SIZE) - print("\nResponse: \n", str(data)) + self.socket.client_fd.send(GLOBAL_METRICS_REQ.encode()) + data = self.socket.client_fd.recv(BUFFER_SIZE).decode() + print("\nResponse: \n", data) def interactiveMenu(self, sleep_time): # Creates Interactive menu within the script while self.choice != 4: