BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 17 июн 2025, 02:12

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: [6.2+] AbstractTerminalServiceActivator и сервисы
СообщениеДобавлено: 15 апр 2017, 21:02 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Добрый день!

Мы активно используем систему родительских и дочерних сервисов, где родительский сервис это исключительно устройство/интерфейс/vlan, а дочерние - IP, назначенные клиенту. В качестве ServiceActivator у нас Mikrotik, используем MikrotikServiceActivator. Что показали текущие эксперименты (может я что-то недочитал в документации):
1) Когда создается или удаляется дочерний сервис, то для родительского сервиса вызывается serviceCreate/serviceCancel. И это правильно, и это хорошо. Но вот представим ситуацию, когда пользователь отказывается от части адресов. В этом случае на дочернем сервисе мы выставляем дату окончания сервиса (потому что требуется для учета и любимого всеми СОРМ), и в этом случае, увы, не вызывается ни serviceCancel, ни serviceCreate. А serviceModify, я так понимаю, не предусмотрен вообще? Точнее в самом классе AbstractTerminalServiceActivator есть serviceModify, но, почему-то, при изменении даты активности дочернего сервиса он не вызывается.

2) Не все макросы работают с дочерними сервисами. Например iplist работает, а net не работает. Предлагаю дописать функционал всех макросов.

3) Для всех макросов, которые работают с дочерними сервисами отсутсвует проверка диапазона дат активности сервиса. И это, imho, неправильно. Для своих нужд я доработал макрос "net" следующим образом. Если у разработчиков нет возражений, просьба включить этот вариант в следующие релизы

Код:
      else if( "net".equals( macros ) )
      {
         StringBuilder   sb = new StringBuilder();
         
         if(serv.getAddressFrom() != null)
            sb.append(IpNet.toString( serv.getAddressFrom(), serv.getAddressTo() ));

         if( args.length > 0 && Utils.parseBoolean( String.valueOf( args[0] ) ) )
         {
            final List<InetServ> children = serv.getChildren();
            final Date today = new Date();
            
            if( children != null && children.size() > 0 )
            {
               for( InetServ child : children )
               {
                  if(!TimeUtils.dateInRange(today, child.getDateFrom(), child.getDateTo()))
                     continue;
                  if(sb.length() > 0)
                     sb.append(",");
                  sb.append(IpNet.toString( child.getAddressFrom(), child.getAddressTo() ));
               }
            }
         }
         
         return sb.toString();
      }


4) Есть мысль в принципе придумать некий общий макрос, который будет для сервиса возвращать ip в нужном нам формате и с нужным нам сепаратором. Я уже как-то ранее писал эту мысль, но, почему-то она отклика не нашла. Но мне кажется, мысль здравая. Что-то вроде
Код:
$getip(определитель_формата, сепаратор_для_ip, обрабатывать_дочерние)
 1 - аналог $ip
 2 - аналог $net
 3 - аналог $net, но с маской вида netmask, сепаратор /
 4 - аналог $net, но с маской вида netmask, сепаратор :
 .... может еще будут у кого какие мысли


Могу даже сам реализовать, если уважаемые разработчики согласуют имя макроса и список параметров. Ну и включат в будущие обновления :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [6.2+] AbstractTerminalServiceActivator и сервисы
СообщениеДобавлено: 15 апр 2017, 21:20 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Включил логи уровня info и обнаружил, что строка AbstractTerminalServiceActivator serviceModify в логах все же появляется, но при этом никаких действий не выполняется. В коде serviceChanged нет сравнения на диапазон дат сервисов. Господа разработчики, поправите?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [6.2+] AbstractTerminalServiceActivator и сервисы
СообщениеДобавлено: 15 апр 2017, 21:25 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Вот новый код
Код:
   private boolean serviceChanged( InetServ serviceOld, InetServ serviceNew )
   {
      return (serviceOld.getInterfaceId() != serviceNew.getInterfaceId())
            || (serviceOld.getVlan() != serviceNew.getVlan())
            || !addressEquals( serviceOld.getAddressFrom(), serviceNew.getAddressFrom() )
            || !addressEquals( serviceOld.getAddressTo(), serviceNew.getAddressTo() )
            || !TimeUtils.dateEqual(serviceOld.getDateFrom(), serviceNew.getDateFrom())
            || !TimeUtils.dateEqual(serviceOld.getDateTo(), serviceNew.getDateTo());
   }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [6.2+] AbstractTerminalServiceActivator и сервисы
СообщениеДобавлено: 21 апр 2017, 11:25 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
up


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [6.2+] AbstractTerminalServiceActivator и сервисы
СообщениеДобавлено: 21 апр 2017, 20:10 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Можем добавить.
Но там проблема может быть, если дочерний сервис закроете или откроете будущим числом, т.к. состояние сервиса сохраняется только для родительского сервиса.
Т.е. ситуация, когда наступил новый день и дочерний сервис вдруг стал активен/неактивен, не отслеживается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [6.2+] AbstractTerminalServiceActivator и сервисы
СообщениеДобавлено: 23 апр 2017, 13:38 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Тогда это бы тоже пофиксить. Потому что обычно все делается будущим числом, то есть пользователь заранее пишет бумагу на отключение/добавление, и в биллинге изменения вносятся сразу будущим числом, дабы не забыть.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.073s | 27 Queries | GZIP : On ]