docs(reports): add ss-prod agentic E2E gap analysis and task notes
Add 2026-09-08 production gap/spec-coverage/refresh-plan and dashboard scenario E2E plan/report, axiom-mcp feedback, and 2026-09-11 data-team maintenance dev-test run notes.
This commit is contained in:
94
docs/tasks/2026-09-11-data-team-maintenance-dev-test-run.md
Normal file
94
docs/tasks/2026-09-11-data-team-maintenance-dev-test-run.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# Задача: тестовый прогон maintenance (banner) на DEV и интеграция скриптов
|
||||
|
||||
**Команда:** Data Engineering
|
||||
**Приоритет:** P2
|
||||
**Окружение:** только DEV (PROD не трогать)
|
||||
**Дата постановки:** 2026-09-11
|
||||
**Спека:** `specs/031-maintenance-banner/`
|
||||
|
||||
## Контекст
|
||||
|
||||
В superset-tools реализован функционал maintenance banner: внешний инструмент (ETL, cron,
|
||||
CI/CD, Airflow) через API запускает «плашку» «Ведутся технические работы» на дашбордах
|
||||
Superset и снимает её. Нужно прогнать функционал на DEV и встроить скрипты запуска/снятия
|
||||
плашек в инструменты команды.
|
||||
|
||||
## Цель
|
||||
|
||||
1. Добавить в инструменты команды (Airflow DAG / CI job / cron / runbook) скрипты запуска
|
||||
и снятия плашек, работающие против DEV-окружения.
|
||||
2. Прогнать функциональный сценарий на DEV и подтвердить корректность баннеров.
|
||||
|
||||
## 1. Подготовка доступа
|
||||
|
||||
- Создать API-ключ в superset-tools с permissions: `maintenance:start`, `maintenance:end`,
|
||||
`maintenance:end_all` (Admin → API Keys).
|
||||
- Узнать точный id DEV-окружения: `GET {BASE_URL}/api/environments`. Во всех командах
|
||||
ниже `{DEV_ENV_ID}` — это реальный id из ответа (в примерах фигурирует `ss-dev` —
|
||||
сверить с конфигом стенда).
|
||||
- Определить `{BASE_URL}` DEV-стенда (например, `http://127.0.0.1:8000` для локального
|
||||
или адрес dev-стенда команды).
|
||||
- Ключ хранить в секретах (CI/CD secrets, vault, `.env` вне git). **Не передавать ключ
|
||||
аргументом командной строки.**
|
||||
|
||||
## 2. Включить скрипты в инструменты команды
|
||||
|
||||
Взять готовые примеры и адаптировать под свой пайплайн:
|
||||
|
||||
| Файл | Назначение |
|
||||
|---|---|
|
||||
| `examples/maintenance/maintenance-api-bash.sh` | bash/curl — для shell, cron, CI |
|
||||
| `examples/maintenance/maintenance-api-python.py` | Python/requests — для ETL/Airflow (`start_maintenance` / `end_maintenance` / `end_all_maintenance` можно импортировать) |
|
||||
| `examples/maintenance/README.md` | описание API, параметров и ошибок |
|
||||
|
||||
Требования к интеграции:
|
||||
|
||||
- скрипты добавлены в репозиторий команды (например `dags/`, `ci/`, `scripts/`);
|
||||
- окружение (`{DEV_ENV_ID}`) и `{BASE_URL}` параметризованы, по умолчанию — DEV;
|
||||
- API-ключ читается из переменной окружения/секрет-хранилища;
|
||||
- ненулевой код возврата на ошибках, чтобы пайплайн не «проглатывал» сбой.
|
||||
|
||||
## 3. Тест-сценарии на DEV
|
||||
|
||||
| # | Сценарий | Команда (bash) | Ожидание |
|
||||
|---|---|---|---|
|
||||
| 1 | Старт maintenance на известной таблице | `./maintenance-api-bash.sh start schema.table 4 {DEV_ENV_ID}` | `202`, `task_id` + `maintenance_id`; плашка на затронутых дашбордах |
|
||||
| 2 | Проверка событий и баннеров | `GET /api/maintenance/events`, `GET /api/maintenance/dashboard-banners` | событие `active`, баннер виден в Superset |
|
||||
| 3 | Ручное завершение | `./maintenance-api-bash.sh end {maintenance_id}` | `202`; при повторе `already_completed` (идемпотентно); плашка снята |
|
||||
| 4 | Идемпотентность старта | повтор сценария 1 с тем же окном | `409 {status:"already_active"}`, тот же `maintenance_id` |
|
||||
| 5 | Авто-завершение | `./maintenance-api-bash.sh start schema.table 4 {DEV_ENV_ID} "ETL" --auto-end` | плашка снимается автоматически в `end_time` |
|
||||
| 6 | Аварийное снятие всех | `./maintenance-api-bash.sh end-all {DEV_ENV_ID}` | все активные события завершены, плашки сняты |
|
||||
| 7 | Негатив: неизвестное окружение | `start schema.table 4 unknown-env` | `404` |
|
||||
| 8 | Негатив: ключ без права | ключ без `maintenance:start` | `403` |
|
||||
|
||||
Проверить в UI superset-tools (Admin, вкладка Maintenance) список активных/завершённых
|
||||
событий и настройки; баннер — в Superset на дашборде, который использует указанную таблицу.
|
||||
|
||||
## 4. Артефакты
|
||||
|
||||
- PR/ссылка на скрипты, добавленные в инструменты команды.
|
||||
- Короткий отчёт: команды, HTTP-коды, `task_id` / `maintenance_id` по каждому сценарию.
|
||||
- Скриншоты плашки «до» и «после» снятия на DEV.
|
||||
- Подтверждение, что PROD не затронут.
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
- [ ] Скрипты запуска/снятия плашек есть в инструментах команды, параметризованы по окружению.
|
||||
- [ ] На DEV плашка появляется на дашбордах, затронутых указанными таблицами.
|
||||
- [ ] `end` и `end-all` снимают плашку; повторные вызовы идемпотентны.
|
||||
- [ ] `--auto-end` снимает плашку по истечении окна.
|
||||
- [ ] Ошибки `403` / `404` / `409` обрабатываются скриптом, пайплайн не падает молча.
|
||||
- [ ] Ключ не передаётся в командной строке; используется секрет-хранилище.
|
||||
|
||||
## Ограничения и безопасность
|
||||
|
||||
- Тестировать только на DEV. **Fan-out без `environment_id` стартует во всех PROD-окружениях
|
||||
— на этом прогоне не использовать.**
|
||||
- `end-all` снимает плашки со всех дашбордов — применять осознанно.
|
||||
- Не коммитить API-ключ и `.env` со секретами.
|
||||
|
||||
## Ссылки
|
||||
|
||||
- `examples/maintenance/README.md`
|
||||
- `specs/031-maintenance-banner/spec.md`, `quickstart.md`
|
||||
- API: `{BASE_URL}/api/maintenance/*` (все мутации возвращают `202` + `task_id`)
|
||||
Reference in New Issue
Block a user