Эксплуатация¶
Как запустить Аэрозвено у себя, проверить здоровье сервисов и найти причину типовых сбоев.
Локальный запуск¶
Только расчёт и проверка (без сервера)¶
Нужны Python 3.12 и uv.
cd src/backend
uv sync --all-packages
uv run python proto-gen/generate_stubs.py # gRPC-стабы
uv run python -m planner run --scenario scenarios/s01-simple.json \
--objective makespan --out /tmp/plan-s01.json
uv run python -m validator check --scenario scenarios/s01-simple.json \
--plan /tmp/plan-s01.json
Лимит расчёта в командной строке по умолчанию — 30 с. Валидатор печатает проверки и итог «ВЕРДИКТ: план допущен» либо список нарушений.
Весь контур в Docker Compose¶
docker-compose.yml в корне репозитория поднимает PostgreSQL, планировщик, валидатор и gateway
(порт 3000):
docker compose up -d --wait
curl -s http://localhost:3000/healthz # {"status":"ok"}
curl -s http://localhost:3000/api/fleet | head
Swagger UI — http://localhost:3000/api/docs.
Интерфейс в режиме разработки¶
Нужен Node.js 24.
cd src/frontend
npm install --legacy-peer-deps
npm run dev # http://localhost:5173
Поднимаются оболочка :5173 и модули planner :5174, validator :5175, viewer3d :5176.
Проверки здоровья¶
| Путь | Что проверяет |
|---|---|
GET /healthz |
процесс gateway жив |
GET /readyz |
доступны PostgreSQL, планировщик и валидатор; иначе 503 UPSTREAM_UNAVAILABLE |
GET /status |
версия, коммит сборки, время старта |
GET /metrics |
метрики Prometheus |
У планировщика и валидатора те же пути на служебных портах 3001 и 3002.
Настройки¶
Только имена и назначение; значения секретов в документации не приводятся.
| Сервис | Переменная | Назначение |
|---|---|---|
| gateway | DATABASE_URL, GATEWAY_PLANS_STORAGE |
база и режим хранения (postgres или memory) |
| gateway | PLANNER_GRPC_ADDR, VALIDATOR_GRPC_ADDR, SERVICE_API_KEY |
адреса и ключ внутренних сервисов |
| gateway | PLAN_CONCURRENCY (2), PLAN_QUEUE_LIMIT (20), PLAN_DEFAULT_TIME_LIMIT_S (300) |
очередь и лимит расчёта |
| gateway | WEATHER_PROVIDER |
прогноз ветра (open-meteo или выключен) |
| gateway | LLM_PROVIDER, OPENAI_MODEL, OPENAI_BASE_URL, OPENAI_API_KEY, ASSISTANT_* |
чат-ассистент (см. Чат-ассистент) |
| planner | PLANNER_TURN_MODEL (arc / legacy) |
модель разворотов |
| planner | PLANNER_PROFILE_MODEL (legacy / computed) |
профиль взлёта и посадки |
| planner | PLANNER_ANGLE_SEARCH (full / probe), PLANNER_ANGLE_WORKERS |
уточнение угла галсов и число процессов |
| planner, validator | PLANNER_DEM_DIR, VALIDATOR_DEM_DIR |
каталог цифровой модели рельефа |
| validator | VALIDATOR_TURN_CHECKS (fail / warn) |
блокируют ли допуск проверки разворотов G5-07, G5-08 |
Метрики¶
Gateway отдаёт, среди прочего: число HTTP-запросов и их длительность, число заданий расчёта по статусам, а для ассистента — запросы к языковой модели, их длительность и токены, число шагов, вызовов инструментов и оценок. Планировщик — длительность расчёта.
Типовые сбои¶
| Симптом | Что проверить | Что сделать |
|---|---|---|
/readyz отвечает 503 |
какой из сервисов недоступен (поле details) |
поднять PostgreSQL, планировщик или валидатор |
429 QUEUE_FULL |
в очереди 20 заданий | повторить через Retry-After секунд |
Расчёт завершился failed с GSD_UNREACHABLE |
GSD недостижим ни одним бортом | ослабить GSD, сменить нагрузку или борт (пример — демо-сценарий s08) |
| План «нерешаемо», покрытие меньше 99 % | нераспределённые галсы и их причины | увеличить парк, ослабить ветер, расширить разрешённое пространство, убрать конфликтующую зону |
409 PLAN_NOT_READY при выгрузке |
статус расчёта | дождаться completed |
422 при сохранении сценария |
поле errors[]: путь поля и правило |
привести документ к схеме (например, оборот — turnaround_time_min, в минутах) |
В плане TERRAIN_UNKNOWN |
подключена ли модель рельефа | задать PLANNER_DEM_DIR и VALIDATOR_DEM_DIR |
| Ассистент отвечает 503 | GET /api/assistant/status |
включить модель (LLM_PROVIDER=openai и ключ) или пользоваться кнопкой «Подобрать вариант» |
| Прогресс «стоит» на «Очереди» | расчёт идёт, стадии придут в конце | дождаться; время «Идёт М:СС» растёт |