moved jobs to provider config

This commit is contained in:
Bojan Kucera 2025-06-08 15:03:30 -04:00
parent f9c2860ff4
commit 52c2f08db2
7 changed files with 183 additions and 76 deletions

View file

@ -140,46 +140,50 @@ export class QueueService {
this.logger.debug('Job progress', { id: job.id, progress });
});
}
private async setupScheduledTasks() {
try {
// Market data refresh every minute using Yahoo Finance
await this.addRecurringJob({
type: 'market-data-refresh',
service: 'market-data',
provider: 'yahoo-finance',
operation: 'live-data',
payload: { symbol: 'AAPL' }
}, '*/1 * * * *');
this.logger.info('Setting up scheduled tasks from providers...');
// Get all scheduled jobs from all providers
const allScheduledJobs = providerRegistry.getAllScheduledJobs();
if (allScheduledJobs.length === 0) {
this.logger.warn('No scheduled jobs found in providers');
return;
}
// Market data refresh using QuoteMedia every 2 minutes
await this.addRecurringJob({
type: 'market-data-quotemedia',
service: 'market-data',
provider: 'quotemedia',
operation: 'batch-quotes',
payload: { symbols: ['GOOGL', 'MSFT', 'TSLA'] }
}, '*/2 * * * *');
// Register each scheduled job
for (const { service, provider, job } of allScheduledJobs) {
try {
await this.addRecurringJob({
type: job.type,
service: service,
provider: provider,
operation: job.operation,
payload: job.payload,
priority: job.priority
}, job.cronPattern);
// Proxy fetch every 15 minutes
await this.addRecurringJob({
type: 'proxy-maintenance',
service: 'proxy',
provider: 'proxy-service',
operation: 'fetch-and-check',
payload: {}
}, '*/15 * * * *');
this.logger.info('Scheduled job registered', {
type: job.type,
service,
provider,
operation: job.operation,
cronPattern: job.cronPattern,
description: job.description
});
} catch (error) {
this.logger.error('Failed to register scheduled job', {
type: job.type,
service,
provider,
error: error instanceof Error ? error.message : String(error)
});
}
}
// Proxy cleanup daily at 2 AM
await this.addRecurringJob({
type: 'proxy-cleanup',
service: 'proxy',
provider: 'proxy-service',
operation: 'cleanup-old-data',
payload: { daysToKeep: 7 }
}, '0 2 * * *');
this.logger.info('Scheduled tasks configured');
this.logger.info(`Successfully configured ${allScheduledJobs.length} scheduled tasks`);
} catch (error) {
this.logger.error('Failed to setup scheduled tasks', error);
}
@ -256,13 +260,26 @@ export class QueueService {
}
return this.worker.opts.concurrency || 1;
}
getRegisteredProviders() {
return providerRegistry.getProviders().map(({ key, config }) => ({
key,
name: config.name,
service: config.service,
operations: Object.keys(config.operations)
operations: Object.keys(config.operations),
scheduledJobs: config.scheduledJobs?.length || 0
}));
}
getScheduledJobsInfo() {
return providerRegistry.getAllScheduledJobs().map(({ service, provider, job }) => ({
id: `${service}-${provider}-${job.type}`,
service,
provider,
type: job.type,
operation: job.operation,
cronPattern: job.cronPattern,
priority: job.priority,
description: job.description
}));
}