forum.bitel.ru
http://forum.bitel.ru/

Работа ServiceActivator
http://forum.bitel.ru/viewtopic.php?f=44&t=6871
Страница 1 из 1

Автор:  Khoma [ 18 июн 2012, 14:34 ]
Заголовок сообщения:  Работа ServiceActivator

Есть вопрос.
Есть коммутатор DES-3200-18
Есть динамический класс ru.bitel.bgbilling.inet.dyn.device.des3200.DES320018ServiceActivator
В модуле Inet создан тип устройства DES-3200-18 с этим классом в качестве "Обработчика активации сервисов".
Почему в логах вот такая запись? Почему DES320028ServiceActivator
Код:
06-18/12:19:03  INFO [sa-p-9-t-11] DeviceManageWorker - Hardware reboot detected
06-18/12:21:14  INFO [sa-p-9-t-60] ServiceActivatorSet - Connecting to device
06-18/12:21:14  INFO [sa-p-9-t-60] DES320028ServiceActivator - CONNECT
06-18/12:21:14  INFO [sa-p-9-t-60] ServiceActivatorDeviceWorker - Do task deviceId: 48; Event[ru.bitel.bgbilling.modules.inet.access.sa.event.InetSaAccountingEvent] moduleId: 1; pluginId: no; cid: 39; scid: -1; userId: 0; type: 1; deviceId: 48; connectionId: 6890; timestamp: 1340007674057
06-18/12:21:14  INFO [sa-p-9-t-60] InetApplication - TariffOptionMap: {}
06-18/12:21:14  INFO [sa-p-9-t-60] ServiceActivatorDeviceWorker - Command result event: ServiceActivatorEvent type=4; inetServId: 21; call: true; oldState: 0; newState: 0; oldOptionSet: 8; newOptionSet: 8
06-18/12:21:14  INFO [sa-p-9-t-60] ServiceActivatorDeviceWorker - Processing deviceId:48; command ServiceActivatorEvent type=4; inetServId: 21; call: true; oldState: 0; newState: 0; oldOptionSet: 8; newOptionSet: 8
06-18/12:21:14  INFO [sa-p-9-t-60] ServiceActivatorSet - Invoking onAccountingStart
06-18/12:21:14  INFO [sa-p-9-t-60] ServiceActivatorDeviceWorker - Process event type[4] result=true
06-18/12:21:19  INFO [sa-p-9-t-60] ServiceActivatorSet - Disconnecting from device
06-18/12:21:19  INFO [sa-p-9-t-60] DES320028ServiceActivator - DISCONNECT

Автор:  Amir [ 18 июн 2012, 14:41 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Делали перечитать конфигурацию?
В классе DES320018ServiceActivator не указано
Код:
Logger logger = Logger.getLogger( DES320028ServiceActivator.class )
вместо
Код:
Logger logger = Logger.getLogger( DES320018ServiceActivator.class )
?

Автор:  Khoma [ 18 июн 2012, 15:16 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Amir писал(а):
Делали перечитать конфигурацию?
В классе DES320018ServiceActivator не указано
Код:
Logger logger = Logger.getLogger( DES320028ServiceActivator.class )
вместо
Код:
Logger logger = Logger.getLogger( DES320018ServiceActivator.class )
?

Вот! Точно! Всё проверил, а это пропустил. Именно для 18-х в logger было указано неверно!
Спасибо.

Автор:  ikoctya [ 09 апр 2013, 14:58 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Установил на тип устройства TelnetServiceActivator, добавил договор с сервисом на этом устройстве, к конфиге устройства для теста прописал команды:
Код:
sa.command.serv.enable=exit
sa.command.serv.disable=exit
sa.command.serv.create=exit
sa.command.serv.cancel=exit
sa.command.inetOption.1.enable=exit
sa.command.inetOption.1.disable=exit

При этом в логах вижу:
Код:
connection 04-09/12:48:12  INFO [sa-p-9-t-80] ServiceActivatorSet - Connecting to device
connection 04-09/12:48:12  INFO [sa-p-9-t-80] TelnetServiceActivator - Connected
connection 04-09/12:48:12  INFO [sa-p-9-t-80] TelnetServiceActivator - admin^M
Password:
connection 04-09/12:48:12  INFO [sa-p-9-t-80] TelnetServiceActivator - Login entered
connection 04-09/12:49:12 ERROR [sa-p-9-t-80] ServiceActivatorDeviceWorker - java.util.concurrent.TimeoutException
ru.bitel.bgbilling.common.BGException: java.util.concurrent.TimeoutException
<------>at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.connect(ServiceActivatorSet.java:139)
<------>at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runWorker(ServiceActivatorDeviceWorker.java:175)
<------>at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:115)
<------>at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:117)
<------>at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
<------>at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
<------>at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
<------>at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
<------>at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
<------>at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
<------>at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
<------>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)
<------>at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40)
Caused by: java.util.concurrent.TimeoutException
<------>at bitel.billing.server.util.terminal.TerminalManager.readFromInput(TerminalManager.java:81)
<------>at bitel.billing.server.util.terminal.TerminalManager.doCommand(TerminalManager.java:37)
<------>at bitel.billing.server.util.terminal.AbstractTerminalSession.doCommand(AbstractTerminalSession.java:94)
<------>at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TelnetServiceActivator.connectImpl(TelnetServiceActivator.java:89)
<------>at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TelnetServiceActivator.connect(TelnetServiceActivator.java:67)
<------>at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.connect(ServiceActivatorSet.java:132)
<------>... 14 more
connection 04-09/12:49:12  INFO [sa-p-9-t-80] ServiceActivatorSet - Disconnecting from device

