From 288e4f9571147246de455be7b3860cab47f836cc Mon Sep 17 00:00:00 2001 From: alikia2x Date: Tue, 15 Apr 2025 22:00:02 +0800 Subject: [PATCH] fix: incorrect SQL in scheduleSnapshot --- packages/crawler/db/snapshotSchedule.ts | 2 +- packages/crawler/mq/scheduling.ts | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/crawler/db/snapshotSchedule.ts b/packages/crawler/db/snapshotSchedule.ts index 2ece00a..8b5c1bc 100644 --- a/packages/crawler/db/snapshotSchedule.ts +++ b/packages/crawler/db/snapshotSchedule.ts @@ -184,7 +184,7 @@ export async function scheduleSnapshot( let adjustedTime = new Date(targetTime); if (type == "milestone") { await client.queryObject( - `UPDATE snapshot_schedule SET started_at = $1 WHERE aid = $2 AND type = 'milestone'`, + `UPDATE snapshot_schedule SET started_at = $1 WHERE aid = $2 AND type = 'milestone' AND status = 'pending'`, [adjustedTime, aid], ); logger.log( diff --git a/packages/crawler/mq/scheduling.ts b/packages/crawler/mq/scheduling.ts index e2451dd..e72596e 100644 --- a/packages/crawler/mq/scheduling.ts +++ b/packages/crawler/mq/scheduling.ts @@ -6,6 +6,20 @@ import { HOUR, MINUTE } from "@std/datetime"; const log = (value: number, base: number = 10) => Math.log(value) / Math.log(base); +const getFactor = (x: number) => { + const a = 1.054; + const b = 4.5; + const c = 100; + const u = 0.601; + const g = 455; + if (x>g) { + return log(b/log(x+1),a); + } + else { + return log(b/log(x+c),a)+u; + } +} + /* * Returns the minimum ETA in hours for the next snapshot * @param client - Postgres client @@ -35,8 +49,8 @@ export const getAdjustedShortTermETA = async (client: Client, aid: number) => { const target = closetMilestone(latestSnapshot.views); const viewsToIncrease = target - latestSnapshot.views; const eta = viewsToIncrease / (speed + DELTA); - let factor = log(2.97 / log(viewsToIncrease + 1), 1.14); - factor = truncate(factor, 3, 100); + let factor = getFactor(viewsToIncrease); + factor = truncate(factor, 4.5, 100); const adjustedETA = eta / factor; if (adjustedETA < minETAHours) { minETAHours = adjustedETA;