# GHard Monitor

**Gnexus Hardware Monitor** — сбор мониторинга всех серверов в одном месте.

```
┌───────────────┐   POST /api/v1/ingest   ┌────────────────────┐
│ hard-monitor  │ ─────────────────────► │  hard-panel        │
│ (агент,       │   метрики + ключ       │  FastAPI + SQLite  │
│  stateless)   │                        │  + Vue UI          │
└───────────────┘                        └────────────────────┘
```

- **panel/** — панель: приём метрик, SQLite, ивенты, алерты, веб-интерфейс
  (Vue 3 + [gnexus-ui-kit](https://git.gnexus.space/root/gnexus-ui-kit) + chart.js)
- **monitor/** — агент на серверах: psutil-сбор фактов, POST на панель.
  Агент stateless, вся логика (пороги, ивенты, скорость сети по дельте
  счётчиков) — на панели.

## Стек

| Часть | Технологии |
|---|---|
| panel backend | Python 3.12, FastAPI, aiosqlite (SQLite, WAL) |
| panel frontend | Vue 3, gnexus-ui-kit, chart.js |
| monitor | Python 3 (psutil, requests), systemd |
| Деплой | Docker / docker-compose |

## Быстрый старт (panel)

```bash
cp panel/backend/.env.example .env   # задай GHARD_ADMIN_TOKEN
docker compose up -d --build
```

API: `http://localhost:8000/docs` (OpenAPI)

## API (кратко)

- `POST /api/v1/servers` — создать сервер, получить ключ агента (показывается один раз)
- `POST /api/v1/ingest` — пакет метрик агента, заголовок `X-Server-Key`
- `GET /api/v1/servers` — сводка для дашборда
- `GET /api/v1/servers/{id}/metrics?since=…&until=…` — история для графиков
- `PATCH /api/v1/servers/{id}` — имя / заметка

## Статус

- [x] Этап 1 — скелет: FastAPI, SQLite-схема, ingest, servers API, docker
- [ ] Этап 2 — hard-monitor агент + install.sh
- [ ] Этап 3 — веб-интерфейс (Vue + ui-kit + chart.js)
- [ ] Этап 4 — ивенты + алерты (Telegram, webhook)
- [ ] Этап 5 — downsample истории (7 дней), финальный деплой