[v2] usertools: fix telemetry python3 compatibility
diff mbox series

Message ID 20200121170310.25382-1-ciara.power@intel.com
State Accepted
Delegated to: Thomas Monjalon
Headers show
Series
  • [v2] usertools: fix telemetry python3 compatibility
Related show

Checks

Context Check Description
ci/travis-robot success Travis build: passed
ci/iol-nxp-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-intel-Performance success Performance Testing PASS
ci/checkpatch success coding style OK

Commit Message

Ciara Power Jan. 21, 2020, 5:03 p.m. UTC
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 <ciara.power@intel.com>
Reviewed-by: Robin Jarry <robin.jarry@6wind.com>

---

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(-)

Comments

Laatz, Kevin Jan. 24, 2020, 10:11 a.m. UTC | #1
> 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 <ciara.power@intel.com>
> Reviewed-by: Robin Jarry <robin.jarry@6wind.com>
> 
<snip>

Acked-by: Kevin Laatz <kevin.laatz@intel.com>
Thomas Monjalon Feb. 16, 2020, 9:25 p.m. UTC | #2
24/01/2020 11:11, Laatz, Kevin:
> > 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 <ciara.power@intel.com>
> > Reviewed-by: Robin Jarry <robin.jarry@6wind.com>
> > 
> <snip>
> 
> Acked-by: Kevin Laatz <kevin.laatz@intel.com>

Applied, thanks

Patch
diff mbox series

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: