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 <ciara.power@intel.com>
Reviewed-by: Robin Jarry <robin.jarry@6wind.com>
Acked-by: Kevin Laatz <kevin.laatz@intel.com>
This commit is contained in:
Ciara Power 2020-01-21 17:03:10 +00:00 committed by Thomas Monjalon
parent e1766e7b0c
commit af927da4d7

View File

@ -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: