Enhance job logging by adding current job state information and improve error handling in job calculations
This commit is contained in:
@ -2,6 +2,7 @@ from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import textwrap
|
||||
from pprint import pformat
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import discord
|
||||
@ -48,6 +49,7 @@ class RemindBotClient(discord.Client):
|
||||
async def setup_hook(self) -> None:
|
||||
"""Setup the bot."""
|
||||
settings.scheduler.start()
|
||||
log_current_jobs()
|
||||
|
||||
try:
|
||||
self.tree.copy_global_to(guild=GUILD_ID)
|
||||
@ -311,20 +313,8 @@ class JobManagementView(discord.ui.View):
|
||||
job_kwargs: dict = self.job.kwargs or {}
|
||||
|
||||
logger.info("Deleting job: %s", self.job.id)
|
||||
logger.info("\tTrigger time: %s %s", self.job.next_run_time, calculate(self.job))
|
||||
logger.info("\tMessage: %s", self.job.kwargs.get("message", "N/A"))
|
||||
logger.info("\tChannel: <#%s>", self.job.kwargs.get("channel_id", 0))
|
||||
logger.info("\tCreated by: %s", self.job.kwargs.get("author_id", 0))
|
||||
logger.info("\tIn guild: %s", self.job.kwargs.get("guild_id", 0))
|
||||
logger.info("\tTo Discord user: %s", self.job.kwargs.get("user_id", 0))
|
||||
logger.info("\tFunction: %s", self.job.func)
|
||||
logger.info("\tTrigger: %s", self.job.trigger)
|
||||
logger.info("\tExecutor: %s", self.job.executor)
|
||||
logger.info("\tArgs: %s", self.job.args)
|
||||
logger.info("\tName: %s", self.job.name)
|
||||
logger.info("\tMisfire grace time: %s", self.job.misfire_grace_time)
|
||||
logger.info("\tCoalesce: %s", self.job.coalesce)
|
||||
logger.info("\tMax instances: %s", self.job.max_instances)
|
||||
if hasattr(self.job, "__getstate__"):
|
||||
logger.error("State: %s", self.job.__getstate__() if hasattr(self.job, "__getstate__") else "No state")
|
||||
|
||||
# Log extra kwargs
|
||||
for key, value in job_kwargs.items():
|
||||
@ -418,6 +408,10 @@ class JobManagementView(discord.ui.View):
|
||||
interaction: The interaction object for the command.
|
||||
button: The button that was clicked.
|
||||
"""
|
||||
logger.info("Modifying job: %s", self.job.id)
|
||||
if hasattr(self.job, "__getstate__"):
|
||||
logger.error("State: %s", self.job.__getstate__() if hasattr(self.job, "__getstate__") else "No state")
|
||||
|
||||
modal = ModifyJobModal(self.job, self.scheduler)
|
||||
await interaction.response.send_modal(modal)
|
||||
|
||||
@ -534,5 +528,20 @@ async def send_to_user(user_id: int, guild_id: int, message: str) -> None:
|
||||
await member.send(message)
|
||||
|
||||
|
||||
def log_current_jobs() -> None:
|
||||
"""Log the current jobs."""
|
||||
jobs: list[Job] = settings.scheduler.get_jobs()
|
||||
if not jobs:
|
||||
logger.info("No jobs available.")
|
||||
return
|
||||
|
||||
for job in jobs:
|
||||
logger.debug("Job: %s", job)
|
||||
|
||||
state = {} if not hasattr(job, "__getstate__") else job.__getstate__()
|
||||
if state:
|
||||
logger.debug("State:\n%s", pformat(state))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bot.run(settings.bot_token, root_logger=True)
|
||||
|
@ -27,6 +27,7 @@ def calculate(job: Job) -> str:
|
||||
)
|
||||
if trigger_time is None:
|
||||
logger.error("Couldn't calculate time for job: %s: %s", job.id, job.name)
|
||||
logger.error("State: %s", job.__getstate__() if hasattr(job, "__getstate__") else "No state")
|
||||
return "Couldn't calculate time"
|
||||
|
||||
return f"<t:{int(trigger_time.timestamp())}:R>"
|
||||
|
Reference in New Issue
Block a user