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/ |