Fix debug logging banner showing negative timer duration

The debug logging banner displayed a negative elapsed time (e.g. "-60m -59s")
  equal to the server's UTC offset. datetime.now() stored local time without a
  timezone indicator, but the frontend's parseUTCDate() interpreted it as UTC.

  Use datetime.now(tz=timezone.utc) consistently for storing, parsing, and
  comparing the enabled_at timestamp.
This commit is contained in:
maziggy
2026-03-11 09:57:34 +01:00
parent a77bfc5e62
commit a0fee9a1b6
2 changed files with 11 additions and 4 deletions
+10 -4
View File
@@ -10,7 +10,7 @@ import os
import platform
import re
import zipfile
from datetime import datetime
from datetime import datetime, timezone
from pathlib import Path
from fastapi import APIRouter, HTTPException, Query
@@ -62,7 +62,13 @@ async def _get_debug_setting(db: AsyncSession) -> tuple[bool, datetime | None]:
enabled_at = None
if enabled_at_setting and enabled_at_setting.value:
try:
<<<<<<< HEAD
enabled_at = datetime.fromisoformat(enabled_at_setting.value).replace(tzinfo=None)
=======
enabled_at = datetime.fromisoformat(enabled_at_setting.value)
if enabled_at.tzinfo is None:
enabled_at = enabled_at.replace(tzinfo=timezone.utc)
>>>>>>> 63208cf ( Fix debug logging banner showing negative timer duration)
except ValueError:
pass # Ignore malformed timestamp; enabled_at stays None
@@ -80,7 +86,7 @@ async def _set_debug_setting(db: AsyncSession, enabled: bool) -> datetime | None
db.add(Settings(key="debug_logging_enabled", value=str(enabled).lower()))
# Update enabled_at timestamp
enabled_at = datetime.now() if enabled else None
enabled_at = datetime.now(tz=timezone.utc) if enabled else None
result = await db.execute(select(Settings).where(Settings.key == "debug_logging_enabled_at"))
at_setting = result.scalar_one_or_none()
if at_setting:
@@ -127,7 +133,7 @@ async def get_debug_logging_state(
duration = None
if enabled and enabled_at:
duration = int((datetime.now() - enabled_at).total_seconds())
duration = int((datetime.now(tz=timezone.utc) - enabled_at).total_seconds())
return DebugLoggingState(
enabled=enabled,
@@ -149,7 +155,7 @@ async def toggle_debug_logging(
duration = None
if toggle.enabled and enabled_at:
duration = int((datetime.now() - enabled_at).total_seconds())
duration = int((datetime.now(tz=timezone.utc) - enabled_at).total_seconds())
return DebugLoggingState(
enabled=toggle.enabled,