Improved rncp stats. Added no-compress option to listener.

This commit is contained in:
Mark Qvist 2025-04-03 17:37:36 +02:00
parent f2046b2453
commit ebb8a35129

View file

@ -22,7 +22,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE. # SOFTWARE.
from CRNS import RNS import RNS
import argparse import argparse
import threading import threading
import time import time
@ -34,6 +34,7 @@ from RNS._version import __version__
APP_NAME = "rncp" APP_NAME = "rncp"
allow_all = False allow_all = False
allow_fetch = False allow_fetch = False
fetch_auto_compress = True
fetch_jail = None fetch_jail = None
save_path = None save_path = None
show_phy_rates = False show_phy_rates = False
@ -45,11 +46,14 @@ es = " "
erase_str = "\33[2K\r" erase_str = "\33[2K\r"
def listen(configdir, verbosity = 0, quietness = 0, allowed = [], display_identity = False, def listen(configdir, verbosity = 0, quietness = 0, allowed = [], display_identity = False,
limit = None, disable_auth = None, fetch_allowed = False, jail = None, save = None, announce = False): limit = None, disable_auth = None, fetch_allowed = False, no_compress=False,
global allow_all, allow_fetch, allowed_identity_hashes, fetch_jail, save_path jail = None, save = None, announce = False):
global allow_all, allow_fetch, allowed_identity_hashes, fetch_jail, save_path, fetch_auto_compress
from tempfile import TemporaryFile from tempfile import TemporaryFile
allow_fetch = fetch_allowed allow_fetch = fetch_allowed
fetch_auto_compress = not no_compress
identity = None identity = None
if announce < 0: if announce < 0:
announce = False announce = False
@ -145,7 +149,7 @@ def listen(configdir, verbosity = 0, quietness = 0, allowed = [], display_identi
print("Warning: No allowed identities configured, rncp will not accept any files!") print("Warning: No allowed identities configured, rncp will not accept any files!")
def fetch_request(path, data, request_id, link_id, remote_identity, requested_at): def fetch_request(path, data, request_id, link_id, remote_identity, requested_at):
global allow_fetch, fetch_jail global allow_fetch, fetch_jail, fetch_auto_compress
if not allow_fetch: if not allow_fetch:
return REQ_FETCH_NOT_ALLOWED return REQ_FETCH_NOT_ALLOWED
@ -185,7 +189,7 @@ def listen(configdir, verbosity = 0, quietness = 0, allowed = [], display_identi
temp_file.write(real_file.read()) temp_file.write(real_file.read())
temp_file.seek(0) temp_file.seek(0)
fetch_resource = RNS.Resource(temp_file, target_link) fetch_resource = RNS.Resource(temp_file, target_link, auto_compress=fetch_auto_compress)
return True return True
else: else:
return None return None
@ -441,6 +445,7 @@ def fetch(configdir, verbosity = 0, quietness = 0, destination = None, file = No
resource_resolved = False resource_resolved = False
resource_status = "unrequested" resource_status = "unrequested"
current_resource = None current_resource = None
current_transfer_started = None
def request_response(request_receipt): def request_response(request_receipt):
nonlocal request_resolved, request_status nonlocal request_resolved, request_status
if request_receipt.response == False: if request_receipt.response == False:
@ -460,10 +465,11 @@ def fetch(configdir, verbosity = 0, quietness = 0, destination = None, file = No
request_resolved = True request_resolved = True
def fetch_resource_started(resource): def fetch_resource_started(resource):
nonlocal resource_status nonlocal resource_status, current_transfer_started
current_resource = resource current_resource = resource
current_resource.progress_callback(sender_progress) current_resource.progress_callback(sender_progress)
resource_status = "started" resource_status = "started"
if not current_transfer_started: current_transfer_started = time.time()
def fetch_resource_concluded(resource): def fetch_resource_concluded(resource):
nonlocal resource_resolved, resource_status nonlocal resource_resolved, resource_status
@ -558,6 +564,10 @@ def fetch(configdir, verbosity = 0, quietness = 0, destination = None, file = No
if prg != 1.0: if prg != 1.0:
print(f"{erase_str}Transferring file {syms[i]} {stat_str}", end=es) print(f"{erase_str}Transferring file {syms[i]} {stat_str}", end=es)
else: else:
end_time = time.time(); delta_time = end_time - current_transfer_started
speed = current_resource.total_size/delta_time; dt_str = RNS.prettytime(delta_time)
ss = size_str(speed, "b")
stat_str = f"{percent}% - {ps} of {ts} in {dt_str} - {ss}ps{phy_str}"
print(f"{erase_str}Transfer complete {stat_str}", end=es) print(f"{erase_str}Transfer complete {stat_str}", end=es)
else: else:
print(f"{erase_str}Waiting for transfer to start {syms[i]} ", end=es) print(f"{erase_str}Waiting for transfer to start {syms[i]} ", end=es)
@ -604,7 +614,7 @@ def send(configdir, verbosity = 0, quietness = 0, destination = None, file = Non
file_path = os.path.expanduser(file) file_path = os.path.expanduser(file)
if not os.path.isfile(file_path): if not os.path.isfile(file_path):
print("File not found") print("File not found")
RNS.exit(1) sys.exit(1)
temp_file = TemporaryFile() temp_file = TemporaryFile()
real_file = open(file_path, "rb") real_file = open(file_path, "rb")
@ -817,6 +827,7 @@ def main():
quietness=args.quiet, quietness=args.quiet,
allowed = args.allowed, allowed = args.allowed,
fetch_allowed = args.allow_fetch, fetch_allowed = args.allow_fetch,
no_compress = args.no_compress,
jail = args.jail, jail = args.jail,
save = args.save, save = args.save,
display_identity=args.print_identity, display_identity=args.print_identity,