Initial commit: InfoUser Monitor with FastAPI, agent, Docker, JWT auth, notifications, filters and CSV export

This commit is contained in:
2026-07-16 11:53:51 +07:00
commit cf2727da2b
31 changed files with 1957 additions and 0 deletions
+140
View File
@@ -0,0 +1,140 @@
# InfoUser Monitor
Мониторинг состояния ПК (Windows/Linux/macOS). Агент на каждом компьютере отправляет метрики на сервер раз в час, а веб-интерфейс показывает список машин, пользователей, IP, CPU/RAM, диски и процессы.
## Возможности
- **Дашборд** с фильтрами по статусу, пользователю и поиском по хосту/IP/OS
- **Графики** CPU/RAM за 24 часа на странице ПК
- **Уведомления** об офлайн-ПК (in-app + webhook + Telegram)
- **Экспорт** списка ПК в CSV
- **JWT-авторизация** с ролями admin/viewer
## Структура
```
info-user/
├── server/ # FastAPI + веб-интерфейс
│ ├── routes/
│ ├── templates/
│ ├── static/
│ ├── Dockerfile
│ └── main.py
├── agent/ # Python-агент
│ ├── agent.py
│ ├── config.json
│ └── install.sh
├── data/ # SQLite БД (создаётся при запуске)
├── docker-compose.yml
├── nginx.conf
└── README.md
```
## Быстрый старт
1. **Клонировать/скопировать проект** и перейти в папку:
```bash
cd /home/user/moder/info-user
```
2. **Создать файл окружения** (опционально, но рекомендуется):
```bash
cat > .env <<EOF
SECRET_KEY=your-very-secret-key-here
AGENT_TOKEN=your-agent-token-here
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
HTTP_PORT=80
OFFLINE_THRESHOLD_MINUTES=130
NOTIFICATION_WEBHOOK_URL=
NOTIFICATION_TELEGRAM_BOT_TOKEN=
NOTIFICATION_TELEGRAM_CHAT_ID=
EOF
```
3. **Запустить сервер**:
```bash
docker compose up -d --build
```
4. **Открыть веб-интерфейс**:
```
http://localhost
```
Логин/пароль по умолчанию: `admin` / `admin`.
5. **Установить агент** на клиентский ПК (Linux):
```bash
cd agent
sudo bash install.sh
```
Не забудьте отредактировать `agent/config.json`, указав `server_url` и `agent_token`.
## Настройка агента
Файл `agent/config.json`:
```json
{
"server_url": "http://your-server-ip",
"agent_token": "your-agent-token-here",
"interval_minutes": 60,
"send_public_ip": false
}
```
## Собираемые данные
- Имя хоста, текущий пользователь, локальный IP
- Операционная система
- Uptime
- Загрузка CPU и RAM
- Информация по дискам
- Температура CPU (если доступна)
- Top-10 процессов по CPU
## API
- `POST /api/heartbeat` — приём данных от агента
- `GET /api/computers` — список компьютеров (с фильтрами `status`, `user`, `search`, `sort`, `order`)
- `GET /api/computers/export/csv` — экспорт в CSV
- `GET /api/computers/{id}` — детали ПК с историей
- `GET /api/notifications` — уведомления
- `POST /api/notifications/{id}/read` — отметить прочитанным
- `POST /api/notifications/read-all` — отметить все прочитанными
- `POST /api/auth/login` — вход в веб-интерфейс
- `POST /api/auth/register` — регистрация нового пользователя (viewer)
## Уведомления об офлайн-ПК
ПК считается офлайн, если не присылал heartbeat в течение `OFFLINE_THRESHOLD_MINUTES` минут.
Доступные каналы:
- **In-app** — всегда, список уведомлений в веб-интерфейсе
- **Webhook** — отправка POST JSON на `NOTIFICATION_WEBHOOK_URL`
- **Telegram** — отправка сообщения в чат, если указаны `NOTIFICATION_TELEGRAM_BOT_TOKEN` и `NOTIFICATION_TELEGRAM_CHAT_ID`
## Безопасность
- Смените `SECRET_KEY` и `AGENT_TOKEN` в `.env`.
- Используйте HTTPS в production (nginx + certbot).
- Ограничьте доступ к `/api/heartbeat` по IP или сети.
- Пользователи с ролью `viewer` могут только смотреть дашборд.
## Требования
- Docker + Docker Compose
- Python 3.11+ (для локального запуска без Docker)
- Linux на клиентских ПК для systemd-таймера (для Windows можно запускать через Task Scheduler)
## Лицензия
MIT / как есть.