finished prices

This commit is contained in:
Boki 2025-06-29 13:04:48 -04:00
parent 2f5eaef19c
commit 0b33e9a8b6
4 changed files with 13 additions and 10 deletions

View file

@ -57,7 +57,7 @@ export async function updatePrices(
// Build API request for daily prices // Build API request for daily prices
const searchParams = new URLSearchParams({ const searchParams = new URLSearchParams({
zeroTradeDays: 'false', zeroTradeDays: 'false',
start: lastRecordDate?.toISOString().split('T')[0] ?? '1960-01-01', start: lastRecordDate ? new Date(lastRecordDate).toISOString().split('T')[0] + '' : '1960-01-01',
interval: '1', interval: '1',
marketSession: 'mkt', marketSession: 'mkt',
freq: 'day', freq: 'day',
@ -70,7 +70,8 @@ export async function updatePrices(
// https://app.quotemedia.com/datatool/getEnhancedChartData.json?zeroTradeDays=false&start=2025-06-22&interval=1&marketSession=mkt&freq=day&adjusted=true&adjustmentType=none&unadjusted=false&datatype=int&symbol=AAPL // https://app.quotemedia.com/datatool/getEnhancedChartData.json?zeroTradeDays=false&start=2025-06-22&interval=1&marketSession=mkt&freq=day&adjusted=true&adjustmentType=none&unadjusted=false&datatype=int&symbol=AAPL
// TODO: Update with correct prices endpoint // TODO: Update with correct prices endpoint
const apiUrl = `${QM_CONFIG.PRICES_URL}?${searchParams.toString()}`; const apiUrl = `${QM_CONFIG.PRICES_URL}?${searchParams.toString()}`;
console.log('QM Symbol Info API URL:', apiUrl);
const response = await fetch(apiUrl, { const response = await fetch(apiUrl, {
method: 'GET', method: 'GET',
headers: session.headers, headers: session.headers,
@ -190,7 +191,7 @@ export async function schedulePriceUpdates(
symbolsQueued: number; symbolsQueued: number;
errors: number; errors: number;
}> { }> {
const { limit = 1, forceUpdate = false } = input; const { limit = 10000, forceUpdate = false } = input;
const tracker = await getOperationTracker(this); const tracker = await getOperationTracker(this);
this.logger.info('Scheduling price updates', { limit, forceUpdate }); this.logger.info('Scheduling price updates', { limit, forceUpdate });
@ -217,7 +218,7 @@ export async function schedulePriceUpdates(
const symbolDocs = await this.mongodb.find('qmSymbols', { const symbolDocs = await this.mongodb.find('qmSymbols', {
qmSearchCode: { $in: staleSymbols } qmSearchCode: { $in: staleSymbols }
}, { }, {
projection: { symbol: 1, symbolId: 1, qmSearchCode: 1 } projection: { qmSearchCode: 1, operations: 1 }
}); });
let queued = 0; let queued = 0;
@ -226,13 +227,15 @@ export async function schedulePriceUpdates(
// Schedule individual update jobs for each symbol // Schedule individual update jobs for each symbol
for (const doc of symbolDocs) { for (const doc of symbolDocs) {
try { try {
if (!doc.symbolId) {
this.logger.warn(`Symbol ${doc.symbol} missing symbolId, skipping`); if(doc.qmSearchCode !== 'A') {
// this.logger.warn(`Skipping symbol with missing qmSearchCode ${doc.qmSearchCode}`, { doc });
continue; continue;
} }
await this.scheduleOperation('update-prices', { await this.scheduleOperation('update-prices', {
qmSearchCode: doc.qmSearchCode qmSearchCode: doc.qmSearchCode,
lastRecordDate: doc.operations?.price_update?.lastRecordDate
}, { }, {
priority: 7, // High priority for price data priority: 7, // High priority for price data
delay: queued * 500 // 0.5 seconds between jobs delay: queued * 500 // 0.5 seconds between jobs
@ -240,7 +243,7 @@ export async function schedulePriceUpdates(
queued++; queued++;
} catch (error) { } catch (error) {
this.logger.error(`Failed to schedule price update for ${doc.symbol}`, { error }); this.logger.error(`Failed to schedule price update for ${doc.qmSearchCode}`, { error });
errors++; errors++;
} }
} }

View file

@ -65,7 +65,6 @@ export async function updateSymbolInfo(
} as Record<string, string>); } as Record<string, string>);
const apiUrl = `${QM_CONFIG.SYMBOL_URL}?${searchParams.toString()}`; const apiUrl = `${QM_CONFIG.SYMBOL_URL}?${searchParams.toString()}`;
const response = await fetch(apiUrl, { const response = await fetch(apiUrl, {
method: 'GET', method: 'GET',
headers: session.headers, headers: session.headers,

View file

@ -125,7 +125,7 @@ export class QMHandler extends BaseHandler<DataIngestionServices> {
@Operation('update-prices') @Operation('update-prices')
updatePrices = updatePrices; updatePrices = updatePrices;
@Disabled() // @Disabled()
@ScheduledOperation('schedule-price-updates', '0 */6 * * *', { @ScheduledOperation('schedule-price-updates', '0 */6 * * *', {
priority: 8, priority: 8,
immediately: false, immediately: false,

View file

@ -209,6 +209,7 @@ export class QMOperationTracker {
const filter: any = { const filter: any = {
$or: [ $or: [
{ [`operations.${operationName}.lastRunAt`]: { $lt: cutoffDate } }, { [`operations.${operationName}.lastRunAt`]: { $lt: cutoffDate } },
{ [`operations.${operationName}.lastRunAt`]: { $exists: false } },
{ [`operations.${operationName}`]: { $exists: false } } { [`operations.${operationName}`]: { $exists: false } }
] ]
}; };