forum.bitel.ru http://forum.bitel.ru/ |
|
Гибкое изменение скорости ресурса без аккаунтинга http://forum.bitel.ru/viewtopic.php?f=44&t=7598 |
Страница 1 из 1 |
Автор: | bgnewbie [ 10 янв 2013, 10:45 ] |
Заголовок сообщения: | Гибкое изменение скорости ресурса без аккаунтинга |
Продолжаю ковырять BGBilling 5.2 на предмет соответствия нашим требованиям для перехода с другого биллинга. Пока не могу в голове собрать цельную картину того как осуществляется срабатывание тарифных опций и работа тарифов вообще. Чего нужно в итоге добиться:
Неясны в этой схеме с BGBilling следующие моменты:
Если не сложно, помогите сдвинуться в вопросе, а то что-то я слегка увяз. |
Автор: | Cromeshnic [ 10 янв 2013, 10:56 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Похожие темы: viewtopic.php?f=44&t=7578 viewtopic.php?f=44&t=7559 |
Автор: | Amir [ 10 янв 2013, 13:51 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Цитата: каким образом обработать событие срабатывания тарифной опции для ресурса? Как я понял создаётся Java-класс, реализующий стандартный интерфейс события для ресурса и уже в нём каким-то образом определяется какая опция включилась. Однако примеров реализации подобного на форуме и в документации не нашёл. В тарифе настраивается, что при наличии тарифной опции включается опция модуля Inet. Опция модуля Inet - абстрактная сущность, которая может означать определенную скорость, параметры доступа и т.п. В классе-обработчике к опциям привязывается (например, через конфигурацию) скорость, т.е. при активации тарифной опции сменится набор опций модуля Inet - вызовется обработчик с этим набором - по набору определится скорость, которую нужно задать, и выполнятся необходимые команды на коммутаторе.Цитата: сможет ли всё это работать в схеме без аккаунтинга? Сейчас отслеживание идет, когда есть сессия. Сессия возникает в двух случаях (тип инициации в типе сервиса) - по сигналу - это RADIUS аккаунтинг, либо DHCP запросы; по трафику - т.е. при появлении трафика netflow (при отсутсвиии трафика какое-то время сессия закрывается).Т.е. сейчас, если в тарифе будет настроена смена опций по времени или клиент активирует тарифную опцию, а сессии нет (в случае инициации сессии по трафику - по тому что нет трафика), обработчик не вызовется (скорость не изменится) пока не начнется сессия (не появится netflow трафик по этому сервису/диапазону). Те две темы как раз о том, чтобы изменять скорость физически даже если клиент не работает (не подключен) в данный момент. |
Автор: | Amir [ 11 янв 2013, 17:49 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Цитата: Нарисовал дерево тарифа. Теоретически правильно? Да, только ветки тарифные опции можно вынести выше, в корень, т.к. внутри их ничто от внешнего трафика не зависит.Цитата: Что обрабатывает класс-обработчик? Активацию сервиса? Каким образом скорость привязать к опции через конфигурацию (конфигурацию чего)? Да, т.е. выполняет команды на коммутаторе. Извините что вопросы задаю глупые, пока что представление о работе BGBilling у меня весьма смутное. http://bgbilling.ru/v5.2/javadoc/index.html Если посмотрите динамические классы, что поставляются с модулем, там сначала вызывается метод init( Setup setup, int moduleId, InetDevice device, InetDeviceType deviceType, ParameterMap deviceConfig ) - deviceConfig это полная конфигурация устройства. Например, AbstractRadiusServiceActivator парсит конфиг устройства вида radius.inetOption.x.attributes=, чтобы создать мап наборов атрибутов по ключу-id опции. Посмотрите так же, как простой пример, динамический класс (не до конца рабочий), у него привязка скоростей прямо в коде: ru.bitel.bgbilling.inet.dyn.device.des3200.DES320028ServiceActivator Как вариат - параметры брать из конфига опции, как здесь: http://wiki.bgbilling.ru/index.php/Обработчик_активации_сервисов_для_Mikrotik_c_изменениями_скорости InetOptionRuntime option = InetOptionRuntimeMap.getInstance().get( ruleId ); long speed = option.config.getLong( "speed", 100L ); |
Автор: | bgnewbie [ 15 янв 2013, 07:44 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Всё-таки создание сессии post factum по появлению netflow - не совсем идеологически правильно. А можно ли создавать постоянно действующие сессии? Например у нас много клиентов, подключенных статикой. Для таких клиентов можно было бы определить состояние "сессии" таким образом: * баланс на счету положительный - сессия поднята * баланс на счету отрицательный - сессия прервана Можно ли реализовать такую схему в BgBilling? Что для этого нужно сделать? |
Автор: | Cromeshnic [ 15 янв 2013, 08:02 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
А зачем им сессия, если скорость можно менять и без неё? |
Автор: | bgnewbie [ 17 янв 2013, 08:54 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Cromeshnic писал(а): А зачем им сессия, если скорость можно менять и без неё? На сколько я понимаю скорость без сессии можно менять только если запускать задание по cron'у, в котором проверять даты/время и производить в зависимости от них какие-то действия с ресурсами. Мне же хотелось бы чтобы все действия по клиентским подключениям происходили как реакция на событие на договоре или ресурсе и делалось для каждого ресурса отдельно. Это гораздо более гибкое и менее затратное по ресурсам решение. |
Автор: | Amir [ 17 янв 2013, 13:38 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
В ISG же есть инициация аккаунтинга по IP (т.е. клиент стучится в интернет - ISG посылает авторизацию и аккаунтинг). Здесь похожая схема появления сессии. Тарифы бывают разные - как определить без тарификации, во сколько нужно менять скорость, если там, например, зависимость от количества потребленного трафика? А если в тарифе стоит переключении скорости по времени в 16:00 и тариф у 100000 абонентов - одновременно такое количество все равно не обработается. Разницы по ресурсам не вижу, даже наоборот - например, у клиента выключен компьютер днем (или ночью) - ему на свиче лишний раз скорость не меняется, а поменяется как только он включит компьютер. По той схеме, которую планируем добавить, получится, что для активных (по которым идет Netflow) в данный момент клиентов скорость будет меняться с бОльшим приоритетом, чем для неактивных. |
Автор: | bgnewbie [ 22 фев 2013, 13:02 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Создал класс для устройства, с которого идёт Netflow. Код класса: package ru.technodesign.bgbilling.inet.dyn.device.softrouter; Т.е. к автоматически сформированному коду добавил только вывод в лог для всех возможных событий объекта класса. Добавил в BGBillingServer/data/log4j.xml конфигурацию для обработки логов. <appender name="MYSCRIPT" class="org.apache.log4j.RollingFileAppender"> <category name="script.myscript" additivity="false"> В результате создаётся файл BGBillingServer/log/myscript.log, однако при любых действиях с сервисом (создание, синхронизация, поднятие/опускание сессии) никакого выхлопа в myscript.log нет. В чём может быть дело? |
Автор: | Amir [ 22 фев 2013, 16:17 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Цитата: Добавил в BGBillingServer/data/log4j.xml конфигурацию для обработки логов. Этим InetAccess занимается, т.е. его log4j.xml нужно изменять, в его логах нужно смотреть.
|
Автор: | bgnewbie [ 25 фев 2013, 08:15 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Amir писал(а): Цитата: Добавил в BGBillingServer/data/log4j.xml конфигурацию для обработки логов. Этим InetAccess занимается, т.е. его log4j.xml нужно изменять, в его логах нужно смотреть.Аналогично. Никаких записей в логе не появилось. |
Автор: | Amir [ 25 фев 2013, 14:10 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
А в стандартных логах при этом все есть как обычно? |
Автор: | Cromeshnic [ 25 фев 2013, 14:33 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
InetAccess рестартили? |
Автор: | bgnewbie [ 26 фев 2013, 10:44 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Разобрался. В BGInetAccess/inet-access.xml было неправильное значение у параметра rootDeviceId. |
Автор: | bgnewbie [ 12 мар 2013, 12:38 ] | ||
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга | ||
В /usr/local/BGInetAccess/log/all.log каждые полминуты стало появляться сообщение: Код: access 03-12/17:16:20 WARN [access-p-5-t-1] SessionCountManager - inetServRuntime:19 is null Что это и что с этим делать? И ещё. При просмотре отчёта по сессиям видно что время отстаёт на 1 час. При этом во все журналы на диск все компоненты биллинга пишут правильное время. См. рис. BGBilling работает внутри контейнера OpenVZ.
|
Автор: | Amir [ 12 мар 2013, 14:04 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Цитата: Что это и что с этим делать? Похоже пока тестили осталась открытая сессия, а сервис удалили. Нужно удалить сессию из inet_connection и inet_session с этим servId. Код: И ещё. При просмотре отчёта по сессиям видно что время отстаёт на 1 час. При этом во все журналы на диск все компоненты биллинга пишут правильное время. См. рис. BGBilling работает внутри контейнера OpenVZ. Где-то java старая, без обновленных timezone, где учитывается что переход на зимнее время отменили.
|
Автор: | bgnewbie [ 13 мар 2013, 10:30 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Ошибку в логах BGInetAccess, по java непонятно - обновлял Oracle'овским патчем, Java в системе одна. Как может так получиться что часть процессов патч затронул, часть нет? Все сервисы биллинга, конечно же, перезапускал. Ещё ошибка. Стандартная процедура изменения состояний сервисов не работает. В scheduler.log валится следующее: Код: 03-13/15:22:02 INFO [Thread-12] TaskRunProcessor - Running Task: ru.bitel.bgbilling.modules.inet.task.InetServPeriodT ask 03-13/15:22:02 INFO [pool-1-thread-4] InetServPeriodTask - start task id => 5 at time 13.03.2013 15 03-13/15:22:02 ERROR [pool-1-thread-4] InetServPeriodTask - Table 'bgbilling.inet_serv' doesn't exist [42S02, 1146] ru.bitel.bgbilling.common.BGException: Table 'bgbilling.inet_serv' doesn't exist [42S02, 1146] at ru.bitel.common.model.AbstractDao.processException(AbstractDao.java:98) at ru.bitel.common.model.AbstractDao.list(AbstractDao.java:243) at ru.bitel.bgbilling.modules.inet.api.server.bean.InetServDao.listToCancel(InetServDao.java:574) at ru.bitel.bgbilling.modules.inet.task.InetServPeriodTask.executeTaskImpl(InetServPeriodTask.java:82) at ru.bitel.bgbilling.modules.inet.task.InetServPeriodTask.executeTask(InetServPeriodTask.java:53) at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:74) at ru.bitel.bgbilling.kernel.task.server.TaskBase.startTask(TaskBase.java:135) at bitel.billing.server.task.TaskBaseRunner.executeTask(TaskBaseRunner.java:72) at bitel.billing.server.task.bean.RunTask.run(RunTask.java:41) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'bgbilling.inet_serv' doesn't exist at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at ru.bitel.common.model.AbstractDao.listImpl(AbstractDao.java:218) at ru.bitel.common.model.AbstractDao.listImpl(AbstractDao.java:231) at ru.bitel.common.model.AbstractDao.list(AbstractDao.java:239) ... 10 more 03-13/15:22:02 INFO [pool-1-thread-4] InetServPeriodTask - Task finished time=4 ms. 03-13/15:22:02 INFO [pool-1-thread-4] InetServPeriodTask - task time : 0 d 00:00:00 03-13/15:22:02 INFO [pool-1-thread-4] InetServPeriodTask - RunTask finished time=5 ms. Это понятно, потому что: mysql> show tables like '%inet_serv%'; Как поправить? |
Автор: | Amir [ 13 мар 2013, 19:33 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Цитата: Ошибку в логах BGInetAccess, по java непонятно - обновлял Oracle'овским патчем, Java в системе одна. Как может так получиться что часть процессов патч затронул, часть нет? Все сервисы биллинга, конечно же, перезапускал. Т.е. клиент на той же машине запущен? Может быть он под другой JRE/JDK запускается? С часовым поясом/часами проблема - сразу не заметил - часы в клиенте тоже не правильное время показывают - а должны серверное, т.к. с учетом серверного часового пояса. Цитата: Ещё ошибка. Стандартная процедура изменения состояний сервисов не работает. В scheduler.log валится следующее: В задаче нужно прописать mid=<код модуля>, также как и для задач других модулей.
|
Автор: | bgnewbie [ 19 мар 2013, 08:29 ] | ||
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга | ||
Amir писал(а): Т.е. клиент на той же машине запущен? Может быть он под другой JRE/JDK запускается? С часовым поясом/часами проблема - сразу не заметил - часы в клиенте тоже не правильное время показывают - а должны серверное, т.к. с учетом серверного часового пояса. На клиентской машине с Debian'ом стояли параллельно OpenJDK и Sun JDK (из репозитория Debian). Как я понял по умолчанию работал JVM из OpenJDK. Обновлялка от Oracle видимо проверяла соответствие зон и, не находя проблем (или не находя "свою" версию Java?), считала что всё нормально. Удалил OpenJDK, перезапустил обновлялку таймзон от Oracle - время починилось. Amir писал(а): В задаче нужно прописать mid=<код модуля>, также как и для задач других модулей. Прописал, судя по логам scheduler'а - работает. Момент с mid хорошо бы как-нибудь выделить в документации. Специально перечитал доки - не нашёл в настройке Scheduler'а или модуля Inet упоминания о необходимости прописывания этого параметра. Теперь другая проблема: не срабатывает по времени изменение опции на тарифе. Никаких ошибок в логах, задание "Активация/деактивация сервисов по периоду" отрабатывает раз в минуту. Тариф см. на картинке
|
Автор: | bgnewbie [ 21 мар 2013, 03:20 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
up Уважаемые разработчики могут чем-то помочь? |
Автор: | bgnewbie [ 25 мар 2013, 13:10 ] | ||
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга | ||
Помог sintezwh1te с jabber-конференции bgbilling (conference.jabber.ru, комната bgbilling). Всё-таки дерево опций нужно строить, основываясь на типе трафика. Итоговое работающее дерево:
|
Автор: | Phricker [ 25 мар 2013, 13:15 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
помог лайк э босс ![]() |
Автор: | Amir [ 25 мар 2013, 16:06 ] |
Заголовок сообщения: | Re: Гибкое изменение скорости ресурса без аккаунтинга |
Опции можно добавлять и в корень. Но тариф должен быть правильным - в нем должна быть цена и установка услуги для каждого использующегося типа трафика, т.е. как минимум - Время. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |