feat(hands,jobs): drill days skip the beat and ack carries the alert decision
This commit is contained in:
1 parent
47c31ac356
commit
a39e0b27af
4 files changed
+135
-7
No files matched your search
@@ -6,7 +6,9 @@
|
||||
- `beat` печатает `hb <ник> at=… boot=… every=… src=…`. Период не константа:
|
||||
он выведен из крона ЭТОГО ЖЕ джоба (`run.job.cron`) - что зарегистрировано
|
||||
у планировщика, то и написано в строке. Не сводится к «раз в N часов» -
|
||||
пишем `every=unknown`, потому что соврать числом хуже, чем отказаться;
|
||||
пишем `every=unknown`, потому что соврать числом хуже, чем отказаться.
|
||||
В день, помеченный в `DRILL_FILE`, отметка не уходит: так проверяют, что
|
||||
тревога на той стороне жива, а не только что она молчит на живой цепи;
|
||||
- `watch` читает окно - последние `WINDOW` сообщений САМОЙ комнаты, а не
|
||||
«что нового с курсора», - сверяет возраст последней отметки соседа с
|
||||
порогом из ЕГО ЖЕ строки, печатает в комнату `ack` и - если цепь молчит -
|
||||
@@ -32,6 +34,7 @@ from beaver_agent.hands.heartbeat import (
|
||||
Watch,
|
||||
alarm_text,
|
||||
beat_line,
|
||||
drill,
|
||||
every_from_cron,
|
||||
look,
|
||||
)
|
||||
@@ -46,6 +49,12 @@ STATE_FILE = STATE_DIR / "сторож.json"
|
||||
"""Что видели в прошлый прогон: без файла сторож после передеплоя считает,
|
||||
что соседа не видел ни разу, и разоружается сам по себе."""
|
||||
|
||||
DRILL_FILE = STATE_DIR / "сторож-учения.txt"
|
||||
"""Даты учений, по одной `YYYY-MM-DD` на строку, локальные в зоне планировщика.
|
||||
В такой день `beat` молчит в комнате - в этом и учения: проверяем, что тревога
|
||||
у соседа действительно срабатывает. Файл, а не константа и не переменная среды:
|
||||
даты меняются от учений к учениям, а передеплой ради них не нужен."""
|
||||
|
||||
TITLE = "сторож"
|
||||
|
||||
BRIEF = (
|
||||
@@ -61,12 +70,25 @@ BRIEF = (
|
||||
|
||||
|
||||
async def beat(run: JobRun) -> None:
|
||||
"""Отметка о том, что мы живы. Не ушла - джоб падает, это видно в прогонах."""
|
||||
"""Отметка о том, что мы живы. Не ушла - джоб падает, это видно в прогонах.
|
||||
|
||||
В день из `DRILL_FILE` отметка не уходит вовсе: учения - это МОЛЧАНИЕ в
|
||||
комнате, и любой текст туда («сегодня пропускаем») их бы и отменил. Видно
|
||||
такой прогон только в логе.
|
||||
"""
|
||||
if VIBEGRAM_HB is None:
|
||||
return
|
||||
now = datetime.now(UTC)
|
||||
if drill(DRILL_FILE, now=now, tz=run.scheduler.tz):
|
||||
_log.info(
|
||||
"сторож: отметка пропущена по флагу учений %s (%s)",
|
||||
DRILL_FILE,
|
||||
now.astimezone(run.scheduler.tz).strftime("%Y-%m-%d"),
|
||||
)
|
||||
return
|
||||
line = beat_line(
|
||||
nick=VIBEGRAM_HB.nick,
|
||||
at=datetime.now(UTC),
|
||||
at=now,
|
||||
boot=BOOT,
|
||||
every=every_from_cron(run.job.cron, run.scheduler.tz),
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user