diff --git a/packages/db/src/services/event.service.ts b/packages/db/src/services/event.service.ts index 37cb2cb8..e7de59b3 100644 --- a/packages/db/src/services/event.service.ts +++ b/packages/db/src/services/event.service.ts @@ -412,15 +412,22 @@ export async function getEventList(options: GetEventListOptions) { } = options; const { sb, getSql, join } = createSqlBuilder(); + const MAX_DATE_INTERVAL_IN_DAYS = 365; + // Cap the date interval to prevent infinity + const safeDateIntervalInDays = Math.min( + dateIntervalInDays, + MAX_DATE_INTERVAL_IN_DAYS, + ); + if (typeof cursor === 'number') { sb.offset = Math.max(0, (cursor ?? 0) * take); } else if (cursor instanceof Date) { - sb.where.cursorWindow = `created_at >= toDateTime64(${sqlstring.escape(formatClickhouseDate(cursor))}, 3) - INTERVAL ${dateIntervalInDays} DAY`; + sb.where.cursorWindow = `created_at >= toDateTime64(${sqlstring.escape(formatClickhouseDate(cursor))}, 3) - INTERVAL ${safeDateIntervalInDays} DAY`; sb.where.cursor = `created_at <= ${sqlstring.escape(formatClickhouseDate(cursor))}`; } if (!cursor) { - sb.where.cursorWindow = `created_at >= toDateTime64(${sqlstring.escape(formatClickhouseDate(new Date()))}, 3) - INTERVAL ${dateIntervalInDays} DAY`; + sb.where.cursorWindow = `created_at >= toDateTime64(${sqlstring.escape(formatClickhouseDate(new Date()))}, 3) - INTERVAL ${safeDateIntervalInDays} DAY`; } sb.limit = take; @@ -580,7 +587,11 @@ export async function getEventList(options: GetEventListOptions) { }); // If we dont get any events, try without the cursor window - if (data.length === 0 && sb.where.cursorWindow) { + if ( + data.length === 0 && + sb.where.cursorWindow && + safeDateIntervalInDays < MAX_DATE_INTERVAL_IN_DAYS + ) { return getEventList({ ...options, dateIntervalInDays: dateIntervalInDays * 2, diff --git a/packages/queue/src/queues.ts b/packages/queue/src/queues.ts index b032a81b..10814de2 100644 --- a/packages/queue/src/queues.ts +++ b/packages/queue/src/queues.ts @@ -216,7 +216,7 @@ export type ImportQueuePayload = { }; }; -export const importQueue = new Queue('import', { +export const importQueue = new Queue('{import}', { connection: getRedisQueue(), defaultJobOptions: { removeOnComplete: 10,