Squelch excessive kivy/jnius logging on Android. Live toggle debug logging for RNS and Sideband.

This commit is contained in:
Mark Qvist 2023-10-26 13:21:49 +02:00
parent f531b2ecaa
commit d87a58a51b
3 changed files with 78 additions and 24 deletions

View File

@ -5,7 +5,7 @@ __variant__ = "beta"
import sys import sys
import argparse 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("-v", "--verbose", action='store_true', default=False, help="increase logging verbosity")
parser.add_argument("--version", action="version", version="sideband {version}".format(version=__version__)) parser.add_argument("--version", action="version", version="sideband {version}".format(version=__version__))
args = parser.parse_args() args = parser.parse_args()
@ -21,6 +21,27 @@ import threading
import RNS.vendor.umsgpack as msgpack import RNS.vendor.umsgpack as msgpack
from kivy.logger import Logger, LOG_LEVELS 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: if __debug_build__ or args.verbose:
Logger.setLevel(LOG_LEVELS["debug"]) Logger.setLevel(LOG_LEVELS["debug"])
else: else:
@ -52,18 +73,6 @@ from mapview import CustomMapMarker
from mapview.mbtsource import MBTilesMapSource from mapview.mbtsource import MBTilesMapSource
from mapview.source import MapSource 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 import kivy.core.image
kivy.core.image.Logger = redirect_log() kivy.core.image.Logger = redirect_log()
@ -1388,6 +1397,7 @@ class SidebandApp(MDApp):
def save_debug(sender=None, event=None): def save_debug(sender=None, event=None):
self.sideband.config["debug"] = self.settings_screen.ids.settings_debug.active self.sideband.config["debug"] = self.settings_screen.ids.settings_debug.active
self.sideband.save_configuration() self.sideband.save_configuration()
self.sideband._reticulum_log_debug(self.sideband.config["debug"])
def save_print_command(sender=None, event=None): def save_print_command(sender=None, event=None):
if not sender.focus: if not sender.focus:

View File

@ -13,6 +13,20 @@ else:
if RNS.vendor.platformutils.get_platform() == "android": if RNS.vendor.platformutils.get_platform() == "android":
from jnius import autoclass, cast 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 from android import python_act
android_api_version = autoclass('android.os.Build$VERSION').SDK_INT android_api_version = autoclass('android.os.Build$VERSION').SDK_INT

View File

@ -18,13 +18,18 @@ from .sense import Telemeter
if RNS.vendor.platformutils.get_platform() == "android": if RNS.vendor.platformutils.get_platform() == "android":
from jnius import autoclass, cast from jnius import autoclass, cast
# Squelch excessive method signature logging
import jnius.reflect import jnius.reflect
class redirect_log(): class redirect_log():
def isEnabledFor(self, arg): def isEnabledFor(self, arg):
return False return False
def debug(self, arg): def debug(self, arg):
pass pass
def mod(method, name, signature):
pass
jnius.reflect.log_method = mod
jnius.reflect.log = redirect_log() jnius.reflect.log = redirect_log()
############################################
class PropagationNodeDetector(): class PropagationNodeDetector():
@ -852,9 +857,6 @@ class SidebandCore():
return self.getstate("app.active_conversation") return self.getstate("app.active_conversation")
def setstate(self, prop, val): def setstate(self, prop, val):
# TODO: remove
# us = time.time()
if not RNS.vendor.platformutils.is_android(): if not RNS.vendor.platformutils.is_android():
self.getstate_cache[prop] = val self.getstate_cache[prop] = val
self._db_setstate(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 = multiprocessing.connection.Client(self.rpc_addr, authkey=self.rpc_key)
self.rpc_connection.send({"setstate": (prop, val)}) self.rpc_connection.send({"setstate": (prop, val)})
response = self.rpc_connection.recv() 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 return response
except Exception as e: except Exception as e:
RNS.log("Error while setting state over RPC: "+str(e), RNS.LOG_DEBUG) 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) RNS.log("Error while setting telemetry over RPC: "+str(e), RNS.LOG_DEBUG)
return False 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): def getstate(self, prop, allow_cache=False):
# TODO: remove # TODO: remove
# us = time.time() # us = time.time()
@ -960,6 +976,10 @@ class SidebandCore():
self.latest_telemetry = t self.latest_telemetry = t
self.latest_packed_telemetry = p self.latest_packed_telemetry = p
connection.send(True) connection.send(True)
elif "set_debug" in call:
self.service_rpc_set_debug(call["set_debug"])
connection.send(True)
except Exception as e: except Exception as e:
RNS.log("Error on client RPC connection: "+str(e), RNS.LOG_ERROR) RNS.log("Error on client RPC connection: "+str(e), RNS.LOG_ERROR)
connection.close() connection.close()
@ -2198,7 +2218,17 @@ class SidebandCore():
self.interface_local = None self.interface_local = None
self.interface_local_adding = False 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): def __start_jobs_immediate(self):
if self.log_verbose: if self.log_verbose:
selected_level = 7 selected_level = 7