BG Биллинг - универсальная биллинговая система
Настройка Insserv
- bgbilling.sh, bgcommonrc.sh, bgdataloader.sh, bgscheduler.sh, ActiveMQ.sh
#!/bin/bash ### BEGIN INIT INFO # Provides: bgbilling # Required-Start: mysql activemq # Required-Stop: mysql activemq # Default-Start: 2 # Default-Stop: 0 6 # Description: Start BGBilling ### END INIT INFO cat bgcommonrc #!/bin/bash ### BEGIN INIT INFO # Provides: bgcommonrc # Required-Start: # Required-Stop: # Default-Start: 2 # Default-Stop: 0 6 # Description: Start bgcommonrc ### END INIT INFO cat bgdataloader #!/bin/bash ### BEGIN INIT INFO # Provides: bgdataloader # Required-Start: bgbilling # Required-Stop: bgbilling # Default-Start: 2 # Default-Stop: 0 6 # Description: Start bgdataloader ### END INIT INFO cat bgscheduler #!/bin/bash ### BEGIN INIT INFO # Provides: bgscheduler # Required-Start: bgbilling # Required-Stop: bgbilling # Default-Start: 2 # Default-Stop: 0 6 # Description: Start bgscheduler ### END INIT INFO ### BEGIN INIT INFO # Provides: ActiveMQ # Required-Start: # Required-Stop: # Default-Start: 2 # Default-Stop: 0 6 # Description: Start ActiveMQ ### END INIT INFO
Утилиты для работы с init.d
- sysv-rc-conf
- update-rc.d
- insserv
Утилиты для приведения файла к формату unix
- unix2dos
Добавляем ActiveMQ в автозагрузку
ln -s /opt/apache-activemq-5.4.2/bin/linux-x86-32/activemq /etc/init.d/activemq
Статус сервера:
root@srv1-billing-vtelecom:~# /etc/init.d/bgbilling status
Bывод:
BGBillingServer v 5.2 build 1375 from 20.12.2012 19:06:51 Started: 13.02.2013 18:45:26 Uptime: 0 d 00:23:26 Memory total: 58 261 504; max: 238 616 576; free: 38 599 344 Memory pools: Non-heap memory[Code Cache]: max: 50 331 648; used: 866 944; peek: 877 120 Heap memory[PS Eden Space]: max: 82 378 752; used: 14 065 408; peek: 32 833 536 Heap memory[PS Survivor Space]: max: 3 276 800; used: 3 180 624; peek: 3 180 624 Heap memory[PS Old Gen]: max: 178 978 816; used: 2 416 128; peek: 2 416 128 Non-heap memory[PS Perm Gen]: max: 67 108 864; used: 19 966 848; peek: 19 966 848 Thread count: 19 Connections pool to Master status Idle: 1; Active: 0; maxActive: 300; maxIdle: 20
Параметры запуска клиента BGBilling.
В файле запуска клиента можно указывать следующие параметры:
-Dbgbilling.transfer.debug=true - выводить debug -Dbgbilling.client.os=linux - операционная система. -Dlocal.setting.file.name=config_v.4.5 - имя файла с настройками в папке пользователя. -Dsun.net.client.defaultConnectTimeout=1000 - таймаут получения URL для клиента, если в FOP, например, есть недоступная картинка. -Duser.home - домашаняя папка клиента (в которой хранится local.setting.file.name) -Dshared.client.distribution=1 - при обновлении клиента в сетевой папке, все запущенные клиенты перезагружаются.
Настройка меню клиента BGBilling.
Меню и панель инструментов могут быть настроены редактированием файла BGBillingServer/data/menu.xml и toolbar.xml. Установленные плагины и модули могут дополнять содержимое меню и панели инструментов новыми пунктами.
Отключение фонового рисунка
В клиентском приложении есть возможность отключить фоновый рисунок (например, при использовании терминал сервера), добавьте в BGBillingClient/client.properties
bg.enable=0
Hotkeys
Для быстрого комментирования отдельных строк и блоков: ctrl+shift+C.
Снапшоты
Для сохранения текущего состояния библиотек биллинга, каталога webroot, данных по установленным модулям и плагинам в БД с BGBilling поставляется скрипт snapshot.sh. Для создания снапшота вызовите перед обновлением:
./snapshot.sh create
Снапшоты сохраняются архивами в каталог BGBillingServer/snapshots. Для восстановления снапшота команда:
./shapshot.sh restore <FILE>
, где <FILE> - имя файла со снапшотом.
Восстановив сервер из снапшота необходимо обновить с него все другие серверные приложения. Функционал скрипта реализован исключительно сторонними приложениями и может быть легко скорректирован.
Настройка BGInetAccess
Скрипт запуска BGInetAccess
- BGInetAccess
#!/bin/bash ### BEGIN INIT INFO # Provides: BGInetAccess # Required-Start: mysql activemq bgbilling # Required-Stop: mysql activemq bgbilling # Default-Start: 2 # Default-Stop: 0 6 # Description: Start BGInetAccess ### END INIT INFO BGINET_ACCESS_HOME=/usr/local/BGInetAccess case "$1" in start) $BGINET_ACCESS_HOME/access_start.sh ;; stop) $BGINET_ACCESS_HOME/access_stop.sh ;; restart) $BGINET_ACCESS_HOME/access_stop.sh $BGINET_ACCESS_HOME/access_start.sh ;; *) echo "Usage: $0 start | stop | restart" >&2 exit 1 ;; esac
Настройка сервера осуществляется путем редактирования файла inet-access.xml
<?xml version="1.0" encoding="UTF-8"?> <application context="access"> <!-- Уникальное имя приложения --> <param name="app.name" value="BGInetAccess"/> <!-- Уникальный числовой id приложения --> <param name="app.id" value=""/> <!-- Параметры подключения к БД --> <param name="db.driver" value="com.mysql.jdbc.Driver"/> <param name="db.url" value="jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&characterEncoding=Cp1251&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&queryTimeoutKillsConnection=true&connectTimeout=1000"/> <param name="db.user" value="bill"/> <param name="db.pswd" value="bgbilling"/> <param name="db.validationTimeout" value="10"/> <!-- Параметры подключения к MQ --> <param name="mq.url" value="failover:(tcp://localhost:61616)"/> <param name="mq.user" value="bill"/> <param name="mq.pswd" value="bgbilling"/> <!-- id модуля --> <param name="moduleId" value=""/> <!-- id корневого устройства --> <param name="rootDeviceId" value=""/> <!-- Типы фейковых устройств, являющихся аккаунтинг серверами --> <param name="accounting.deviceTypeIds" value=""/> <!-- Внутренняя переменная приложения, не изменять --> <param name="commonIdentifierName" value="rootDeviceId"/> <!-- Параметры сохранения логов данных --> <!-- Директория, в которую сохранять radius логи --> <param name="datalog.radius.dir" value="data/radius" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл --> <param name="datalog.radius.chunk.size" value="262144" /> <!-- Сжимать radius логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.radius.compression.type" value="1" /> <!-- Директория, в которую сохранять flow логи --> <param name="datalog.dhcp.dir" value="data/dhcp" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл --> <param name="datalog.dhcp.chunk.size" value="131072" /> <!-- Сжимать flow логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.dhcp.compression.type" value="1" /> <!-- Создание Access --> <bean name="access" class="ru.bitel.bgbilling.modules.inet.access.Access" /> <context name="radius"> <!-- Cоздание процессора radius-пакетов --> <bean name="radiusProcessor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/> <!-- Служебный ScheduledExecutorService, необходимый для dataLogger --> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" /> <!-- Cоздание dataLogger, сохраняющего radius-пакеты на диск (только один экземпляр) --> <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя radius-пакетов на порту с передачей ему процессора и dataLogger --> <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener"> <constructor> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value=""/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="1812"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">512 * 1024</param> <!-- Рекомендуемый SO_RCVBUF сокета --> <param name="soRCVBUF"></param> <!-- Количество потоков-обработчиков --> <param name="threadCount">10</param> <!-- Максимальное количество пакетов в очереди на обработку --> <param name="maxQueueSize">200</param> <!-- Передача процессора --> <param name="processor">radiusProcessor</param> <!-- Режим работы, RadiusListener.Mode.authentication --> <param name="mode">RadiusListener.Mode.authentication</param> <!-- Передача dataLogger --> <param name="dataLogger">radiusDataLogger</param> </constructor> </bean> </context> <context name="dhcp"> <!-- Cоздание процессора dhcp-пакетов --> <bean name="dhcpProcessor" class="ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor"/> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" /> <!-- Cоздание dataLogger, сохраняющего dhcp-пакеты на диск --> <bean name="dhcpDataLogger" class="ru.bitel.bgbilling.modules.inet.dhcp.DhcpHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя dhcp-пакетов на порту с передачей ему процессора и dataLogger --> <bean name="dhcpListener" class="ru.bitel.bgbilling.kernel.network.dhcp.DhcpListener"> <constructor> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value=""/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="10067"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">512 * 1024</param> <!-- Количество потоков-обработчиков --> <param name="threadCount">10</param> <!-- Максимальное количество пакетов в очереди на обработку --> <param name="maxQueueSize">200</param> <!-- Передача процессора --> <param name="processor">dhcpProcessor</param> <!-- Передача dataLogger --> <param name="dataLogger">dhcpDataLogger</param> </constructor> </bean> </context> </application>
Настройка BGInetAccounting
Скрипт запуска BGInetAccountin
#!/bin/bash ### BEGIN INIT INFO # Provides: BGInetAccounting # Required-Start: mysql activemq bgbilling # Required-Stop: mysql activemq bgbilling # Default-Start: 2 # Default-Stop: 0 6 # Description: Start BGInetAccounting ### END INIT INFO BGINET_ACCOUNTING_HOME=/usr/local/BGInetAccounting case "$1" in start) $BGINET_ACCOUNTING_HOME/accounting_start.sh ;; stop) $BGINET_ACCOUNTING_HOME/accounting_stop.sh ;; restart) $BGINET_ACCOUNTING_HOME/accounting_stop.sh $BGINET_ACCOUNTING_HOME/accounting_start.sh ;; *) echo "Usage: $0 start | stop | restart" >&2 exit 1 ;; esac
Настройка сервера осуществляется путем редактирования файла inet-accounting.xml
<?xml version="1.0" encoding="UTF-8"?> <application context="accounting"> <!-- Уникальное имя приложения --> <param name="app.name" value="BGInetAccounting"/> <!-- Уникальный числовой id приложения --> <param name="app.id" value="98"/> <!-- Параметры подключения к БД --> <param name="db.driver" value="com.mysql.jdbc.Driver"/> <param name="db.url" value="jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&characterEncoding=Cp1251&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&queryTimeoutKillsConnection=true&$ <param name="db.user" value="bill"/> <param name="db.pswd" value="naPQ7Ovif63Z0Z7q"/> <param name="db.validationTimeout" value="10"/> <!-- Параметры подключения к MQ --> <param name="mq.url" value="failover:(tcp://localhost:61616)"/> <param name="mq.user" value="bill"/> <param name="mq.pswd" value="bgbilling"/> <!-- id модуля --> <param name="moduleId" value=""/> <!-- id корневого устройства --> <param name="rootDeviceId" value=""/> <!-- Внутренняя переменная приложения, не изменять --> <param name="commonIdentifierName" value="rootDeviceId"/> <!-- Параметры сохранения radius-пакетов в файлы логов --> <!-- Директория, в которую сохранять radius логи --> <param name="datalog.radius.dir" value="data/radius" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл --> <param name="datalog.radius.chunk.size" value="524288" /> <!-- Сжимать radius логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.radius.compression.type" value="1" /> <!-- Параметры сохранения flow-пакетов в файлы логов --> <!-- Директория, в которую сохранять flow логи --> <param name="datalog.flow.dir" value="data/flow" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл и поток слушателя --> <param name="datalog.flow.chunk.size" value="524288" /> <!-- Сжимать flow логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.flow.compression.type" value="1" /> <!-- Создание Accounting --> <bean name="accounting" class="ru.bitel.bgbilling.modules.inet.accounting.Accounting"/> <context name="radius"> <!-- Cоздание процессора radius-пакетов --> <bean name="radiusProcessor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/> <!-- Служебный ScheduledExecutorService, необходимый для dataLogger --> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1"/> <!-- Cоздание dataLogger, сохраняющего radius-пакеты на диск (только один экземпляр) --> <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя radius-пакетов на порту с передачей ему процессора и dataLogger --> <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener"> <constructor> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value=""/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="1813"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">1 * 1024 * 1024</param> <!-- Рекомендуемый SO_RCVBUF сокета --> <param name="soRCVBUF"></param> <!-- Количество потоков-обработчиков --> <param name="threadCount">10</param> <!-- Максимальное количество пакетов в очереди на обработку --> <param name="maxQueueSize">200</param> <!-- Передача процессора --> <param name="processor">radiusProcessor</param> <!-- Режим работы, RadiusListener.Mode.accounting --> <param name="mode">RadiusListener.Mode.accounting</param> <!-- Передача setup --> <param name="setup">setup</param> <!-- Передача dataLogger --> <param name="dataLogger">radiusDataLogger</param> </constructor> </bean> </context> <!-- Cоздание процессора flow-пакетов --> <context name="collector"> <!-- Служебный ScheduledExecutorService, необходимый для dataLogger --> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1"/> <!-- Cоздание dataLogger, сохраняющего flow-пакеты на диск (только один экземпляр) --> <bean name="flowDataLogger" class="ru.bitel.bgbilling.modules.inet.collector.IPHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя flow-пакетов на порту с передачей ему dataLogger --> <bean name="flowListener" class="ru.bitel.bgbilling.modules.inet.collector.InetFlowListener"> <constructor factoryMethod="newInstance"> <!-- Тип слушателя, netflow, netflow9 или sflow --> <param name="type" value="netflow"/> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value=""/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="2001"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">4 * 1024 * 1024</param> <!-- Рекомендуемый SO_RCVBUF сокета --> <param name="soRCVBUF">512 * 1024</param> <!-- Количество потоков-обработчиков --> <param name="threadCount" value="10"/> <!-- id устройств-источников, если на данном порту нужно обрабатывать данные только у определенных источников --> <param name="agentDeviceIds" value=""/> <!-- Передача dataLogger --> <param name="dataLogger">flowDataLogger</param> </constructor> </bean> <!-- <bean name="flowListener" class="ru.bitel.bgbilling.modules.inet.collector.InetFlowListener"> <constructor factoryMethod="newInstance"> <param name="type" value="netflow9"/> <param name="host" value=""/> <param name="port" value="9367"/> <param name="recvBufferSize">4 * 1024 * 1024</param> <param name="soRCVBUF">512 * 1024</param> <param name="threadCount" value="8"/> <param name="agentDeviceIds" value="4"/> <param name="dataLogger">flowDataLogger</param> </constructor> </bean> <bean name="flowListener" class="ru.bitel.bgbilling.modules.inet.collector.InetFlowListener"> <constructor factoryMethod="newInstance"> <param name="type" value="netflow"/> <param name="host" value=""/> <param name="port" value="9368"/> <param name="recvBufferSize">4 * 1024 * 1024</param> <param name="soRCVBUF">512 * 1024</param> <param name="threadCount" value="8"/> <param name="agentDeviceIds" value="20"/> <param name="dataLogger">flowDataLogger</param> </constructor> </bean> --> <context name="detail"> <!-- Cоздание обработчика flow детализации --> <bean name="detailWorker" class="ru.bitel.bgbilling.modules.inet.accounting.detail.InetDetailWorker"/> </context> </context> </application>
Справочники
Шаблоны комментариев:
В шаблоне указывается Название шаблона, а также сам Шаблон. Шаблон - это произвольная строка, в которой возможна подстановка значений из параметров договора, путём включения макросов ${param_<pid>}, где <pid> - код параметра договора.
Например: ${param_4} - подстановка значения параметра договора с кодом 4. При изменении параметров договора комментарий автоматически изменяется с учётом новых значений параметров.
Links
Уровни запуска rc0.d-rc6.d
insserv ru man page
update-rc.d ru man page
Java tzupdater
Обсуждение