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 logging
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from pprint import pformat
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
@ -48,6 +49,7 @@ class RemindBotClient(discord.Client):
|
|||||||
async def setup_hook(self) -> None:
|
async def setup_hook(self) -> None:
|
||||||
"""Setup the bot."""
|
"""Setup the bot."""
|
||||||
settings.scheduler.start()
|
settings.scheduler.start()
|
||||||
|
log_current_jobs()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.tree.copy_global_to(guild=GUILD_ID)
|
self.tree.copy_global_to(guild=GUILD_ID)
|
||||||
@ -311,20 +313,8 @@ class JobManagementView(discord.ui.View):
|
|||||||
job_kwargs: dict = self.job.kwargs or {}
|
job_kwargs: dict = self.job.kwargs or {}
|
||||||
|
|
||||||
logger.info("Deleting job: %s", self.job.id)
|
logger.info("Deleting job: %s", self.job.id)
|
||||||
logger.info("\tTrigger time: %s %s", self.job.next_run_time, calculate(self.job))
|
if hasattr(self.job, "__getstate__"):
|
||||||
logger.info("\tMessage: %s", self.job.kwargs.get("message", "N/A"))
|
logger.error("State: %s", self.job.__getstate__() if hasattr(self.job, "__getstate__") else "No state")
|
||||||
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)
|
|
||||||
|
|
||||||
# Log extra kwargs
|
# Log extra kwargs
|
||||||
for key, value in job_kwargs.items():
|
for key, value in job_kwargs.items():
|
||||||
@ -418,6 +408,10 @@ class JobManagementView(discord.ui.View):
|
|||||||
interaction: The interaction object for the command.
|
interaction: The interaction object for the command.
|
||||||
button: The button that was clicked.
|
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)
|
modal = ModifyJobModal(self.job, self.scheduler)
|
||||||
await interaction.response.send_modal(modal)
|
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)
|
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__":
|
if __name__ == "__main__":
|
||||||
bot.run(settings.bot_token, root_logger=True)
|
bot.run(settings.bot_token, root_logger=True)
|
||||||
|
@ -27,6 +27,7 @@ def calculate(job: Job) -> str:
|
|||||||
)
|
)
|
||||||
if trigger_time is None:
|
if trigger_time is None:
|
||||||
logger.error("Couldn't calculate time for job: %s: %s", job.id, job.name)
|
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 "Couldn't calculate time"
|
||||||
|
|
||||||
return f"<t:{int(trigger_time.timestamp())}:R>"
|
return f"<t:{int(trigger_time.timestamp())}:R>"
|
||||||
|
Reference in New Issue
Block a user