В это же время пробовал заходить на устройство и наблюдать. Сервис на него логинится и ничего не делает, а по окончании таймаута просто отключается!
Почему после подключения к устройству не выполняются команды, заданные в конфиге устройства?

Автор:  Amir [ 09 апр 2013, 15:37 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Ожидает приглашения (например, admin@switch# ), по умолчанию в конфиге
sa.endSequence=#

Автор:  ikoctya [ 09 апр 2013, 16:20 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Amir писал(а):
Ожидает приглашения (например, admin@switch# ), по умолчанию в конфиге
sa.endSequence=#

Да проблема в этом была. Но как быть, если в процессе исполнения команд приглашение меняется, например, с <Quidway> на [Quidway] ???

Автор:  Amir [ 09 апр 2013, 16:40 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Попробуйте так:
sa.command.serv.enable=command; $setEndSequence([Quidway]); command; $setEndSequence(<Quidway>);

Автор:  ikoctya [ 09 апр 2013, 17:07 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Amir писал(а):
Попробуйте так:
sa.command.serv.enable=command; $setEndSequence([Quidway]); command; $setEndSequence(<Quidway>);

Бинго))))
Пробовал так в TelnetServiceActivator, и ЗАРАБОТАЛО!!!
Код:
....................
logger.info( session.doCommand( password ) );
      logger.info( "Password entered" );
               
                session.setEndString(  "]" );      
      logger.info( session.doCommand( "system-view" ) );
      
                return super.connect();
   }
....................

Но представленный Вами вариант более гибок! буду его юзать.

Автор:  ikoctya [ 10 апр 2013, 15:07 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Тут все ясно. А как быть с переменными сервиса, отправляемыми на сервер telnet или ssh.
К примеру, для простоты:
sa.command.serv.enable=echo $ip $vlan $ port; - отлично работает, переменные передаются на сервер
sa.command.serv.enable=echo $mac; - НЕ Работает.
В документации не нашел, описание переменных, подскажите, пожалуйста переменную с MAC-адресом, или может быть где-то все же есть описание всех переменных сервиса?

Автор:  Amir [ 10 апр 2013, 15:23 ]
Заголовок сообщения:  Re: Работа ServiceActivator

TelnetServiceActivator делали совсем недавно, по запросу.
Переменные можно посмотреть в AbstractTerminalServiceActivator и TelnetServiceActivator, в методе getValue.

MAC-адреса похоже нет, в ближайшем обновлении добавим что-нибудь вроде:
Код:
else if( "mac".equals( macros ) )
{
    return InetServ.macAddressToString( serv.getMacAddressListBytes() );
}

Автор:  ikoctya [ 15 апр 2013, 00:06 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Странное поведение. Сервис инициализируется по dhcp. В конфигурации устройства коммутатора
sa.command.serv.create=echo 2 $ip;
sa.command.serv.cancel=echo 2 $ip;
В типе устройства выюбран SSHServiceActivator (измененно только название активатора). Переменная $ip не передается!?
Или может быть это работает только для статически заданных в сервиче адресов?
Код:
connection 04-14/21:57:36  INFO [sa-p-9-t-5] ServiceActivatorSet - Connecting to device
connection 04-14/21:57:56  INFO [sa-p-9-t-5] CentOSServiceActivator - Connected
connection 04-14/21:57:56  INFO [sa-p-9-t-5] ServiceActivatorDeviceWorker - Do task deviceId: 6; Event[ru.bitel.bgbilling.modules.inet.access.sa.event.InetSaServInitEvent] moduleId: 1; pluginId: no; cid
connection 04-14/21:57:56  INFO [sa-p-9-t-5] ServiceActivatorDeviceWorker - Do InetSaServInitEvent task
connection 04-14/21:57:56  INFO [sa-p-9-t-5] ServiceActivatorDeviceWorker - Do task deviceId: 6; Event[ru.bitel.bgbilling.modules.inet.access.sa.event.InetSaServModifyEvent] moduleId: 1; pluginId: no; c
connection 04-14/21:57:56  INFO [sa-p-9-t-5] InetApplication - TariffOptionMap: {}
connection 04-14/21:57:56  INFO [sa-p-9-t-5] InetApplication - OptionSet: []
connection 04-14/21:57:56  INFO [sa-p-9-t-5] ServiceActivatorDeviceWorker - Command result event: ServiceActivatorEvent type=3; inetServId: 8; call: true; oldState: 1; newState: 1; oldOptionSet: ; newOp
connection 04-14/21:57:56  INFO [sa-p-9-t-5] ServiceActivatorDeviceWorker - Processing deviceId:6; command ServiceActivatorEvent type=3; inetServId: 8; call: true; oldState: 1; newState: 1; oldOptionSet
connection 04-14/21:57:56  INFO [sa-p-9-t-5] ServiceActivatorSet - Invoking serviceCancel
connection 04-14/21:57:56  INFO [sa-p-9-t-5] CentOSServiceActivator - execute: echo 2 [IpAddress:null]
connection 04-14/21:57:57  INFO [sa-p-9-t-5] CentOSServiceActivator - echo 2 [IpAddress:null]^M

Автор:  Amir [ 15 апр 2013, 03:09 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Да, т.к. команды serviceCreate, serviceModify вызываются для сервиса на договоре, соответственно, данные берутся только из сервиса. При старте/стопе соединения вызываются методы onAccountingStart/onAccountingStop, но получение данных соединения для этих методов (например, IP-адреса соединения) в TelnetServiceActivator пока нет (не просили такого еще).

Автор:  ikoctya [ 15 апр 2013, 18:24 ]
Заголовок сообщения:  Re: Работа ServiceActivator

А неужели невозможно вытащить данные переменные? Может быть добавите функционал?

Автор:  Amir [ 15 апр 2013, 18:37 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Можно, но только для методов onAccountingStart/onAccountingStop/connectionModify/connectionClose.

Автор:  Cromeshnic [ 14 май 2013, 13:49 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Amir писал(а):
TelnetServiceActivator делали совсем недавно, по запросу.
Переменные можно посмотреть в AbstractTerminalServiceActivator и TelnetServiceActivator, в методе getValue.

MAC-адреса похоже нет, в ближайшем обновлении добавим что-нибудь вроде:
Код:
else if( "mac".equals( macros ) )
{
    return InetServ.macAddressToString( serv.getMacAddressListBytes() );
}


up!

Мне здесь нужна подстановка для "ifaceTitle":

Код:
conf t
interface Fa0/0.123
no shutdown
end


Ну и заодно можно сразу "ifIndex" сделать - вдруг пригодится

Автор:  Cromeshnic [ 15 май 2013, 07:57 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Как-то так:

Код:
        else if( "mac".equals( macros ) )
        {
            return Pattern.quote(InetServ.macAddressToString( serv.getMacAddressListBytes()));
        }
        else if( "ifacetitle".equals( macros ) )
        {
            return Pattern.quote(serv.getTitle());
        }

Автор:  Cromeshnic [ 15 май 2013, 08:37 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Ещё просьба: сделайте в SSHServiceActivator поддержку 1 версии ssh:

Код:
connection 05-15/11:36:56 ERROR [sa-p-11-t-83] EventWorker - class ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker: com.jcraft.jsch.JSchException: invalid server's version string
ru.bitel.bgbilling.common.BGException: com.jcraft.jsch.JSchException: invalid server's version string
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.connect(ServiceActivatorSet.java:139)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runWorker(ServiceActivatorDeviceWorker.java:175)
        at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:115)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:117)
        at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
        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)
        at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40)
Caused by: com.jcraft.jsch.JSchException: invalid server's version string
        at com.jcraft.jsch.Session.connect(Session.java:263)
        at bitel.billing.server.util.ssh.SSHSession.initConnection(SSHSession.java:60)
        at bitel.billing.server.util.terminal.AbstractTerminalSession.connect(AbstractTerminalSession.java:53)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.SSHServiceActivator.connect(SSHServiceActivator.java:77)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.connect(ServiceActivatorSet.java:132)
        ... 14 more

Автор:  Cromeshnic [ 15 май 2013, 08:43 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Создал отдельную тему:
viewtopic.php?f=44&t=8031

Автор:  stark [ 24 май 2013, 15:19 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Запил в wiki описание обработчиков активации ssh/telnet, заодно и mikrotik и manad(правда последние 2 не проверял пока).
http://wiki.bgbilling.ru/index.php/%D0% ... 0%B8%D1%8F

Автор:  borisk [ 24 май 2013, 16:53 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Ага, вот это уже интересно. Только почему-то на Wiki исчезла реализация Manad. Кто-нибудь может выложить заново?

Автор:  stark [ 11 июн 2013, 20:03 ]
Заголовок сообщения:  Re: Работа ServiceActivator

borisk писал(а):
Ага, вот это уже интересно. Только почему-то на Wiki исчезла реализация Manad. Кто-нибудь может выложить заново?

Вы про эту ?
http://wiki.bgbilling.ru/index.php/%D0% ... _BeanShell

Или про перловую реализацию ?

Автор:  stark [ 11 июн 2013, 20:05 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Для mikrotik Добавил примеры команд и протестил . Правда в текущий момент не получиться делать сложные конструкции со вложенными запросами , для этого надо реализовать отдельные макросы.

Автор:  ikoctya [ 01 июл 2013, 10:31 ]
Заголовок сообщения:  Re: Работа ServiceActivator

У нас появилась необходимость на некоторый устройствах в дереве не выполнять действия по событию.
В типах устройств в установлен TerminalServiceActivator, на некоторых устройствах действия не требуются. Если на этих устройствах установить, к примеру,
Код:
sa.command.serv.create=
, действия не выполняются, НО биллинг подключается по телнет к устройству, ничего не делает и отключается. Мне кажется это не эффективно. Возможно ли добавить какую либо переменную, чтобы, к примеру, при
Код:
sa.command.serv.create="no_connect"
- не пытался даже подключиться к устройству.

Автор:  Amir [ 01 июл 2013, 19:23 ]
Заголовок сообщения:  Re: Работа ServiceActivator

В TelnetServiceActivator можно прописать sa.lazyConnect=1.

Автор:  ikoctya [ 04 июл 2013, 14:42 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Да так работает! Все активаторы не отрабатывают. Но как быть, если нужно отключить активаторы только этого устройства (типа устройства), а разрешить работу только родительского устройства.
Поясню. У меня на коммутаторах активатор выполняет включение - отключение портов. Иногда это просто не нужно и на коммутаторе статическая конфигурация! Все коммутаторы в дереве подчиняются шейперу, на котором в любом случае нужно выполнять действия ServiceActivator'а, а при включенной sa.lazyConnect=1 на дочерних устройствах - эти действия не выполняются для сервисов, прикрепленных к коммутаторам.

Автор:  Amir [ 04 июл 2013, 14:50 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Ошибок нет? С этим параметром должно работать, как просили в предыдущем посте - если нет команд, то просто не выполнять подключение.

Автор:  ikoctya [ 04 июл 2013, 14:58 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Да без ошибок, не выполняет команды для данного типа устройств! Это хорошо. Но не выполняются команды родителя, которые должны выполнятся именно активатором родителя, здесь (на конечном коммутаторе эти команды дополнительно не прописать)

Автор:  ikoctya [ 18 июн 2014, 19:35 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Добрый день!
У меня есть вопрос.
Как я могу в обработчике активации сервиса sa.command.serv.create обратиться к атрибуту устройства с вкладки атрибуты?
Пробовал так:
Код:
sa.command.serv.create=$setEndSequence(]); echo $deviceAttr(6,1,0)
sa.command.serv.cancel=$setEndSequence(]); echo $deviceAttr(1)

... и так
Код:
sa.command.serv.create=$setEndSequence(]); echo $deviceAttr($deviceId,1,0)
sa.command.serv.cancel=$setEndSequence(]); echo $deviceAttr(1)


Когда TerminalServiceActivator командует на коммутатор там последняя команда выглядит так: "echo null"
Видимо параметры не передаются.

Автор:  Amir [ 19 июн 2014, 19:37 ]
Заголовок сообщения:  Re: Работа ServiceActivator

Попробуйте в Динамических классах сделать "Перекомпилировать все" и потом "Перечитать конфигурацию на серверах".

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/