chore(): final fixes before deadline

- added images of notification feature working
- added seed data script
- race condition fix for notifications worker
- small improvements
This commit is contained in:
ITQ
2026-02-24 23:22:31 +03:00
parent 6a5007d039
commit d3731e78df
8 changed files with 1067 additions and 43 deletions
+68 -2
View File
@@ -34,8 +34,6 @@
Порты по умолчанию (см. `.env.template`):
- reverse proxy: `80`
- backend direct: `14609`
- static direct: `14610`
### 2.2 Дополнительный локальный сценарий (для тестов/линтинга)
@@ -95,6 +93,74 @@ docker compose -f compose.yaml logs -f backend backend-celery-worker backend-cel
docker compose -f compose.prod.yaml --profile observability logs -f backend backend-celery-worker backend-celery-beat
```
### 3.5 Seed демо-данных через HTTP API
Скрипт создаёт следующие сущности:
- test flags;
- experiments + variants + lifecycle до `running`;
- event types (`exposure`, `click`);
- metrics (`ctr`, `exposure_count`, `click_count`) и привязку к эксперименту;
- telegram notification channel + rules;
- smtp notification channel + rules (опционально);
- conflict domain с включёнными экспериментами;
- два learning (для color/copy), чтобы проверить похожие;
- guardrail (`pause`) c порогом, который не срабатывает сразу;
- subjects + decide + события (`show+click`, `show-only`, `click-only`, out-of-order).
Команда:
```bash
BACKEND_BASE_URL='http://127.0.0.1' \
TG_BOT_TOKEN='6196898691:AAGbCxOf7-iXWKkKeOr9GrgHKcw6G7Ou1zU' \
TG_CHAT_ID='826812483' \
./infrastructure/http/seed-demo-data.sh
```
Команда c SMTP:
```bash
BACKEND_BASE_URL='http://127.0.0.1' \
TG_BOT_TOKEN='6196898691:AAGbCxOf7-iXWKkKeOr9GrgHKcw6G7Ou1zU' \
TG_CHAT_ID='826812483' \
SMTP_ENABLED=true \
SMTP_RECIPIENT='itq.dev@ya.ru' \
SMTP_FROM_EMAIL='mikrotik@itqdev.xyz' \
SMTP_HOST='smtp.office365.com' \
SMTP_PORT=587 \
SMTP_USERNAME='mikrotik@itqdev.xyz' \
SMTP_PASSWORD='5x9NqfIO4tVMg0B' \
SMTP_USE_TLS=true \
SMTP_USE_SSL=false \
SMTP_TIMEOUT=15 \
./infrastructure/http/seed-demo-data.sh
```
Что получаем:
- скрипт печатает ключевые ID прямо в stdout;
- артефакты в `artifacts/http-seed/<RUN_ID>/`;
- сводка в `artifacts/http-seed/<RUN_ID>/summary.json`.
### 3.6 Что проверяем в Swagger ([localhost/api/v1/docs](http://localhost:80/api/v1/docs))
1. Открыть `http://127.0.0.1/api/v1/docs`.
2. Получить токен через `POST /api/v1/auth/login` (admin/experimenter/approver).
3. Нажать `Authorize` и вставить `Bearer <access_token>`.
4. Проверить `GET /api/v1/reports/{experiment_id}` для `experiment_color_id` из seed-вывода:
- по вариантам есть `exposures`, `click_count`, `exposure_count`, `ctr`.
5. Проверить `POST /api/v1/experiments/{experiment_id}/guardrails/check`:
- `triggered=0`.
6. Проверить `GET /api/v1/conflicts/domains/{domain_id}/experiments`:
- видно оба running эксперимента в домене.
7. Проверить `POST /api/v1/decide` для `color_flag_key`:
- `reason=experiment_assigned`.
8. Проверить `POST /api/v1/decide` для `copy_flag_key` тем же subject:
- `reason=domain_conflict`.
9. Проверить `GET /api/v1/notification-channels`, `GET /api/v1/notification-rules`, `GET /api/v1/notification-logs`:
- есть telegram channel/rules и, если `SMTP_ENABLED=true`, smtp channel/rules.
10. Проверить `GET /api/v1/learnings`:
- есть как минимум 2 seeded learning.
11. Проверить `GET /api/v1/experiments/{experiment_id}/similar-learnings` для `experiment_color_id`:
- ответ непустой;
- в выдаче есть `learning_copy_id` и `similarity_score`.
## 4. Проверка критериев B1..B10
### B1. Запуск и воспроизводимость