41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import type { TeHandler } from '../te.handler';
|
|
|
|
export async function dataScheduler(this: TeHandler): Promise<{ scheduled: number }> {
|
|
const { logger, mongodb } = this;
|
|
|
|
const candidates = await mongodb?.find('teUrls', {
|
|
teType: 'te',
|
|
teSymbol: { $exists: true, $ne: null },
|
|
teChartsDatasource: { $exists: true },
|
|
teChartToken: { $exists: true },
|
|
teLastUpdate: { $exists: true },
|
|
teChart: 'EC',
|
|
$or: [
|
|
{ lastDataFetch: { $exists: false } },
|
|
{ $expr: { $ne: ['$teLastUpdate', '$lastDataFetchUpdate'] } },
|
|
],
|
|
}, {
|
|
sort: { lastDataFetch: 1 },
|
|
projection: { teSymbol: 1, url: 1, lastDataFetch: 1 },
|
|
});
|
|
|
|
if (!candidates?.length) {
|
|
logger.debug('No symbols need data fetching');
|
|
return { scheduled: 0 };
|
|
}
|
|
|
|
logger.info(`Scheduling ${candidates.length} symbols for TE data fetch`);
|
|
|
|
for (const doc of candidates) {
|
|
await this.scheduleOperation('te-data-fetch', {
|
|
teSymbol: doc.teSymbol,
|
|
url: doc.url,
|
|
isInitialFetch: !doc.lastDataFetch,
|
|
}, {
|
|
jobId: `data-fetch-${doc.teSymbol}`,
|
|
priority: 8,
|
|
});
|
|
}
|
|
|
|
return { scheduled: candidates.length };
|
|
}
|