qm fully refactored and ready for more
This commit is contained in:
parent
ab0b7a5385
commit
24fda247aa
5 changed files with 36 additions and 48 deletions
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
import { OperationContext } from '@stock-bot/utils';
|
||||
import { QueueManager } from '@stock-bot/queue';
|
||||
import type { Logger } from '@stock-bot/logger';
|
||||
|
||||
import { QMSessionManager } from '../shared/session-manager';
|
||||
import { QM_SESSION_IDS } from '../shared/config';
|
||||
|
|
@ -13,10 +12,9 @@ import { initializeQMResources } from './session.operations';
|
|||
import { searchQMSymbolsAPI } from './symbols.operations';
|
||||
|
||||
export async function spiderSymbolSearch(
|
||||
payload: SymbolSpiderJob,
|
||||
parentLogger?: Logger
|
||||
payload: SymbolSpiderJob
|
||||
): Promise<SpiderResult> {
|
||||
const ctx = OperationContext.create('qm', 'spider', parentLogger);
|
||||
const ctx = OperationContext.create('qm', 'spider');
|
||||
|
||||
try {
|
||||
const { prefix, depth, source = 'qm', maxDepth = 4 } = payload;
|
||||
|
|
@ -39,7 +37,7 @@ export async function spiderSymbolSearch(
|
|||
// Ensure resources are initialized
|
||||
const sessionManager = QMSessionManager.getInstance();
|
||||
if (!sessionManager.getInitialized()) {
|
||||
await initializeQMResources(parentLogger);
|
||||
await initializeQMResources();
|
||||
}
|
||||
|
||||
let result: SpiderResult;
|
||||
|
|
@ -55,16 +53,20 @@ export async function spiderSymbolSearch(
|
|||
// Cache the result
|
||||
await ctx.cache.set(cacheKey, result, { ttl: 3600 });
|
||||
|
||||
// Store spider operation metrics in PostgreSQL
|
||||
if (ctx.postgres) {
|
||||
try {
|
||||
await ctx.postgres.query(
|
||||
'INSERT INTO spider_stats (handler, operation, prefix, depth, symbols_found, jobs_created, search_time) VALUES ($1, $2, $3, $4, $5, $6, $7)',
|
||||
['qm', 'spider', prefix || 'ROOT', depth, result.symbolsFound, result.jobsCreated, new Date()]
|
||||
);
|
||||
} catch (error) {
|
||||
ctx.logger.warn('Failed to store spider stats in PostgreSQL', { error });
|
||||
}
|
||||
// Store spider operation metrics in cache instead of PostgreSQL for now
|
||||
try {
|
||||
const statsKey = `spider-stats:${prefix || 'ROOT'}:${depth}:${Date.now()}`;
|
||||
await ctx.cache.set(statsKey, {
|
||||
handler: 'qm',
|
||||
operation: 'spider',
|
||||
prefix: prefix || 'ROOT',
|
||||
depth,
|
||||
symbolsFound: result.symbolsFound,
|
||||
jobsCreated: result.jobsCreated,
|
||||
searchTime: new Date().toISOString()
|
||||
}, { ttl: 86400 }); // Keep for 24 hours
|
||||
} catch (error) {
|
||||
ctx.logger.debug('Failed to store spider stats in cache', { error });
|
||||
}
|
||||
|
||||
ctx.logger.info('Spider search completed', {
|
||||
|
|
@ -162,14 +164,14 @@ async function searchAndSpawnJobs(
|
|||
if (!lookupSession) {
|
||||
ctx.logger.info('No lookup sessions available, creating sessions first...');
|
||||
const { createSessions } = await import('./session.operations');
|
||||
await createSessions(ctx.logger);
|
||||
await createSessions();
|
||||
|
||||
// Wait a bit for session creation
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
}
|
||||
|
||||
// Search for symbols with this prefix
|
||||
const symbols = await searchQMSymbolsAPI(prefix, ctx.logger);
|
||||
const symbols = await searchQMSymbolsAPI(prefix);
|
||||
const symbolCount = symbols.length;
|
||||
|
||||
ctx.logger.info(`Prefix "${prefix}" returned ${symbolCount} symbols`);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue