From 746b4ee13f38ea60de4c863d360ff21f5fffa740 Mon Sep 17 00:00:00 2001 From: Blayne Chard Date: Mon, 16 Dec 2024 14:13:14 +1300 Subject: [PATCH] fix: prevent processing the current hour --- packages/lambda-analytic-cloudfront/src/handler.ts | 8 ++++++-- packages/lambda-analytic-cloudfront/src/log.reader.ts | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/lambda-analytic-cloudfront/src/handler.ts b/packages/lambda-analytic-cloudfront/src/handler.ts index 59191aa41..4935f2221 100644 --- a/packages/lambda-analytic-cloudfront/src/handler.ts +++ b/packages/lambda-analytic-cloudfront/src/handler.ts @@ -8,7 +8,7 @@ import { basename } from 'path'; import { byDay, getYesterday } from './date.js'; import { Elastic } from './elastic.js'; -import { FileProcess } from './log.reader.js'; +import { FileProcess, toFullDate } from './log.reader.js'; import { LogStats } from './log.stats.js'; const gzipPromise = promisify(gzip); @@ -58,10 +58,14 @@ export async function main(req: LambdaRequest): Promise { for (let hour = 23; hour >= 0; hour--) { processedCount++; if (processedCount > MaxToProcess) break; - const hourOfDay = String(hour).padStart(2, '0'); const prefix = `${prefixByDay}-${hourOfDay}`; + const targetDate = new Date(toFullDate(prefixByDay + 'T' + hourOfDay)); + const dateDiff = Date.now() - targetDate.getTime(); + // Do not process anything within a hour of the current time as some logs take a while to propagate into the bucket + if (dateDiff < 60 * 60 * 1000) continue; + // Create a folder structure of /YYYY/MM/ const cacheFolderParts = prefix.slice(0, 7).replace('-', '/'); diff --git a/packages/lambda-analytic-cloudfront/src/log.reader.ts b/packages/lambda-analytic-cloudfront/src/log.reader.ts index 521804875..bc0e82c69 100644 --- a/packages/lambda-analytic-cloudfront/src/log.reader.ts +++ b/packages/lambda-analytic-cloudfront/src/log.reader.ts @@ -58,7 +58,7 @@ function hideApiKey(str: string): string { } const empty: Record = { webp: 0, png: 0, jpeg: 0 }; -function toFullDate(x: string): string { +export function toFullDate(x: string): string { if (x.length === IsoDateMonth) return `${x}-01T00:00:00.000Z`; if (x.length === IsoDateDay) return `${x}T00:00:00.000Z`; if (x.length === IsoDateHour) return `${x}:00:00.000Z`;