From af927da4d7d23f1050f23caf55f4ac2a995ab244 Mon Sep 17 00:00:00 2001 From: Ciara Power Date: Tue, 21 Jan 2020 17:03:10 +0000 Subject: [PATCH] usertools: fix telemetry client with python 3 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. Similarly, 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: stable@dpdk.org Signed-off-by: Ciara Power Reviewed-by: Robin Jarry Acked-by: Kevin Laatz --- 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 290345dcc4..35edb7cd26 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 @@ class Client: 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 @@ class Client: 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: -- 2.20.1