From bb16a52bf7bc4ce99af7d84629abe1f1c3f1ef0c Mon Sep 17 00:00:00 2001 From: Boki Date: Sun, 29 Jun 2025 17:17:49 -0400 Subject: [PATCH] remove old sessions --- .../src/handlers/qm/shared/session-manager.ts | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/apps/stock/data-ingestion/src/handlers/qm/shared/session-manager.ts b/apps/stock/data-ingestion/src/handlers/qm/shared/session-manager.ts index e9d9238..4e852eb 100644 --- a/apps/stock/data-ingestion/src/handlers/qm/shared/session-manager.ts +++ b/apps/stock/data-ingestion/src/handlers/qm/shared/session-manager.ts @@ -70,9 +70,11 @@ export class QMSessionManager { // Get all sessions for this session type const sessions = await this.getSessions(sessionId); - // Filter out failed sessions + // Filter out failed and stale sessions + const tenMinutesAgo = new Date(Date.now() - 10 * 60 * 1000); const validSessions = sessions.filter( - session => session.failedCalls <= SESSION_CONFIG.MAX_FAILED_CALLS + session => session.failedCalls <= SESSION_CONFIG.MAX_FAILED_CALLS && + session.lastUsed >= tenMinutesAgo ); this.logger?.trace(`Found ${validSessions.length} valid sessions for ${sessionId}`, { @@ -193,11 +195,15 @@ export class QMSessionManager { */ async getSessionCount(sessionId: string): Promise { const sessions = await this.getSessions(sessionId); - return sessions.filter(s => (s.failedCalls || 0) <= SESSION_CONFIG.MAX_FAILED_CALLS).length; + const tenMinutesAgo = new Date(Date.now() - 10 * 60 * 1000); + return sessions.filter(s => + (s.failedCalls || 0) <= SESSION_CONFIG.MAX_FAILED_CALLS && + s.lastUsed >= tenMinutesAgo + ).length; } /** - * Cleanup failed sessions + * Cleanup failed and stale sessions */ async cleanupFailedSessions(): Promise { if (!this.cacheProvider) { @@ -213,15 +219,22 @@ export class QMSessionManager { const updatedList: string[] = []; for (const session of sessions) { - if ((session.failedCalls || 0) > SESSION_CONFIG.MAX_FAILED_CALLS) { - // Delete the failed session + const tenMinutesAgo = new Date(Date.now() - 10 * 60 * 1000); + const isStale = session.lastUsed < tenMinutesAgo; + const isFailed = (session.failedCalls || 0) > SESSION_CONFIG.MAX_FAILED_CALLS; + + if (isFailed || isStale) { + // Delete the failed or stale session const sessionKey = `qm:sessions:${sessionType.toLowerCase()}:${session.uuid}`; await this.cacheProvider.del(sessionKey); removedCount++; - this.logger?.info(`Removed failed session`, { + this.logger?.info(`Removed ${isFailed ? 'failed' : 'stale'} session`, { sessionType, uuid: session.uuid, - failedCalls: session.failedCalls + failedCalls: session.failedCalls, + lastUsed: session.lastUsed, + isStale, + isFailed }); } else { updatedList.push(session.uuid);