forum.bitel.ru http://forum.bitel.ru/ |
|
создание скриптового шлюза Zyxel http://forum.bitel.ru/viewtopic.php?f=7&t=3672 |
Страница 1 из 1 |
Автор: | mrustik [ 03 мар 2010, 19:29 ] |
Заголовок сообщения: | создание скриптового шлюза Zyxel |
по wiki http://wiki.bgbilling.ru/index.php/Реализация_стандартного_шлюза_коммутатора_Zyxel_(под_Cisco2)_на_BeanShell Создал скриптовый тип шлюза, создал шлюз данного типа, но есть 2 проблемы 1. Когда в договоре заходишь в параметры шлюза, на вкладке switch в командах шлюза не меняется параметр {PORT} внутри тега <LOOP>, в стандартном шлюзе проблем таких нет. 2. Когда меняешь состояние шлюза, шлюз недоступен, хотя со стандартным шлюзом работает, а логах выдает ошибку, что класс Gate не найден. В скрипт шлюза добавил import bitel.billing.server.ipn.bean.*, где и находится класс по доке. сервер вер. 4.6 сборка 666 от 19.02.2010 16:48:52 ipn вер. 4.6 сборка 241 от 26.01.2010 12:37:04 Код: 03-03/18:18:46 INFO [Thread-12] CiscoSSHSwitchGateWorker - Running script
03-03/18:18:46 ERROR [Thread-12] CiscoSSHSwitchGateWorker - Eval error2: Sourced file: inline evaluation of: ``protected void doSync() { } protected voi d parentSync( Gate child, GateWor . . . '' : Class: Gate not found in namespace Sourced file: inline evaluation of: ``protected void doSync() { } protected void parentSync( Gate child, GateWor . . . '' : Class: Gate not found in nam espace : at Line: 5 : in file: inline evaluation of: ``protected void doSync() { } protected void parentSync( Gate child, GateWor . . . '' : Gate at bsh.BSHAmbiguousName.toClass(Unknown Source) at bsh.BSHType.getType(Unknown Source) at bsh.BSHFormalParameter.eval(Unknown Source) at bsh.BSHFormalParameters.eval(Unknown Source) at bsh.BSHMethodDeclaration.evalNodes(Unknown Source) at bsh.BSHMethodDeclaration.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:217) at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:152) at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:84) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - java.lang.RuntimeException: Sourced file: inline evaluation of: ``protected void doSync() { } prot ected void parentSync( Gate child, GateWor . . . '' : Class: Gate not found in namespace : at Line: 5 : in file: inline evaluation of: ``protected void doSync () { } protected void parentSync( Gate child, GateWor . . . '' : Gate 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:231) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:152) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:84) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - Caused by: Sourced file: inline evaluation of: ``protected void doSync() { } protected void parent Sync( Gate child, GateWor . . . '' : Class: Gate not found in namespace : at Line: 5 : in file: inline evaluation of: ``protected void doSync() { } prot ected void parentSync( Gate child, GateWor . . . '' : Gate 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.BSHAmbiguousName.toClass(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.BSHType.getType(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.BSHFormalParameter.eval(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.BSHFormalParameters.eval(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.BSHMethodDeclaration.evalNodes(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.BSHMethodDeclaration.eval(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.Interpreter.eval(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.Interpreter.eval(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bsh.Interpreter.eval(Unknown Source) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:217) 03-03/18:18:46 ERROR [Thread-12] LoggingPrintStream - ... 2 more 03-03/18:18:46 ERROR [Thread-12] CiscoSSHSwitchGateWorker - Gate unaccesible - 10.176.76.110 03-03/18:18:46 ERROR [Thread-12] CiscoSSHSwitchGateWorker - ------------------------- 03-03/18:18:46 ERROR [Thread-12] CiscoSSHSwitchGateWorker - error: Sourced file: inline evaluation of: ``protected void doSync() { } protected void pare ntSync( Gate child, GateWor . . . '' : Class: Gate not found in namespace : at Line: 5 : in file: inline evaluation of: ``protected void doSync() { } pr otected void parentSync( Gate child, GateWor . . . '' : Gate java.lang.RuntimeException: Sourced file: inline evaluation of: ``protected void doSync() { } protected void parentSync( Gate child, GateWor . . . '' : Class: Gate not found in namespace : at Line: 5 : in file: inline evaluation of: ``protected void doSync() { } protected void parentSync( Gate child, Ga teWor . . . '' : Gate at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:231) at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:152) at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:84) Caused by: Sourced file: inline evaluation of: ``protected void doSync() { } protected void parentSync( Gate child, GateWor . . . '' : Class: Gate not f ound in namespace : at Line: 5 : in file: inline evaluation of: ``protected void doSync() { } protected void parentSync( Gate child, GateWor . . . '' : Gate at bsh.BSHAmbiguousName.toClass(Unknown Source) at bsh.BSHType.getType(Unknown Source) at bsh.BSHFormalParameter.eval(Unknown Source) at bsh.BSHFormalParameters.eval(Unknown Source) at bsh.BSHMethodDeclaration.evalNodes(Unknown Source) at bsh.BSHMethodDeclaration.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bsh.Interpreter.eval(Unknown Source) at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:217) ... 2 more |
Автор: | stark [ 04 мар 2010, 15:23 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
есть ощущение что вы какой-то не тот скрипт поместили в тип шлюза. в том скоипте нет никакого Gate вообще ..и нумерация строки с ошибкой какая-то странная ..похоже не тот скрипт |
Автор: | mrustik [ 09 мар 2010, 11:27 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
Скрипт взял по ссылке Код: import java.util.*; import java.util.regex.*; import java.util.regex.Pattern; import bitel.billing.common.module.ipn.IPNContractStatus; import bitel.billing.server.ipn.GateWorker; import bitel.billing.server.ipn.UserStatus; import bitel.billing.server.util.DefaultServerSetup; import bitel.billing.server.util.ssh.SSHSession; import bitel.billing.server.ipn.UserStatus; import ru.bitel.bgbilling.common.DefaultSetup; import bitel.billing.server.ipn.bean.* //import bitel.billing.server.ipn.bean.ManadUtils; //import bitel.billing.server.ipn.bean.VlanManager; //import bitel.billing.server.ipn.bean.GateType; //import bitel.billing.server.ipn.bean.LoopPattern; //import bitel.billing.server.ipn.bean.RuleType; protected void doSync() { log.info( "start of SSH_SWITCH........................................................"); host = gate.getHost(); port = gate.getPort(); gateSetup = new DefaultSetup( gate.getConfig(), "\r\n" ); login = gateSetup.getStringValue( "login", "root" ); timeout = gateSetup.getIntValue( "timeout", 2000 ); pswd = gate.getKeyword(); if( log.isDebugEnabled() ) { log.info( " gate: " + host + ":" + port + " login: " + login + " pswd: " + pswd ); } session = null; result = new StringBuffer(); try { session = new SSHSession( host, port, login, pswd ); session.setTimeout( timeout ); session.connect(); result.append( session.command( "configure" ) ); VlanManager manager = new VlanManager(mid, con); log.info( "running commands"); for( UserStatus status : statusList ) { //берем vlan у родительской циски int vid = manager.getVlan( gate.getParentId(), status.contractId ); if ( status.status == IPNContractStatus.STATUS_OPEN ) { rules = getOpenRules( status, vid ); for ( String rule : rules ) { result.append( session.command( rule ) ); } } else { rules = getCloseRules( status, vid ); for ( String rule : rules ) { result.append( session.command( rule ) ); } } } result.append( session.command( "exit" ) ); log.info("!!!!!!!!!!!!!!SSH Switch!!!!!!!!!!!!!!!!!!"); log.info( result ); log.info("!!!!!!!!!!!!!!!SSH Switch!!!!!!!!!!!!!!!!!"); } catch ( Exception e ) { log.error("", e ); throw new RuntimeException ( e ); } finally { if( session != null ) { session.disconnect(); } log.info( "end of SSH_SWITCH........................................................"); } } getOpenRules( UserStatus status, int vid ) { return getRules( status, "\\[OPEN\\]((.|\n)*)\\[/OPEN\\]", vid ); } getCloseRules( UserStatus status, int vid ) { return getRules( status, "\\[CLOSE\\]((.|\n)*)\\[/CLOSE\\]", vid ); } getRules( status, template, vid ) { // пользовательское правило, без типа - то все оставляем как есть rule = status.rule.getRuleText(); //порты идут до #, а адреса идут после parts [] = rule.split( "#" ); portsStr = ""; addresesStr = ""; if ( parts.length > 0 ) { portsStr = parts[0]; } if ( parts.length > 1 ) { addresesStr = parts[1]; } //типизированное правило if( status.ruleType != null ) { rule = generateRule( addresesStr, portsStr, vid, status.gateType, status.ruleType ); } pattern = Pattern.compile( template ); m = pattern.matcher( rule ); if (m.find()) { rule = m.group( 1 ); } rule.replaceAll( "\r", "" ); parts = rule.split( "\n" ); return parts; } generateRule( addreses, ports, vid, gateType, ruleType ) { ports_ = getPorts( ports ); ruleText = ManadUtils.getRule( gateType, ruleType ); replacements = new HashMap(); if ( vid > 0) { replacements.put( "\\{VID\\}", String.valueOf( vid ) ); } loops = ManadUtils.getAddresLoops( addreses ); //адреса p = new LoopPattern(); p.setLoopPatern( "LOOP_PORT" ); p.setReplace( "\\{PORT\\}" ); p.setObjects( ports_ ); loops.add( p ); return ManadUtils.generateRule( ruleText, replacements, ruleType, loops ); } getPorts( ports ) { portList = new ArrayList<String>(); parts = ports.split( ";" ); for (String part : parts ) { parts2 = part.split( ":" ); if ( parts2.length < 2) { continue; } port = parts2 [1]; portList.add( port ); } ports_[] = new String [portList.size()]; for (int i = 0; i < ports_.length; i++) { ports_[i] = portList.get( i ); } return ports_; } В скрипте есть класс Gate host = gate.getHost(); port = gate.getPort(); gateSetup = new DefaultSetup( gate.getConfig(), "\r\n" ); А ошибка указывает на эту строку import bitel.billing.server.ipn.GateWorker;, вот почему не находит, не понятно. |
Автор: | stark [ 09 мар 2010, 12:16 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
в конце строки import bitel.billing.server.ipn.bean.* нет ";" |
Автор: | mrustik [ 09 мар 2010, 18:01 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
Разобрался с ошибкой Gate, ошибка была из-за настроек шлюза Cisco2, по доке, для автономного управления шлюзом Zyxel, нужно создать постой шлюз Cisco2. В скрипте написал Код: protected void doSync() { } protected void parentSync( Gate child, GateWorker childWorker) { } что оказалось не верным, нужно только Код: protected void doSync()
{ } |
Автор: | mrustik [ 12 мар 2010, 14:03 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
В скрипте пишу Код: log.info("!!!!!!!!!!!!!!SSH Switch!!!!!!!!!!!!!!!!!!"); Но нигде логов нету, может кто подскажет, где искать. Может не выводится и нужно настроить. И доку не могу найти по этому классу log |
Автор: | stark [ 12 мар 2010, 16:52 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
mrustik писал(а): <LOOP> interface port-channel {PORT} inactive exit </LOOP> ну там должно быть <LOOP_PORT>, а не <LOOP> |
Автор: | stark [ 12 мар 2010, 16:54 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
mrustik писал(а): В скрипте пишу Код: log.info("!!!!!!!!!!!!!!SSH Switch!!!!!!!!!!!!!!!!!!"); Но нигде логов нету, может кто подскажет, где искать. Может не выводится и нужно настроить. И доку не могу найти по этому классу log он тут упоминается http://bgbilling.ru/v5.0/doc/ch05s11s14.html должно работать ..У вас логи вообще в системе пишутся ? log4j.xml не меняли ? |
Автор: | mrustik [ 12 мар 2010, 17:42 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
логи пишутся, в файле ничего не менял. А то, что хочу я не пишутся. |
Автор: | mrustik [ 12 мар 2010, 20:07 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
В командах типа шлюза прописано Код: [DEFAULT] [REMOVE] <LOOP> interface port-channel {PORT} inactive exit </LOOP> [/REMOVE] [OPEN] <LOOP> interface port-channel {PORT} no inactive bandwidth-limit egress bandwidth-limit egress ${speed} exit </LOOP> exit [/OPEN] [CLOSE] <LOOP> interface port-channel {PORT} inactive exit </LOOP> [/CLOSE] [/DEFAULT] но при изменении состоянии шлюза и в договоре нет порта в скрипте Код: // пользовательское правило, без типа - то все оставляем как есть rule = status.rule.getRuleText(); //порты идут до #, а адреса идут после String [] parts = rule.split( "#" ); portsStr = ""; addresesStr = ""; if ( parts.length > 0 ) { portsStr = parts[0]; } if ( parts.length > 1 ) { log.info( addresesStr ); } Значение portsStr после выполнение пустое. Почему в status.rule.getRuleText(); передается только Ip-адрес |
Автор: | stark [ 12 мар 2010, 20:29 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
а <LOOP> на <LOOP_PORT> как описано в документации вы по идеологическим соображениям менять не хотите? . Стандартный шлюз с эти тоже не работает . |
Автор: | stark [ 12 мар 2010, 20:30 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
mrustik писал(а): Значение portsStr после выполнение пустое. Почему в status.rule.getRuleText(); передается только Ip-адрес а вы покажите скриншот где вы завели порты |
Автор: | stark [ 12 мар 2010, 20:32 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
и еще имейте ввиду что отображение команд в клиенте и то что посылает скриптовй шлюз - это 2 разные вещи. Может отображаться одно(то что водит стандартный action) , а скриптовым шлюзом может посылаться абсолютно другое |
Автор: | mrustik [ 12 мар 2010, 21:11 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
Разобрался с портами, зачем ставить порты в 2-х местах, или это для избыточности возможностей, поставил в привязке, и все заработало. Шлюз работает, есть в коде ошибки, которые пришлось исправить. Причем некоторые допущены намеренно. ![]() |
Автор: | stark [ 15 мар 2010, 13:47 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
mrustik писал(а): Разобрался с портами, зачем ставить порты в 2-х местах, или это для избыточности возможностей, поставил в привязке, и все заработало. Шлюз работает, есть в коде ошибки, которые пришлось исправить. Причем некоторые допущены намеренно. ![]() Ну поправьте wiki . А какие ошибки то ? может вы что-то неправильно поняли |
Автор: | mrustik [ 15 мар 2010, 17:31 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
Подправил Wiki. 1. может намеренная ошибка, не знаю, но в закладке команд а макросе <LOOP_PORT> О или(и) Р в русском алфавите, поэтому ничего не менялось ни при просмотре, ни при запуска скрипта шлюза. 2. строка Код: parts [] = rule.split( "#" ); должна выглядеть Код: String [] parts = rule.split( "#" ); строка Код: ports_ [] = new String [portList.size()]; должна выглядеть Код: String [] ports_ = new String [portList.size()];
|
Автор: | stark [ 15 мар 2010, 17:38 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
спасибо .. Это получилось после копирвания кода из явы . Там в оригинал было скорее всего Код: String parts [] = parts rule.split( "#" ); Но этого beanshell не понимает . Но исправил криво и сам код в beansell уже не проверял .. Нужно либо ваш вариант , либо просто: Код: parts = parts rule.split( "#" );
|
Автор: | mrustik [ 16 мар 2010, 10:15 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
100% рабочий код Код: getPorts( ports ) { portList = new ArrayList(); parts = ports.split( ";" ); for (String part : parts ) { parts2 = part.split( ":" ); if ( parts2.length < 2) { continue; } port = parts2 [1]; portList.add( port ); } String [] ports_ = new String [portList.size()]; for (int i = 0; i < ports_.length; i++) { ports_[i] = portList.get( i ); } return ports_; } строчка Код: String [] ports_ = new String [portList.size()]; рабочая |
Автор: | stark [ 16 мар 2010, 12:20 ] |
Заголовок сообщения: | Re: создание скриптового шлюза Zyxel |
ну я же сказал что есть 2 варината и оба рабочие ..вы использовали оба ![]() parts = ports.split( ";" ); String [] ports_ = new String [portList.size()]; Т.е нужно либо вообще тип убирать, либо писать String [] . java-ский вариант String ports [] не работает . |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |