From 9889fd0da826f8e60fee82f268fad2ee9b5ab1ed Mon Sep 17 00:00:00 2001 From: SpudGunMan Date: Sat, 25 Oct 2025 18:29:45 -0700 Subject: [PATCH] logs --- modules/scheduler.py | 32 ++++++++++++++++++++++++++++++++ modules/system.py | 8 ++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/modules/scheduler.py b/modules/scheduler.py index 4eeacc9..93900db 100644 --- a/modules/scheduler.py +++ b/modules/scheduler.py @@ -2,6 +2,7 @@ # Scheduler setup for Mesh Bot import asyncio import schedule +from datetime import datetime from modules.log import logger from modules.settings import MOTD from modules.system import send_message @@ -9,8 +10,14 @@ from modules.system import send_message async def run_scheduler_loop(interval=1): logger.debug("System: Scheduler loop started") try: + last_logged_minute = -1 while True: try: + # Log scheduled jobs every 20 minutes + now = datetime.now() + if now.minute % 20 == 0 and now.minute != last_logged_minute: + logger.debug(f"System: Scheduled Tasks {len(schedule.jobs)}, Details:{extract_schedule_fields(schedule.get_jobs())}") + last_logged_minute = now.minute schedule.run_pending() except Exception as e: logger.error(f"System: Scheduler loop exception: {e}") @@ -25,6 +32,31 @@ def safe_int(val, default=0, type=""): logger.debug(f"System: Scheduler config {type} error '{val}' to int, using default {default}") return default +def extract_schedule_fields(jobs): + """ + Extracts 'Every ... (last run: [...], next run: ...)' from schedule.get_jobs() output without regex. + """ + jobs_str = str(jobs) + results = [] + # Split by '), ' to separate jobs, then add ')' back except last + parts = jobs_str.split('), ') + for i, part in enumerate(parts): + if not part.endswith(')'): + part += ')' + # Find the start of 'Every' + start = part.find('Every') + if start != -1: + # Find the start of 'do ()' + do_idx = part.find('do ()') + if do_idx != -1: + summary = part[start:do_idx].strip() + # Find the (last run: ... next run: ...) part + paren_idx = part.find('(', do_idx) + if paren_idx != -1: + summary += ' ' + part[paren_idx:].strip() + results.append(summary) + return results + def setup_scheduler( schedulerMotd, MOTD, schedulerMessage, schedulerChannel, schedulerInterface, schedulerValue, schedulerTime, schedulerInterval): diff --git a/modules/system.py b/modules/system.py index efb9f39..c5b20af 100644 --- a/modules/system.py +++ b/modules/system.py @@ -2101,12 +2101,16 @@ async def process_vox_queue(): async def watchdog(): global localTelemetryData, retry_int1, retry_int2, retry_int3, retry_int4, retry_int5, retry_int6, retry_int7, retry_int8, retry_int9 logger.debug("System: Watchdog started") + wd_last_logged_minute = -1 while True: await asyncio.sleep(20) + now = datetime.now() - # perform memory cleanup every 10 minutes - if datetime.now().minute % 10 == 0: + + if now.minute % 20 == 0 and now.minute != wd_last_logged_minute: + # perform memory cleanup every 10 minutes cleanup_memory() + wd_last_logged_minute = now.minute # check all interfaces for i in range(1, 10):