Парсер: ночная пауза с 22:00 до 8:00 по Еревану
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
9749da5ae7
commit
d32f37457b
6 files changed
+70
-7
No files matched your search
@@ -1,6 +1,7 @@
|
||||
import { and, desc, eq, isNotNull, isNull } from 'drizzle-orm';
|
||||
import type { Db } from '../db/client.ts';
|
||||
import { parserRuns, settings, users } from '../db/schema.ts';
|
||||
import { isQuietHours, lastQuietEnd } from '../parser/quiet-hours.ts';
|
||||
import { loadParserSettings } from '../parser/settings.ts';
|
||||
import { enqueueRaw } from '../telegram/outbox.ts';
|
||||
|
||||
@@ -24,6 +25,8 @@ const ago = (from: Date, now: Date) => {
|
||||
|
||||
/** Что не так с парсером, или null, если всё в порядке. */
|
||||
export async function parserProblem(db: Db, now = new Date()): Promise<string | null> {
|
||||
// Ночью парсер спит по расписанию — это не простой.
|
||||
if (isQuietHours(now)) return null;
|
||||
const parser = await loadParserSettings(db);
|
||||
const stall = STALL_MINUTES * 60_000;
|
||||
if (!parser.enabled) {
|
||||
@@ -34,7 +37,9 @@ export async function parserProblem(db: Db, now = new Date()): Promise<string |
|
||||
}
|
||||
const [last] = await db.select({ at: parserRuns.startedAt }).from(parserRuns).orderBy(desc(parserRuns.id)).limit(1);
|
||||
if (!last) return null;
|
||||
return now.getTime() - last.at.getTime() >= stall ? `не запускался ${ago(last.at, now)}` : null;
|
||||
// Простой считается с конца ночной паузы: последний проход был вечером, а утром парсер только проснулся.
|
||||
const since = new Date(Math.max(last.at.getTime(), lastQuietEnd(now).getTime()));
|
||||
return now.getTime() - since.getTime() >= stall ? `не запускался ${ago(last.at, now)}` : null;
|
||||
}
|
||||
|
||||
/** Одна проверка: шлёт сообщение о простое (с напоминаниями) и о восстановлении. */
|
||||
|
||||
Reference in new issue
Block a user