Fix session cleanup cutoff timezone (#2488)

This commit is contained in:
1jsjs
2026-06-05 16:52:34 +09:00
committed by GitHub
parent 17b62a3dba
commit 3ef73013eb
2 changed files with 36 additions and 2 deletions

View File

@@ -14,7 +14,7 @@ import logging
from datetime import datetime, timezone, timedelta from datetime import datetime, timezone, timedelta
from typing import Dict, Optional from typing import Dict, Optional
from .database import Session as DbSession, ChatMessage as DbChatMessage, Document as DbDocument, SessionLocal from .database import Session as DbSession, ChatMessage as DbChatMessage, Document as DbDocument, SessionLocal, utcnow_naive
from .models import Session, ChatMessage from .models import Session, ChatMessage
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -619,7 +619,7 @@ class SessionManager:
try: try:
all_sessions = db.query(DbSession).all() all_sessions = db.query(DbSession).all()
cutoff_date = datetime.now(timezone.utc) - timedelta(days=auto_archive_days) cutoff_date = utcnow_naive() - timedelta(days=auto_archive_days)
for db_session in all_sessions: for db_session in all_sessions:
stats['total_checked'] += 1 stats['total_checked'] += 1

View File

@@ -0,0 +1,34 @@
from datetime import datetime
from types import SimpleNamespace
from unittest.mock import MagicMock
from core.session_manager import SessionManager
import core.session_manager as SM
def _manager_with(sessions=None):
manager = SessionManager.__new__(SessionManager)
manager.sessions = dict(sessions or {})
return manager
def test_cleanup_empty_sessions_archives_old_naive_last_accessed(monkeypatch):
old_session = SimpleNamespace(
id="old-chat",
archived=False,
last_accessed=datetime(2026, 5, 1, 12, 0, 0),
message_count=3,
is_important=False,
)
db = MagicMock()
db.query.return_value.all.return_value = [old_session]
monkeypatch.setattr(SM, "SessionLocal", lambda: db)
monkeypatch.setattr(SM, "utcnow_naive", lambda: datetime(2026, 6, 4, 12, 0, 0))
stats = _manager_with().cleanup_empty_sessions(auto_archive_days=30)
assert old_session.archived is True
assert stats == {"deleted_empty": 0, "archived_old": 1, "total_checked": 1}
db.commit.assert_called_once()
db.rollback.assert_not_called()