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:
+68
-2
@@ -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. Запуск и воспроизводимость
|
||||
|
||||
Reference in New Issue
Block a user