From 9cde035e5a36e261ca6d0f0de5f8463af9963979 Mon Sep 17 00:00:00 2001 From: kpa39l Date: Sun, 13 Sep 2026 15:40:29 +0000 Subject: [PATCH] =?UTF-8?q?chore(openspec):=20archive=202026-09-13-vesti-a?= =?UTF-8?q?lerts=20=E2=86=92=20specs/vesti-alerts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-09-13-vesti-alerts/design.md | 0 .../2026-09-13-vesti-alerts/proposal.md | 0 .../specs/vesti-alerts/spec.md | 0 .../2026-09-13-vesti-alerts/tasks.md | 0 openspec/specs/vesti-alerts/spec.md | 102 ++++++++++++++++++ 5 files changed, 102 insertions(+) rename openspec/changes/{ => archive}/2026-09-13-vesti-alerts/design.md (100%) rename openspec/changes/{ => archive}/2026-09-13-vesti-alerts/proposal.md (100%) rename openspec/changes/{ => archive}/2026-09-13-vesti-alerts/specs/vesti-alerts/spec.md (100%) rename openspec/changes/{ => archive}/2026-09-13-vesti-alerts/tasks.md (100%) create mode 100644 openspec/specs/vesti-alerts/spec.md diff --git a/openspec/changes/2026-09-13-vesti-alerts/design.md b/openspec/changes/archive/2026-09-13-vesti-alerts/design.md similarity index 100% rename from openspec/changes/2026-09-13-vesti-alerts/design.md rename to openspec/changes/archive/2026-09-13-vesti-alerts/design.md diff --git a/openspec/changes/2026-09-13-vesti-alerts/proposal.md b/openspec/changes/archive/2026-09-13-vesti-alerts/proposal.md similarity index 100% rename from openspec/changes/2026-09-13-vesti-alerts/proposal.md rename to openspec/changes/archive/2026-09-13-vesti-alerts/proposal.md diff --git a/openspec/changes/2026-09-13-vesti-alerts/specs/vesti-alerts/spec.md b/openspec/changes/archive/2026-09-13-vesti-alerts/specs/vesti-alerts/spec.md similarity index 100% rename from openspec/changes/2026-09-13-vesti-alerts/specs/vesti-alerts/spec.md rename to openspec/changes/archive/2026-09-13-vesti-alerts/specs/vesti-alerts/spec.md diff --git a/openspec/changes/2026-09-13-vesti-alerts/tasks.md b/openspec/changes/archive/2026-09-13-vesti-alerts/tasks.md similarity index 100% rename from openspec/changes/2026-09-13-vesti-alerts/tasks.md rename to openspec/changes/archive/2026-09-13-vesti-alerts/tasks.md diff --git a/openspec/specs/vesti-alerts/spec.md b/openspec/specs/vesti-alerts/spec.md new file mode 100644 index 0000000..5aeebc2 --- /dev/null +++ b/openspec/specs/vesti-alerts/spec.md @@ -0,0 +1,102 @@ +# vesti-alerts Specification + +## Purpose +TBD - created by archiving change 2026-09-13-vesti-alerts. Update Purpose after archive. + +## Requirements + +### Requirement: VestiWebDown + +Алерт на недоступность web-интерфейса VESTI (:8400, systemd-юнит). + +#### Scenario: web не отвечает + +- Given метрика `vesti_web_up{component="vesti"}` = 0 +- When условие держится 2 минуты +- Then алерт `VestiWebDown` переходит в Firing (severity critical) + +#### Scenario: web восстановился + +- Given метрика `vesti_web_up{component="vesti"}` = 1 +- When алерт в Firing +- Then алерт закрывается автоматически + +### Requirement: VestiPublisherDown + +Алерт на недоступность publisher-сервиса VESTI (:8410, /healthz). + +#### Scenario: publisher не отвечает + +- Given метрика `vesti_publisher_health{component="vesti"}` = 0 +- When условие держится 2 минуты +- Then алерт `VestiPublisherDown` переходит в Firing (severity critical) + +#### Scenario: publisher восстановился + +- Given метрика `vesti_publisher_health{component="vesti"}` = 1 +- When алерт в Firing +- Then алерт закрывается автоматически + +### Requirement: VestiPublisherContainerDown + +Алерт на остановку Docker-контейнера publisher. + +#### Scenario: контейнер publisher не в статусе Up + +- Given метрика `vesti_publisher_docker{component="vesti"}` = 0 +- When условие держится 2 минуты +- Then алерт `VestiPublisherContainerDown` переходит в Firing (severity critical) + +#### Scenario: контейнер publisher снова Up + +- Given метрика `vesti_publisher_docker{component="vesti"}` = 1 +- When алерт в Firing +- Then алерт закрывается автоматически + +### Requirement: VestiTunnelDown + +Алерт на недоступность SOCKS5-туннеля Telegram (:1080). + +#### Scenario: туннель недоступен + +- Given метрика `vesti_telegram_tunnel{component="vesti"}` = 0 +- When условие держится 2 минуты +- Then алерт `VestiTunnelDown` переходит в Firing (severity critical) + +#### Scenario: туннель восстановился + +- Given метрика `vesti_telegram_tunnel{component="vesti"}` = 1 +- When алерт в Firing +- Then алерт закрывается автоматически + +### Requirement: VestiDbDown + +Алерт на недоступность SQLite-базы vesti.db. + +#### Scenario: БД недоступна + +- Given метрика `vesti_db_ok{component="vesti"}` = 0 +- When условие держится 2 минуты +- Then алерт `VestiDbDown` переходит в Firing (severity critical) + +#### Scenario: БД восстановилась + +- Given метрика `vesti_db_ok{component="vesti"}` = 1 +- When алерт в Firing +- Then алерт закрывается автоматически + +### Requirement: VestiDbStale + +Алерт на устаревание данных краулера (не запускался >30 минут). + +#### Scenario: краулер не запускался более 30 минут + +- Given метрика `vesti_db_last_run_ts{component="vesti"}` = T +- When `time() - T` > 1800 секунд и условие держится 5 минут +- Then алерт `VestiDbStale` переходит в Firing (severity warning) + +#### Scenario: краулер снова запустился + +- Given метрика `vesti_db_last_run_ts{component="vesti"}` обновлена (time() - ts < 1800) +- When алерт в Firing +- Then алерт закрывается автоматически