RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:bgbilling

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. FIXME
Меню и панель инструментов могут быть настроены редактированием файла 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&amp;characterEncoding=Cp1251&amp;allowUrlInLocalInfile=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;queryTimeoutKillsConnection=true&amp;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&amp;characterEncoding=Cp1251&amp;allowUrlInLocalInfile=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;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

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/bgbilling.txt · Последнее изменение: 2014/10/24 12:40 — 127.0.0.1