forum.bitel.ru http://forum.bitel.ru/ |
|
[6.2+] AbstractTerminalServiceActivator и сервисы http://forum.bitel.ru/viewtopic.php?f=44&t=12389 |
Страница 1 из 1 |
Автор: | borisk [ 15 апр 2017, 21:02 ] |
Заголовок сообщения: | [6.2+] AbstractTerminalServiceActivator и сервисы |
Добрый день! Мы активно используем систему родительских и дочерних сервисов, где родительский сервис это исключительно устройство/интерфейс/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, сепаратор : .... может еще будут у кого какие мысли Могу даже сам реализовать, если уважаемые разработчики согласуют имя макроса и список параметров. Ну и включат в будущие обновления ![]() |
Автор: | borisk [ 15 апр 2017, 21:20 ] |
Заголовок сообщения: | Re: [6.2+] AbstractTerminalServiceActivator и сервисы |
Включил логи уровня info и обнаружил, что строка AbstractTerminalServiceActivator serviceModify в логах все же появляется, но при этом никаких действий не выполняется. В коде serviceChanged нет сравнения на диапазон дат сервисов. Господа разработчики, поправите? |
Автор: | borisk [ 15 апр 2017, 21:25 ] |
Заголовок сообщения: | Re: [6.2+] AbstractTerminalServiceActivator и сервисы |
Вот новый код Код: 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()); } |
Автор: | borisk [ 21 апр 2017, 11:25 ] |
Заголовок сообщения: | Re: [6.2+] AbstractTerminalServiceActivator и сервисы |
up |
Автор: | Amir [ 21 апр 2017, 20:10 ] |
Заголовок сообщения: | Re: [6.2+] AbstractTerminalServiceActivator и сервисы |
Можем добавить. Но там проблема может быть, если дочерний сервис закроете или откроете будущим числом, т.к. состояние сервиса сохраняется только для родительского сервиса. Т.е. ситуация, когда наступил новый день и дочерний сервис вдруг стал активен/неактивен, не отслеживается. |
Автор: | borisk [ 23 апр 2017, 13:38 ] |
Заголовок сообщения: | Re: [6.2+] AbstractTerminalServiceActivator и сервисы |
Тогда это бы тоже пофиксить. Потому что обычно все делается будущим числом, то есть пользователь заранее пишет бумагу на отключение/добавление, и в биллинге изменения вносятся сразу будущим числом, дабы не забыть. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |