usertools/telemetry: add JSON pretty print
Currently, the dpdk-telemetry.py show JSON in raw format under interactive mode, which is not good for human reading. E.g. The command '/ethdev/xstats,0' will output: {"/ethdev/xstats": {"rx_good_packets": 0, "tx_good_packets": 0, "rx_good_bytes": 0, "tx_good_bytes": 0, "rx_missed_errors": 0, "rx_errors": 0, "tx_errors": 0, "rx_mbuf_allocation_errors": 0, "rx_q0_packets": 0,...}} This patch supports JSON pretty print by adding extra indent=2 parameter under interactive mode, so the same command will output: { "/ethdev/xstats": { "rx_good_packets": 0, "tx_good_packets": 0, "rx_good_bytes": 0, "tx_good_bytes": 0, "rx_missed_errors": 0, "rx_errors": 0, "rx_mbuf_allocation_errors": 0, "rx_q0_packets": 0, ... } } Note: the non-interactive mode is made machine-readable and remains the original way (it means don't use indent to pretty print). Signed-off-by: Chengwen Feng <fengchengwen@huawei.com> Acked-by: David Marchand <david.marchand@redhat.com> Acked-by: Ciara Power <ciara.power@intel.com> Tested-by: Bruce Richardson <bruce.richardson@intel.com>
This commit is contained in:
parent
3429d6dd5c
commit
66542840df
@ -23,7 +23,7 @@
|
||||
CMDS = []
|
||||
|
||||
|
||||
def read_socket(sock, buf_len, echo=True):
|
||||
def read_socket(sock, buf_len, echo=True, pretty=False):
|
||||
""" Read data from socket and return it in JSON format """
|
||||
reply = sock.recv(buf_len).decode()
|
||||
try:
|
||||
@ -33,7 +33,8 @@ def read_socket(sock, buf_len, echo=True):
|
||||
sock.close()
|
||||
raise
|
||||
if echo:
|
||||
print(json.dumps(ret))
|
||||
indent = 2 if pretty else None
|
||||
print(json.dumps(ret, indent=indent))
|
||||
return ret
|
||||
|
||||
|
||||
@ -127,7 +128,7 @@ def handle_socket(args, path):
|
||||
else:
|
||||
list_fp()
|
||||
return
|
||||
json_reply = read_socket(sock, 1024, prompt)
|
||||
json_reply = read_socket(sock, 1024, prompt, prompt)
|
||||
output_buf_len = json_reply["max_output_len"]
|
||||
app_name = get_app_name(json_reply["pid"])
|
||||
if app_name and prompt:
|
||||
@ -143,7 +144,7 @@ def handle_socket(args, path):
|
||||
while text != "quit":
|
||||
if text.startswith('/'):
|
||||
sock.send(text.encode())
|
||||
read_socket(sock, output_buf_len)
|
||||
read_socket(sock, output_buf_len, pretty=prompt)
|
||||
text = input(prompt).strip()
|
||||
except EOFError:
|
||||
pass
|
||||
|
Loading…
Reference in New Issue
Block a user