Initial scaffold and technical specification
Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# Техническое задание (v1)
|
||||
|
||||
## Цель
|
||||
|
||||
Создать кроссплатформенное веб-приложение на Go для:
|
||||
|
||||
- обнаружения устройств в сети;
|
||||
- базовой идентификации устройств;
|
||||
- получения LLDP-соседей;
|
||||
- построения карты связей между устройствами.
|
||||
|
||||
## Платформы и запуск
|
||||
|
||||
- Backend: Go 1.22+
|
||||
- ОС: Linux и Windows
|
||||
- Запуск: стандартными средствами (без Docker)
|
||||
- Reverse proxy: Nginx (Linux) или IIS (Windows, опционально)
|
||||
|
||||
## Функциональные требования v1
|
||||
|
||||
- ручной запуск скана по заданным CIDR;
|
||||
- ping sweep по диапазонам;
|
||||
- проверка базовых TCP-портов (`22, 80, 443, 161`);
|
||||
- SNMP v2c: `sysName`, `sysDescr`, `sysObjectID`;
|
||||
- сбор LLDP соседей по SNMP;
|
||||
- сохранение результатов скана в БД;
|
||||
- построение графа связей устройств;
|
||||
- история сканов и сравнение изменений.
|
||||
|
||||
## Нефункциональные требования
|
||||
|
||||
- кроссплатформенная сборка (Linux/Windows);
|
||||
- устойчивость к частичным ошибкам в сети;
|
||||
- конфигурируемые таймауты и параллелизм;
|
||||
- разграничение прав (`admin`, `viewer`);
|
||||
- логирование ошибок и действий.
|
||||
|
||||
## Архитектура
|
||||
|
||||
- `cmd/server` — запуск HTTP API
|
||||
- `internal/api` — обработчики и роуты
|
||||
- `internal/scans` — логика создания/ведения scan jobs
|
||||
- `internal/scanner/*` — ping, ports, snmp, lldp (поэтапно)
|
||||
- `internal/store` — PostgreSQL-репозиторий
|
||||
- `web` — интерфейс (следующий этап)
|
||||
|
||||
## Минимальные API
|
||||
|
||||
- `GET /health`
|
||||
- `POST /api/scans`
|
||||
- `GET /api/scans/{id}`
|
||||
- `GET /api/topology`
|
||||
- `GET /api/topology/diff?from=&to=`
|
||||
|
||||
## Модель данных (минимум)
|
||||
|
||||
- `users`
|
||||
- `snmp_credentials`
|
||||
- `scan_jobs`
|
||||
- `devices`
|
||||
- `open_ports`
|
||||
- `lldp_neighbors`
|
||||
- `links`
|
||||
|
||||
## SNMP OID минимум
|
||||
|
||||
- `1.3.6.1.2.1.1.5.0` (`sysName`)
|
||||
- `1.3.6.1.2.1.1.1.0` (`sysDescr`)
|
||||
- `1.3.6.1.2.1.1.2.0` (`sysObjectID`)
|
||||
- `1.0.8802.1.1.2.1.4.1.1.5` (`lldpRemChassisId`)
|
||||
- `1.0.8802.1.1.2.1.4.1.1.7` (`lldpRemPortId`)
|
||||
- `1.0.8802.1.1.2.1.4.1.1.9` (`lldpRemSysName`)
|
||||
|
||||
## Этапы
|
||||
|
||||
1. Каркас API и scan jobs
|
||||
2. PostgreSQL и миграции
|
||||
3. Ping + port scan
|
||||
4. SNMP system + LLDP
|
||||
5. Граф топологии в UI
|
||||
6. История и diff
|
||||
|
||||
## Критерии приемки v1
|
||||
|
||||
- скан по CIDR создается и завершается;
|
||||
- живые узлы фиксируются в результатах;
|
||||
- SNMP-доступные устройства читаются;
|
||||
- LLDP-связи строятся минимум на тестовой сети;
|
||||
- топология отображается в интерфейсе;
|
||||
- приложение запускается на Linux и Windows.
|
||||
Reference in New Issue
Block a user