remove old sessions

This commit is contained in:
Boki 2025-06-29 17:17:49 -04:00
parent 8f1613697c
commit bb16a52bf7

View file

@ -70,9 +70,11 @@ export class QMSessionManager {
// Get all sessions for this session type // Get all sessions for this session type
const sessions = await this.getSessions(sessionId); 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( 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}`, { this.logger?.trace(`Found ${validSessions.length} valid sessions for ${sessionId}`, {
@ -193,11 +195,15 @@ export class QMSessionManager {
*/ */
async getSessionCount(sessionId: string): Promise<number> { async getSessionCount(sessionId: string): Promise<number> {
const sessions = await this.getSessions(sessionId); 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<number> { async cleanupFailedSessions(): Promise<number> {
if (!this.cacheProvider) { if (!this.cacheProvider) {
@ -213,15 +219,22 @@ export class QMSessionManager {
const updatedList: string[] = []; const updatedList: string[] = [];
for (const session of sessions) { for (const session of sessions) {
if ((session.failedCalls || 0) > SESSION_CONFIG.MAX_FAILED_CALLS) { const tenMinutesAgo = new Date(Date.now() - 10 * 60 * 1000);
// Delete the failed session 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}`; const sessionKey = `qm:sessions:${sessionType.toLowerCase()}:${session.uuid}`;
await this.cacheProvider.del(sessionKey); await this.cacheProvider.del(sessionKey);
removedCount++; removedCount++;
this.logger?.info(`Removed failed session`, { this.logger?.info(`Removed ${isFailed ? 'failed' : 'stale'} session`, {
sessionType, sessionType,
uuid: session.uuid, uuid: session.uuid,
failedCalls: session.failedCalls failedCalls: session.failedCalls,
lastUsed: session.lastUsed,
isStale,
isFailed
}); });
} else { } else {
updatedList.push(session.uuid); updatedList.push(session.uuid);