| 2026-10-04 |
fix: пин gnexus-synapse по тегу v0.1.2; compose — прокидывание всех задокументированных env
...
Теги gn-synapse-client-py запушены на сервер — установка по свежему тегу
(handbook 10-platform/notifications.md). По handbook-аудиту: в
docker-compose.yml не проходили GHARD_OFFLINE_MULTIPLIER, GHARD_SHARE_INTERVAL,
GHARD_HEALTH_* и все GHARD_SYNAPSE_* — конфиг через .env рядом с compose
молча не применялся бы.
Eugene Sukhodolskiy
committed
1 day ago
|

feat: журнал событий + интеграция с Gnexus Synapse (этап 4)
...
Все ивенты панели пишутся в единый журнал (events, retention 90 дней,
GET /api/v1/events) и — при настроенном GHARD_SYNAPSE_* — уходят конвертом
v1 в Synapse (gn-synapse-client-py, fire-and-forget, high/critical через
send с логом ошибок, остальное через emit).
Источники ивентов: пороги cpu/ram/swap/disk/load с гистерезисом (пары
*_high/*_recovered, disk — по маунтам), watchdog server_offline/online,
diff docker-контейнеров между пакетами, переходы сервисов
service_down/degraded/recovered на краях инцидент-периодов. Журнал сам
служит состоянием: пары открытие/закрытие переживают рестарт панели,
повторных оповещений нет; повторяющиеся открытия получают dedup_key
{type}-{id}-{UTC-день}, ttl конверта 24 ч.
Конверты не содержат адресатов и каналов — маршрутизацию решает Synapse.
Тройки subject×action регистрируются в админке Synapse заранее; пустой
GHARD_SYNAPSE_API_KEY = интеграция выключена (только журнал).
Eugene Sukhodolskiy
committed
1 day ago
|
feat: close the panel behind gnexus-auth (OAuth PKCE)
...
Auth off by default (client_id empty). When GHARD_AUTH_CLIENT_ID is set,
the web UI gets a creds-style sign-in gate: splash -> /me -> login screen
(OAuth starts from the click, not page load). Sessions and OAuth state
live in SQLite (survive restarts); webhook endpoint applies global_logout/
profile updates. Scripts/MCP keep working with the Bearer token, agents
keep X-Server-Key ingest. Includes compose env passthrough, README guide.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|
| 2026-09-10 |
feat: MCP server at /mcp — AI agents read server state from the panel
...
Streamable HTTP, stateless, JSON responses (proxy-friendly). Tools:
panel_overview (fleet summary), server_details (full current state),
server_history (downsampled metrics history). ASGI endpoint registered
directly on FastAPI routes (Mount misses exact /mcp) and the MCP session
manager runs in the app lifespan. mcp SDK pinned >=1.10,<2. README:
tool table, claude mcp add example, token caveat.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
25 days ago
|
feat: stage 1 — panel skeleton (FastAPI + SQLite) and ingest API
...
- FastAPI backend: config (pydantic-settings, GHARD_* env), aiosqlite + WAL
- SQLite schema: servers, metrics, events
- POST /api/v1/ingest: auth by X-Server-Key (sha256 hash), net rates in MB/s
computed on panel from raw counter deltas, server card upsert
- Servers API: create (key shown once), list with dashboard summary,
detail, PATCH name/note, delete, metrics history
- Dockerfile + docker-compose with persistent volume
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
25 days ago
|