-
Kernel
-
Plugins
-
Billing
-
Collaboration
-
Planning
-
Messaging
-
Security
-
Service
-
Telecom [RU]
-
Release Notes
Kernel
Plugins
Billing
Collaboration
Planning
Messaging
Security
Service
Telecom [RU]
Release Notes
Плагин предназначен для мониторинга и управления OLT-устройствами (Optical Line Terminal) и ONU абонентов. Выполняет Telnet-опрос OLT-оборудования, хранит данные в локальной БД BGERP и интегрируется с BGBilling для маппинга MAC→абонент.
Возможности:
Встроенный Telnet-опрос OLT-устройств (BdCom, GateRay, CData) с автоопределением vendor
Отображение данных ONU на вкладке процесса и вкладке договора BGBilling
Страница управления OLT — CRUD, массовый/выборочный опрос, просмотр портов/ONU
Импорт OLT из биллинга и автоматический маппинг MAC→абонент
Фильтрация OLT по биллингу, статусу, вендору + текстовый поиск (MAC/договор/ФИО/адрес)
Цветовая подсветка проблемных RX-сигналов (пересвет, средний, плохой)
Перезагрузка ONU с cooldown-защитой (5 мин)
Активация/замена ONU — обновление MAC-адреса в биллинге
Автоматическое создание записок в процессе при выполнении действий
Опрос по расписанию (scheduler task) с защитой от зависания статуса UPDATING
Компоненты системы:
BGERP — вкладки процесса и договора, страница управления OLT
Telnet-опрос — встроенный Telnet-клиент для прямого подключения к OLT-устройствам
BGBilling Webhooks (JSON-RPC) — импорт OLT, маппинг MAC→абонент, управление MAC/сессиями
MySQL (BGERP) — локальное хранение данных OLT, портов, ONU
| Vendor | Класс | Описание |
|---|---|---|
|
BDCOM |
|
BdCom GP3600-08B и аналоги |
|
GATERAY |
|
GateRay EPON до 2020 |
|
GATERAY2020 |
|
GateRay EPON 2020+ |
|
CDATA |
|
CData EPON |
|
CDATA_GPON |
|
CData GPON |
|
CDATA_FD1608 |
|
CData FD1608S-B1 |
|
CDATA_FD1208 |
|
CData FD1208S-B1 |
src/org/bgerp/plugin/bgb/getolt/
├── Plugin.java # Регистрация плагина, миграции БД, сброс UPDATING
├── Config.java # Конфигурация (операторы, billing, auto-discovery)
├── action/
│ ├── GetOltAction.java # Вкладка процесса + вкладка договора
│ └── OltManageAction.java # Управление OLT: CRUD, опрос, порты/ONU
├── dao/
│ ├── Tables.java # Константы таблиц
│ ├── OltDAO.java # CRUD OLT-устройств
│ ├── OltPortDAO.java # CRUD портов
│ ├── OltOnuDAO.java # CRUD ONU
│ ├── InetMacApiClient.java # JSON-RPC к BGBilling (webhooks)
│ └── GetOltApiClient.java # HTTP-клиент внешнего API (legacy, не используется)
├── model/
│ ├── Olt.java, OltPort.java, OltOnu.java, OltStatus.java
│ ├── OpticalInfo.java, BillingConfig.java
│ ├── OnuData.java, OnuSearchResult.java, OnuApiResponse.java
│ ├── InetService.java, MacUpdateResult.java
│ ├── RefreshResult.java, SessionDropResult.java
│ └── json/ # Jackson deserializers
├── exec/
│ ├── OltPollingTask.java # Scheduler task (Telnet + billing mapping)
│ └── OltPollingService.java # Thread pool, per-port commit
├── telnet/
│ ├── TelnetSession.java # Apache Commons Net TelnetClient
│ ├── TelnetCommandResult.java
│ ├── OltDevice.java # Абстрактный OLT
│ ├── OltDeviceFactory.java # Фабрика + автодетект vendor
│ └── vendor/ # 7 вендор-классов
├── util/
│ ├── MacAddressConverter.java
│ └── TimeParserUtil.java
├── action.xml # Права доступа
├── db.sql # Схема БД
└── l10n.xml # Локализация
webapps/WEB-INF/jspf/user/plugin/getolt/
├── process_tabs.jsp # Регистрация вкладки процесса
├── menu_items.jsp # Пункт меню "OLT"
├── onu_info.jsp # UI данных ONU (общий для процесса и договора)
└── manage/
├── list.jsp # Список OLT с фильтрами
├── edit.jsp # Форма OLT
├── ports.jsp # Таблица портов
└── onus.jsp # Таблица ONU
webapps/js/pl.getolt.js # JavaScript модуль
webapps/css/plugin/style.getolt.css.jsp # CSS стили
В UI Администрирование → Конфигурация → добавить или открыть конфиг:
# Включить плагин
getolt:enable=1
# Параметр процесса "Оператор" (param_list)
getolt:operator.paramId=68
getolt:operator.default=РТЦ
# Маппинг значений параметра на операторов
getolt:operator.mapping.1=Омиплат
getolt:operator.mapping.2=Омикрон
getolt:operator.mapping.3=Рокет
getolt:operator.mapping.4=РТЦ
getolt:operator.mapping.5=Флеш
# Маппинг billingId → имя оператора (для ссылок на договоры)
getolt:operator.billing.omicron=ЮТК
getolt:operator.billing.rocket=Рокет
# Общие credentials для billing webhooks (auto-discovery режим)
getolt:webhook.user=YOUR_WEBHOOK_USER
getolt:webhook.password=YOUR_WEBHOOK_PASSWORD
# Per-billing credential override (опционально)
# getolt:inetmac.rocket.user=special_user
# getolt:inetmac.rocket.password=special_pass
Подключить конфиг к основному (если не подключён): #include.{id}=1
Перезапустить сервер
При отсутствии явных getolt:inetmac.*.url конфигов плагин автоматически обнаруживает биллинг-серверы из плагина bgbilling (DBInfoManager):
URL webhook-ов строятся из DB URL каждого биллинга + path вебхука
Credentials: getolt:webhook.user/password (общие) или getolt:inetmac.{billingId}.user/password (override)
Ключи в конфигах = billingId (rocket, omicron…), НЕ имена операторов
В Администрирование → Типы процессов → выбрать тип → Конфигурация:
getolt:processShowTab=1
В Администрирование → Наборы прав → выбрать набор, найти "Plugin GetOLT":
| Право | Описание |
|---|---|
|
|
Просмотр ONU (вкладка процесса) |
|
|
Просмотр ONU (вкладка договора BGBilling) |
|
|
Обновление порта OLT (Telnet) |
|
|
Перезагрузка ONU |
|
|
Активация/замена ONU (обновление MAC в биллинге) |
|
|
Просмотр списка OLT (страница управления) |
|
|
Получение OLT (форма) |
|
|
Добавление/редактирование OLT |
|
|
Удаление OLT |
|
|
Запуск опроса одного OLT |
|
|
Массовый/выборочный опрос OLT |
|
|
Импорт OLT из биллинга |
|
|
Просмотр портов OLT |
|
|
Обновление одного порта |
|
|
Просмотр ONU порта |
|
|
Ручной запуск маппинга MAC→абонент |
Вкладка отображается на странице процесса при выполнении условий:
Плагин включён (getolt:enable=1)
Тип процесса имеет настройку getolt:processShowTab=1
У пользователя есть право getolt:null
К процессу привязан договор (contract link)
Вкладка появляется на карточке договора BGBilling при:
Плагин включён (getolt:enable=1)
У пользователя есть право getolt:contractOnu
Данные ONU ищутся напрямую по operator + contractId/numDogovor — без привязки к процессу.
Карточка отображает:
Заголовок: MAC-адрес, статус (ONLINE/OFFLINE), время последнего обновления
Кнопки: Обновить порт, Перезагрузить ONU (при наличии прав)
Данные:
OLT IP
Порт / ONU ID
Сигнал RX/TX (с цветовой индикацией качества)
Дистанция (м)
Температура (°C)
Напряжение (V)
MAC за ONU (список)
Соседи по порту (таблица)
Таблица соседей отображает все ONU на том же порту OLT. Текущая ONU абонента выделена жёлтым цветом. Качество сигнала (RX) подсвечивается цветом.
Подсвечиваются только проблемные значения RX. Нормальный сигнал — без подсветки. TX и температура не подсвечиваются.
| Качество | RX диапазон | Цвет |
|---|---|---|
|
Засвет (overexposed) |
> -15 dBm |
Голубой (#17a2b8) |
|
Хороший (good) |
-15 до -25 dBm |
(без подсветки) |
|
Средний (medium) |
-25 до -27 dBm |
Оранжевый (#e6a000) |
|
Плохой (poor) |
< -27 dBm |
Красный (#dc3545) |
Страница доступна через меню "OLT" (право manage:null).
Функции:
Таблица OLT — IP, vendor, billing, порты, ONU (active/total), статус, last update
Фильтры — биллинг, статус, vendor (combo-check) + текстовый поиск
CRUD — создание, редактирование, удаление OLT
Опрос — ручной опрос одного OLT или массовый (чекбоксы + кнопка "Обновить все/N")
Порты/ONU — expandable rows с детальной информацией
Импорт — загрузка списка OLT из биллинга
Маппинг — ручной запуск сопоставления MAC→абонент
Плагин использует BGBilling webhooks для:
| Webhook | Назначение |
|---|---|
|
|
Импорт списка OLT из биллинга |
|
|
Маппинг MAC→абонент (operator, contractId, numDogovor, FIO, addr) |
|
|
getServicesByContractId, updateMacAddress, dropSession |
URL webhook-ов строятся заменой path в базовом InetMac URL. Все используют одни credentials из конфига.
Плагин определяет оператора в следующем порядке:
Параметр процесса "Оператор" (param_list)
ID параметра: getolt:operator.paramId
Маппинг значений: getolt:operator.mapping.{valueId}
Billing ID из contract link
Формат link: contract:{billingId}
Маппинг: getolt:operator.billing.{billingId}
Значение по умолчанию
getolt:operator.default
# Telnet-опрос
grep "OltPollingService\|OltPollingTask" log/bgerp.log
# Действия пользователя
grep "GetOltAction\|OltManageAction" log/bgerp.log
# Billing webhooks
grep "InetMacApiClient" log/bgerp.log
| Проблема | Причина | Решение |
|---|---|---|
|
Вкладка процесса не появляется |
Плагин не включён или нет прав |
Проверить |
|
"Нет привязанных договоров" |
У процесса нет contract link |
Привязать договор к процессу |
|
"ONU не найдена" |
OLT не опрошен или маппинг не выполнен |
Запустить опрос OLT + маппинг на странице управления |
|
OLT завис в UPDATING |
Ошибка при опросе (перезапуск сервера сбросит) |
Перезапустить BGERP или подождать следующий цикл scheduler |
|
500 при фильтрах OLT |
Отсутствует синоним |
Проверить |
|
Пустой vendor после импорта |
Vendor определяется отдельным циклом |
Подождать следующий цикл scheduler или запустить опрос вручную |
|
Кнопка перезагрузки заблокирована |
Cooldown 5 мин после предыдущей перезагрузки |
Подождать 5 минут или очистить localStorage |
-- Проверить, что плагин включён
SELECT * FROM config_global WHERE config LIKE '%getolt:enable%';
-- Проверить настройки типа процесса
SELECT id, title, config FROM process_type
WHERE config LIKE '%getolt:processShowTab%';
-- Проверить права
SELECT pp.permset_id, pt.title, pp.action
FROM user_permset_permission pp
JOIN user_permset_title pt ON pp.permset_id = pt.id
WHERE pp.action LIKE '%getolt%';
-- Проверить OLT в БД
SELECT id, ip, vendor, billing, status, last_update FROM getolt_olt ORDER BY ip;
-- Количество ONU
SELECT o.ip, COUNT(onu.id) AS onu_count
FROM getolt_olt o LEFT JOIN getolt_olt_onu onu ON o.id = onu.olt_id
GROUP BY o.id ORDER BY o.ip;
Проверка формата: XX:XX:XX:XX:XX:XX
Нормализация различных форматов (дефисы, точки, пробелы, без разделителей)
Защита от кириллических символов (А, В, С, Е похожи на латинские)
Преобразование в верхний регистр