9afbbbb762
Store checked hosts for each scan and add API to fetch host-level up/down probe results. Made-with: Cursor
4.0 KiB
4.0 KiB
nettopo-go
Минимальный старт проекта сетового инвентаризатора и топологии на Go без Docker.
Что уже есть
GET /health- проверка состояния API.POST /api/scans- создание задания скана.GET /api/scans- список сканов.GET /api/scans/{id}- просмотр созданного задания.GET /api/scans/{id}/hosts- результаты проверки хостов по скану.- Валидация CIDR и exclude IP.
- Два backend-хранилища: in-memory и PostgreSQL.
- После создания scan запускается фоновый discovery с обновлением статуса и прогресса.
Требования
- Go 1.22+
Проверка версии:
go version
Запуск локально
- Перейдите в проект:
cd nettopo-go
- Скопируйте переменные окружения:
cp .env.example .env
- Запустите API:
HTTP_ADDR=:8080 go run ./cmd/server
По умолчанию используется STORE_BACKEND=memory.
PostgreSQL без Docker
Вариант A: macOS (Homebrew)
brew install postgresql@16
brew services start postgresql@16
createdb nettopo
createuser nettopo
psql -d postgres -c "alter user nettopo with password 'nettopo';"
psql -d postgres -c "grant all privileges on database nettopo to nettopo;"
Вариант B: Ubuntu/Debian
sudo apt update
sudo apt install -y postgresql postgresql-contrib
sudo -u postgres psql -c "create user nettopo with password 'nettopo';"
sudo -u postgres psql -c "create database nettopo owner nettopo;"
Вариант C: Windows
- Установить PostgreSQL через официальный installer.
- Создать БД
nettopoи пользователяnettopo(через pgAdmin илиpsql).
Запуск API с PostgreSQL
export STORE_BACKEND=postgres
export DB_DSN='postgres://nettopo:nettopo@localhost:5432/nettopo?sslmode=disable'
export RUN_MIGRATIONS=true
go run ./cmd/server
При первом запуске автоматически применится миграция scan_jobs.
Быстрая проверка API
Проверка health:
curl -s http://localhost:8080/health
Создать scan:
curl -s -X POST http://localhost:8080/api/scans \
-H "Content-Type: application/json" \
-d '{
"name":"Office scan",
"cidrs":["192.168.1.0/24"],
"exclude_ips":["192.168.1.1"],
"options":{
"ping_timeout_ms":700,
"ping_retries":1,
"max_parallel_hosts":128,
"port_scan_enabled":true,
"ports":[22,80,443,161]
}
}'
Получить scan по id:
curl -s http://localhost:8080/api/scans/<scan_id>
Получить список scan jobs:
curl -s http://localhost:8080/api/scans?limit=20
В ответе у scan есть:
status:queued,running,done,failedprogress: 0..100stats.hosts_total,stats.hosts_up
Получить результаты по хостам:
curl -s http://localhost:8080/api/scans/<scan_id>/hosts?limit=200
Запуск как сервис на Linux (systemd)
- Собрать бинарник:
go build -o nettopo-server ./cmd/server
- Скопировать unit-файл:
sudo cp deploy/nettopo-go.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now nettopo-go
- Проверить статус:
systemctl status nettopo-go
Размещение за IIS на Windows
- Запускать
nettopo-server.exeкак Windows Service. - На IIS настроить Reverse Proxy к
http://localhost:8080. - Требуются URL Rewrite + ARR.
Шаблон web.config лежит в deploy/web.config.example.