|
perf: метрики — тяжёлые JSON в server_state, разряжение истории по возрасту
Строка метрик худеет с ~5 КБ JSON до ~0.1 КБ: net_json (сырые счётчики),
docker_json, processes_json и extra нужны только от ПОСЛЕДНЕГО пакета, в
истории они были мёртвым грузом (~89% объёма). Теперь они живут в одной
строке server_state на сервер:
- ingest читает предыдущий пакет из server_state (fallback на последнюю
строку метрик — плавный апгрейд на живом деплое), пишет состояние UPSERT;
- GET /servers/{id} берёт процессы/docker/extra из состояния через
LEFT JOIN — контракт API для фронта не менялся;
- в history остаются числа и disks_json (нужны графикам на всю глубину).
Разряжение (app/metrics_retention.py) по возрасту точки: 0–24 ч — всё,
24 ч–3 сут — 1/мин, 3–7 сут — 1/5 мин, 7–365 сут — 1/час, старше года —
удаление. В бакете остаётся реальная последняя точка (бакеты считаются
срезом строки ISO-8601, без парсинга дат). Петля — при старте и каждые
15 минут, затем PRAGMA incremental_vacuum.
Чтобы удалённое возвращалось файлу: auto_vacuum=INCREMENTAL, а на БД,
созданных до этого — разовый VACUUM при старте панели.
|
|---|
|
|
| panel/backend/app/api/ingest.py |
|---|
| panel/backend/app/api/servers.py |
|---|
| panel/backend/app/db.py |
|---|
| panel/backend/app/main.py |
|---|
| panel/backend/app/mcp.py |
|---|
| panel/backend/app/metrics_retention.py 0 → 100644 |
|---|
| panel/backend/app/schema.sql |
|---|