Инициализировать репозиторий «Дейл»

Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы
ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ,
инструкция пользователя, техдокументация, код-стайл), бэклог,
скрипты развёртывания и архив прототипа LeadRadar.
This commit is contained in:
Rustam Khalimov
2026-09-11 02:50:17 +03:00
commit 9e07568ddd
1402 changed files with 177470 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
# Нагрузочный смоук-тест API Deal (`scripts/loadtest/`)
Минимальный прогон «есть ли жизнь и как быстро отвечает» по читающим ручкам API
(этап 12, пакет C). Внешних сервисов и записывающих операций нет — только логин
и чтение, БД не мутируется.
## Сценарий
1. `POST /api/auth/login` `{login, password}` — сессия (`deal_session`).
2. В цикле: `GET /api/containers`, затем `GET /api/cards`.
3. Метрики: число запросов, ошибки (не-200), RPS, средняя/p95/max латентность.
Учётные данные по умолчанию — `admin` / `admin` (dev-дефолт bootstrap тенанта).
## Вариант A — bash + curl (зависимостей нет, кроме curl)
```bash
bash scripts/loadtest/api-loadtest.sh
# пример с параметрами
BASE_URL=http://localhost:5080 LOGIN=admin PASSWORD=admin \
DURATION_SECONDS=20 PAUSE_SECONDS=0.1 \
bash scripts/loadtest/api-loadtest.sh
```
Переменные окружения: `BASE_URL` (по умолчанию `http://localhost:5080`),
`LOGIN`/`PASSWORD`, `DURATION_SECONDS` (15), `PAUSE_SECONDS` (0.2), `CURL_TIMEOUT` (5).
Код возврата: `0` — без ошибок, `1` — ошибка логина/конфигурации, `2` — были не-200.
## Вариант B — k6 (если установлен)
```bash
k6 run scripts/loadtest/deal-loadtest.js
BASE_URL=http://localhost:5080 VUS=10 DURATION=30s \
k6 run scripts/loadtest/deal-loadtest.js
```
Скрипт логинится один раз в `setup()` и раздаёт куку виртуальным пользователям;
пороги проваливают прогон при доле ошибок > 1% или p95 > 500 мс.
## Как поднять API для прогона
- **dev (полный стек)**: `docker compose -f deploy/compose.dev.yml up -d --build`,
затем прогон против `http://localhost:5080`; после — `docker compose -f deploy/compose.dev.yml down`.
- **dev (только core + Postgres)**: см. техдок §13 «Быстрый старт» (Postgres :5433, API :5080).
- Прогон короткий (по умолчанию 15–20 с) — это смоук, а не полноценный бенчмарк.
## Замечания
- В PROD включён rate-limit (`api` — 600/мин на тенанта, `auth` — 10/мин на IP),
поэтому длительные прогоны делайте на dev-стенде или поднимите лимит.
- Метрики перфа сервисов дополнительно смотрите в Prometheus/Grafana (профиль
`observability`): `http_server_request_duration_seconds_*`, RPS/p95 на дашборде
`Deal-Metrics-Overview` (см. техдок §7).