Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ, инструкция пользователя, техдокументация, код-стайл), бэклог, скрипты развёртывания и архив прототипа LeadRadar.
This commit is contained in:
@@ -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).
|
||||
Reference in New Issue
Block a user