G-SERVICE Docs
Архитектура ISP (OSS/BSS)

Network Inventory Service

Устройства, порты, IPAM, топология сети, резервирование и учёт ресурсов.

Network Inventory Service

Bounded Context: Network Resource Management
Владелец данных: Device, Port, LogicalResource (IP, VLAN, MAC), Pool
Технологии: NestJS (Bun 1.3+), Drizzle ORM, PostgreSQL, ConnectRPC, RabbitMQ, BullMQ

Ответственность

Network Inventory — единый источник правды о сетевых ресурсах. Аналог модулей Networking в Splynx и Сетевые ресурсы в Hydra Billing, но с полноценным IPAM и topology management.

  • Device Registry: OLT, Switch, Router, BRAS, CPE — модель, vendor, firmware, статус, геолокация. Полный жизненный цикл устройства (procurement → active → maintenance → decommission).
  • Port Management: Физические порты, их занятость, резервирование с TTL (автоосвобождение при неиспользовании). Каскадный учёт: OLT port → splitter → ONT.
  • IPAM (IP Address Management): Управление IP-пулами (IPv4/IPv6), VLAN, MAC. Автоматическое выделение из пула при активации, освобождение при деактивации. Мониторинг утилизации пулов.
  • Topology: Связи между устройствами (uplink chains), расположение, зоны покрытия. Визуализация сетевой топологии.
  • Availability Check: Проверка техвозможности подключения по адресу — ключевая операция для Lead-to-Cash pipeline.
  • Capacity Planning: Мониторинг заполненности портов OLT, утилизации IP-пулов, алерты при приближении к лимитам.

Ключевые бизнес-сценарии

СценарийОписаниеAPI метод
Проверка техвозможностиКлиент оставил заявку → есть ли свободный порт/ресурсы по адресу?CheckAvailability
Резервирование портаOMS создал заказ → порт бронируется на 48ч с автоосвобождениемReservePort (TTL)
Привязка ресурсовProvisioning завершил активацию → порт + IP + VLAN привязываются к подпискеBindServiceInstance
ОсвобождениеРасторжение/компенсация → все ресурсы возвращаются в пулReleasePort, ReleaseIP
Алерт: ресурсы заканчиваютсяУтилизация пула > 85% → событие resource.exhaustedBackground job

Агрегаты

Device

Loading diagram...

LogicalResource (IP, VLAN)

Loading diagram...

ConnectRPC API

service InventoryService {
  rpc ListDevices(ListDevicesRequest) returns (ListDevicesResponse);
  rpc GetDevice(GetDeviceRequest) returns (GetDeviceResponse);
  rpc GetPortStatus(GetPortStatusRequest) returns (GetPortStatusResponse);
  rpc CheckAvailability(CheckAvailabilityRequest) returns (CheckAvailabilityResponse);
  rpc ReservePort(ReservePortRequest) returns (ReservePortResponse);
  rpc ReleasePort(ReleasePortRequest) returns (ReleasePortResponse);
  rpc BindServiceInstance(BindServiceInstanceRequest) returns (BindServiceInstanceResponse);
  rpc AllocateIP(AllocateIPRequest) returns (AllocateIPResponse);
  rpc ReleaseIP(ReleaseIPRequest) returns (ReleaseIPResponse);
}
МетодRBACIdempotentОписание
CheckAvailabilityisp-viewer+Есть ли свободный порт/ресурс по адресу
ReservePortisp-operator+Зарезервировать порт (TTL, auto-release)
ReleasePortisp-operator+Освободить порт (Saga compensation)
AllocateIPisp-operator+Выделить IP из пула
ReleaseIPisp-operator+Вернуть IP в пул

Доменные события

Exchange: inventory.events (Topic)

Routing KeyСобытиеПотребители
port.reservedPortReservedEvent— (audit)
port.releasedPortReleasedEvent— (audit)
resource.exhaustedResourceExhaustedEventNotification (алерт операторам)
device.status_changedDeviceStatusChangedEventNotification (алерт)

Port Reservation с TTL

Loading diagram...

Background Jobs (BullMQ)

JobРасписаниеОписание
inventory.expire_reservationsКаждый часОсвободить порты с истёкшим TTL
inventory.capacity_checkКаждые 4 часаПроверка ёмкости (% занятости по устройствам)
inventory.firmware_auditЕженедельноПроверка версий firmware, алерт при расхождении

Ссылки:

On this page