Парсер: ночная пауза с 22:00 до 8:00 по Еревану

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zabudko-ruandClaude Opus 5.5 committed 2026-10-26 00:18:53 +04:00
1 parent 9749da5ae7
commit d32f37457b
6 files changed
+70 -7

No files matched your search

+6 -1
View File
@@ -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;
}
/** Одна проверка: шлёт сообщение о простое (с напоминаниями) и о восстановлении. */