Added JSON output to rnpath utility

This commit is contained in:
Mark Qvist 2024-08-29 14:51:38 +02:00
parent 7be6a0e000
commit 169d1921be
1 changed files with 110 additions and 59 deletions

View File

@ -79,9 +79,9 @@ def connect_remote(destination_hash, auth_identity, timeout, no_output = False):
link.set_link_established_callback(remote_link_established) link.set_link_established_callback(remote_link_established)
link.set_link_closed_callback(remote_link_closed) link.set_link_closed_callback(remote_link_closed)
def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity, timeout, def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity, timeout, drop_queues,
drop_queues, drop_via, max_hops, remote=None, management_identity=None, drop_via, max_hops, remote=None, management_identity=None, remote_timeout=RNS.Transport.PATH_REQUEST_TIMEOUT,
remote_timeout=RNS.Transport.PATH_REQUEST_TIMEOUT, no_output=False): no_output=False, json=False):
global remote_link, reticulum global remote_link, reticulum
reticulum = RNS.Reticulum(configdir = configdir, loglevel = 3+verbosity) reticulum = RNS.Reticulum(configdir = configdir, loglevel = 3+verbosity)
if remote: if remote:
@ -148,6 +148,16 @@ def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity,
exit(10) exit(10)
displayed = 0 displayed = 0
if json:
import json
for p in table:
for k in p:
if isinstance(p[k], bytes):
p[k] = RNS.hexrep(p[k], delimit=False)
print(json.dumps(table))
exit()
else:
for path in table: for path in table:
if destination_hash == None or destination_hash == path["hash"]: if destination_hash == None or destination_hash == path["hash"]:
displayed += 1 displayed += 1
@ -198,6 +208,16 @@ def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity,
exit(10) exit(10)
table = sorted(table, key=lambda e: e["last"]) table = sorted(table, key=lambda e: e["last"])
if json:
import json
for p in table:
for k in p:
if isinstance(p[k], bytes):
p[k] = RNS.hexrep(p[k], delimit=False)
print(json.dumps(table))
exit()
else:
if len(table) == 0: if len(table) == 0:
print("No information available") print("No information available")
@ -244,10 +264,22 @@ def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity,
sys.exit(1) sys.exit(1)
elif drop_queues: elif drop_queues:
RNS.log("Dropping announce queues on all interfaces...") if remote_link:
if not no_output:
print("\r \r", end="")
print("Dropping announce queues on remote instances not yet implemented")
exit(255)
print("Dropping announce queues on all interfaces...")
reticulum.drop_announce_queues() reticulum.drop_announce_queues()
elif drop: elif drop:
if remote_link:
if not no_output:
print("\r \r", end="")
print("Dropping path on remote instances not yet implemented")
exit(255)
try: try:
dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2 dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2
if len(destination_hexhash) != dest_len: if len(destination_hexhash) != dest_len:
@ -266,8 +298,13 @@ def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity,
print("Unable to drop path to "+RNS.prettyhexrep(destination_hash)+". Does it exist?") print("Unable to drop path to "+RNS.prettyhexrep(destination_hash)+". Does it exist?")
sys.exit(1) sys.exit(1)
elif drop_via: elif drop_via:
if remote_link:
if not no_output:
print("\r \r", end="")
print("Dropping all paths via specific transport instance on remote instances yet not implemented")
exit(255)
try: try:
dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2 dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2
if len(destination_hexhash) != dest_len: if len(destination_hexhash) != dest_len:
@ -286,8 +323,13 @@ def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity,
print("Unable to drop paths via "+RNS.prettyhexrep(destination_hash)+". Does the transport instance exist?") print("Unable to drop paths via "+RNS.prettyhexrep(destination_hash)+". Does the transport instance exist?")
sys.exit(1) sys.exit(1)
else: else:
if remote_link:
if not no_output:
print("\r \r", end="")
print("Requesting paths on remote instances not implemented")
exit(255)
try: try:
dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2 dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2
if len(destination_hexhash) != dest_len: if len(destination_hexhash) != dest_len:
@ -438,6 +480,14 @@ def main():
default=RNS.Transport.PATH_REQUEST_TIMEOUT default=RNS.Transport.PATH_REQUEST_TIMEOUT
) )
parser.add_argument(
"-j",
"--json",
action="store_true",
help="output in JSON format",
default=False
)
parser.add_argument( parser.add_argument(
"destination", "destination",
nargs="?", nargs="?",
@ -474,6 +524,7 @@ def main():
remote=args.R, remote=args.R,
management_identity=args.i, management_identity=args.i,
remote_timeout=args.W, remote_timeout=args.W,
json=args.json,
) )
sys.exit(0) sys.exit(0)