82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import { getLogger } from '@stock-bot/logger';
|
|
import { handlerRegistry, type HandlerConfigWithSchedule } from '@stock-bot/queue';
|
|
import type { SymbolSpiderJob } from './qm.tasks';
|
|
|
|
const logger = getLogger('qm-provider');
|
|
|
|
// Initialize and register the IB provider
|
|
export function initializeQMProvider() {
|
|
logger.info('Registering IB provider with scheduled jobs...');
|
|
|
|
const qmProviderConfig: HandlerConfigWithSchedule = {
|
|
name: 'qm',
|
|
operations: {
|
|
'create-sessions': async () => {
|
|
logger.info('Creating QM sessions...');
|
|
const { createSessions } = await import('./qm.tasks');
|
|
await createSessions();
|
|
logger.info('QM sessions created successfully');
|
|
return { success: true, message: 'QM sessions created successfully' };
|
|
},
|
|
'search-symbols': async () => {
|
|
logger.info('Starting QM symbol search...');
|
|
const { fetchSymbols } = await import('./qm.tasks');
|
|
const symbols = await fetchSymbols();
|
|
|
|
if (symbols && symbols.length > 0) {
|
|
logger.info('QM symbol search completed successfully', { count: symbols.length });
|
|
return {
|
|
success: true,
|
|
message: 'QM symbol search completed successfully',
|
|
count: symbols.length,
|
|
symbols: symbols.slice(0, 10), // Return first 10 symbols as sample
|
|
};
|
|
} else {
|
|
logger.warn('QM symbol search returned no results');
|
|
return {
|
|
success: false,
|
|
message: 'No symbols found',
|
|
count: 0,
|
|
};
|
|
}
|
|
},
|
|
'spider-symbol-search': async (payload: SymbolSpiderJob) => {
|
|
logger.info('Processing spider symbol search job', { payload });
|
|
const { spiderSymbolSearch } = await import('./qm.tasks');
|
|
const result = await spiderSymbolSearch(payload);
|
|
|
|
logger.info('Spider search job completed', {
|
|
success: result.success,
|
|
symbolsFound: result.symbolsFound,
|
|
jobsCreated: result.jobsCreated,
|
|
payload,
|
|
});
|
|
|
|
return result;
|
|
},
|
|
},
|
|
|
|
scheduledJobs: [
|
|
{
|
|
type: 'session-management',
|
|
operation: 'create-sessions',
|
|
payload: {},
|
|
cronPattern: '*/15 * * * * *', // Every minute
|
|
priority: 7,
|
|
immediately: true,
|
|
description: 'Create and maintain QM sessions',
|
|
},
|
|
{
|
|
type: 'qm-maintnance',
|
|
operation: 'spider-symbol-search',
|
|
payload: {},
|
|
cronPattern: '0 0 * * 0', // Every minute
|
|
priority: 10,
|
|
description: 'Comprehensive symbol search using QM API',
|
|
},
|
|
],
|
|
};
|
|
|
|
handlerRegistry.registerWithSchedule(qmProviderConfig);
|
|
logger.info('IB provider registered successfully with scheduled jobs');
|
|
}
|