finished qm symbols / sessions
This commit is contained in:
parent
34671ea427
commit
52436c69b2
6 changed files with 77 additions and 29 deletions
|
|
@ -32,8 +32,8 @@ export const QM_CONFIG = {
|
|||
|
||||
// Session management settings
|
||||
export const SESSION_CONFIG = {
|
||||
MIN_SESSIONS: 2,
|
||||
MAX_SESSIONS: 5,
|
||||
MIN_SESSIONS: 50,
|
||||
MAX_SESSIONS: 100,
|
||||
MAX_FAILED_CALLS: 3,
|
||||
SESSION_TIMEOUT: 5000, // 10 seconds
|
||||
API_TIMEOUT: 30000, // 15 seconds
|
||||
|
|
|
|||
|
|
@ -69,23 +69,59 @@ export class QMSessionManager {
|
|||
* Get a random session for the given session ID
|
||||
*/
|
||||
async getSession(sessionId: string): Promise<QMSession | null> {
|
||||
// Always load fresh data from cache
|
||||
await this.loadFromCache();
|
||||
let retries = 3;
|
||||
let session: QMSession | null = null;
|
||||
|
||||
const sessions = this.sessionCache[sessionId];
|
||||
if (!sessions || sessions.length === 0) {
|
||||
return null;
|
||||
}
|
||||
while (retries > 0 && !session) {
|
||||
// Always load fresh data from cache
|
||||
await this.loadFromCache();
|
||||
|
||||
const sessions = this.sessionCache[sessionId];
|
||||
|
||||
if (!sessions || sessions.length === 0) {
|
||||
retries--;
|
||||
if (retries > 0) {
|
||||
this.logger?.debug(`No sessions found for ${sessionId}, retrying... (${retries} attempts left)`);
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
continue;
|
||||
}
|
||||
|
||||
this.logger?.error(`No sessions found for sessionId: ${sessionId}`, {
|
||||
availableSessionIds: Object.keys(this.sessionCache),
|
||||
sessionCounts: Object.entries(this.sessionCache).map(([id, s]) => ({ id, count: s.length })),
|
||||
});
|
||||
return null;
|
||||
}
|
||||
|
||||
// Filter out sessions with excessive failures
|
||||
const validSessions = sessions.filter(
|
||||
session => session.failedCalls <= SESSION_CONFIG.MAX_FAILED_CALLS
|
||||
);
|
||||
if (validSessions.length === 0) {
|
||||
return null;
|
||||
}
|
||||
// Filter out sessions with excessive failures
|
||||
const validSessions = sessions.filter(
|
||||
session => session.failedCalls <= SESSION_CONFIG.MAX_FAILED_CALLS
|
||||
);
|
||||
|
||||
if (validSessions.length === 0) {
|
||||
retries--;
|
||||
if (retries > 0) {
|
||||
this.logger?.debug(`No valid sessions after filtering, retrying... (${retries} attempts left)`);
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
continue;
|
||||
}
|
||||
|
||||
this.logger?.error(`No valid sessions after filtering for sessionId: ${sessionId}`, {
|
||||
totalSessions: sessions.length,
|
||||
maxFailedCalls: SESSION_CONFIG.MAX_FAILED_CALLS,
|
||||
});
|
||||
return null;
|
||||
}
|
||||
|
||||
return validSessions[Math.floor(Math.random() * validSessions.length)];
|
||||
session = validSessions[Math.floor(Math.random() * validSessions.length)];
|
||||
this.logger?.trace(`Selected session`, {
|
||||
uuid: session.uuid,
|
||||
failedCalls: session.failedCalls,
|
||||
successfulCalls: session.successfulCalls,
|
||||
});
|
||||
}
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -200,6 +236,7 @@ export class QMSessionManager {
|
|||
return stats;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Mark manager as initialized (deprecated - we always load from cache now)
|
||||
*/
|
||||
|
|
@ -231,7 +268,12 @@ export class QMSessionManager {
|
|||
const listKey = `qm:sessions:${sessionType.toLowerCase()}:list`;
|
||||
const sessionIds = await this.cacheProvider.get<string[]>(listKey);
|
||||
|
||||
this.logger?.trace(`Loading ${sessionType} sessions`, { sessionIds });
|
||||
this.logger?.trace(`Loading ${sessionType} sessions`, {
|
||||
sessionType,
|
||||
sessionId,
|
||||
listKey,
|
||||
sessionIds
|
||||
});
|
||||
|
||||
if (sessionIds && Array.isArray(sessionIds)) {
|
||||
const sessions: QMSession[] = [];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue