From d87a58a51b5ee56167947de2b893e69097bd4890 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 26 Oct 2023 13:21:49 +0200 Subject: [PATCH] Squelch excessive kivy/jnius logging on Android. Live toggle debug logging for RNS and Sideband. --- sbapp/main.py | 36 +++++++++++++-------- sbapp/services/sidebandservice.py | 14 +++++++++ sbapp/sideband/core.py | 52 ++++++++++++++++++++++++------- 3 files changed, 78 insertions(+), 24 deletions(-) diff --git a/sbapp/main.py b/sbapp/main.py index b807a7c..3ee5e3e 100644 --- a/sbapp/main.py +++ b/sbapp/main.py @@ -5,7 +5,7 @@ __variant__ = "beta" import sys import argparse -parser = argparse.ArgumentParser(description="Reticulum Network Stack Daemon") +parser = argparse.ArgumentParser(description="Sideband LXMF Client") parser.add_argument("-v", "--verbose", action='store_true', default=False, help="increase logging verbosity") parser.add_argument("--version", action="version", version="sideband {version}".format(version=__version__)) args = parser.parse_args() @@ -21,6 +21,27 @@ import threading import RNS.vendor.umsgpack as msgpack from kivy.logger import Logger, LOG_LEVELS + +# Squelch excessive method signature logging +class redirect_log(): + def isEnabledFor(self, arg): + return False + def debug(self, arg): + pass + def trace(self, arg): + pass + def warning(self, arg): + RNS.log("Kivy error: "+str(arg), RNS.LOG_WARNING) + def critical(self, arg): + RNS.log("Kivy error: "+str(arg), RNS.LOG_ERROR) + +if RNS.vendor.platformutils.get_platform() == "android": + import jnius.reflect + def mod(method, name, signature): + pass + jnius.reflect.log_method = mod + jnius.reflect.log = redirect_log() + if __debug_build__ or args.verbose: Logger.setLevel(LOG_LEVELS["debug"]) else: @@ -52,18 +73,6 @@ from mapview import CustomMapMarker from mapview.mbtsource import MBTilesMapSource from mapview.source import MapSource -class redirect_log(): - def isEnabledFor(self, arg): - return False - def debug(self, arg): - pass - def trace(self, arg): - pass - def warning(self, arg): - RNS.log("Kivy error: "+str(arg), RNS.LOG_WARNING) - def critical(self, arg): - RNS.log("Kivy error: "+str(arg), RNS.LOG_ERROR) - import kivy.core.image kivy.core.image.Logger = redirect_log() @@ -1388,6 +1397,7 @@ class SidebandApp(MDApp): def save_debug(sender=None, event=None): self.sideband.config["debug"] = self.settings_screen.ids.settings_debug.active self.sideband.save_configuration() + self.sideband._reticulum_log_debug(self.sideband.config["debug"]) def save_print_command(sender=None, event=None): if not sender.focus: diff --git a/sbapp/services/sidebandservice.py b/sbapp/services/sidebandservice.py index 4d315c3..9df9b92 100644 --- a/sbapp/services/sidebandservice.py +++ b/sbapp/services/sidebandservice.py @@ -13,6 +13,20 @@ else: if RNS.vendor.platformutils.get_platform() == "android": from jnius import autoclass, cast + + # Squelch excessive method signature logging + import jnius.reflect + class redirect_log(): + def isEnabledFor(self, arg): + return False + def debug(self, arg): + pass + def mod(method, name, signature): + pass + jnius.reflect.log_method = mod + jnius.reflect.log = redirect_log() + ############################################ + from android import python_act android_api_version = autoclass('android.os.Build$VERSION').SDK_INT diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py index a423092..685d2ca 100644 --- a/sbapp/sideband/core.py +++ b/sbapp/sideband/core.py @@ -18,13 +18,18 @@ from .sense import Telemeter if RNS.vendor.platformutils.get_platform() == "android": from jnius import autoclass, cast + # Squelch excessive method signature logging import jnius.reflect class redirect_log(): def isEnabledFor(self, arg): return False def debug(self, arg): pass + def mod(method, name, signature): + pass + jnius.reflect.log_method = mod jnius.reflect.log = redirect_log() + ############################################ class PropagationNodeDetector(): @@ -852,9 +857,6 @@ class SidebandCore(): return self.getstate("app.active_conversation") def setstate(self, prop, val): - # TODO: remove - # us = time.time() - if not RNS.vendor.platformutils.is_android(): self.getstate_cache[prop] = val self._db_setstate(prop, val) @@ -868,13 +870,6 @@ class SidebandCore(): self.rpc_connection = multiprocessing.connection.Client(self.rpc_addr, authkey=self.rpc_key) self.rpc_connection.send({"setstate": (prop, val)}) response = self.rpc_connection.recv() - - # TODO: Remove - # if response: - # RNS.log("RPC setstate SUCCESS for "+str(prop)+"="+str(val)+" in "+RNS.prettytime(time.time()-us), RNS.LOG_WARNING) - # else: - # RNS.log("RPC setstate FAIL for "+str(prop)+"="+str(val)+" in "+RNS.prettytime(time.time()-us), RNS.LOG_WARNING) - return response except Exception as e: RNS.log("Error while setting state over RPC: "+str(e), RNS.LOG_DEBUG) @@ -899,6 +894,27 @@ class SidebandCore(): RNS.log("Error while setting telemetry over RPC: "+str(e), RNS.LOG_DEBUG) return False + def service_rpc_set_debug(self, debug): + if not RNS.vendor.platformutils.is_android(): + pass + else: + if self.is_service: + if debug: + RNS.loglevel = 7 + else: + RNS.loglevel = 2 + return True + else: + try: + if self.rpc_connection == None: + self.rpc_connection = multiprocessing.connection.Client(self.rpc_addr, authkey=self.rpc_key) + self.rpc_connection.send({"set_debug": debug}) + response = self.rpc_connection.recv() + return response + except Exception as e: + RNS.log("Error while setting log level over RPC: "+str(e), RNS.LOG_DEBUG) + return False + def getstate(self, prop, allow_cache=False): # TODO: remove # us = time.time() @@ -960,6 +976,10 @@ class SidebandCore(): self.latest_telemetry = t self.latest_packed_telemetry = p connection.send(True) + elif "set_debug" in call: + self.service_rpc_set_debug(call["set_debug"]) + connection.send(True) + except Exception as e: RNS.log("Error on client RPC connection: "+str(e), RNS.LOG_ERROR) connection.close() @@ -2198,7 +2218,17 @@ class SidebandCore(): self.interface_local = None self.interface_local_adding = False - + def _reticulum_log_debug(self, debug=False): + self.log_verbose = debug + if self.log_verbose: + selected_level = 7 + else: + selected_level = 2 + + RNS.loglevel = selected_level + if self.is_client: + self.service_rpc_set_debug(debug) + def __start_jobs_immediate(self): if self.log_verbose: selected_level = 7