Initial commit: InfoUser Monitor with FastAPI, agent, Docker, JWT auth, notifications, filters and CSV export
This commit is contained in:
@@ -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 / как есть.
|
||||
Reference in New Issue
Block a user