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

Mikrotik - Шлюз не доступен
http://forum.bitel.ru/viewtopic.php?f=7&t=3292
Страница 1 из 1

Автор:  Dog [ 06 дек 2009, 20:48 ]
Заголовок сообщения:  Mikrotik - Шлюз не доступен

Добрый день,
вчера возникла проблема с открытием шлюза Микротик.
в server.log сыпятся следующие ошибки:
Код:
12-06/17:34:52 ERROR [Thread-41] MikrotikGateWorker - Eval error2: TargetError
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream - java.lang.RuntimeException: TargetError : at Line: 94 : in file: inline evaluation of: ``import java.util.*; import java.util.regex.*; import java.text.*; import java.sq . . . '' : throw new RuntimeException ( e ) ;
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:230)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:106)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:85)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream - Caused by: TargetError : at Line: 94 : in file: inline evaluation of: ``import java.util.*; import java.util.regex.*; import java.text.*; import java.sq . . . '' : throw new RuntimeException ( e ) ;
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BSHThrowStatement.eval(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BSHBlock.evalBlock(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BSHBlock.eval(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BSHBlock.eval(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BSHTryStatement.eval(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BSHBlock.evalBlock(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BSHBlock.eval(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BshMethod.invokeImpl(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BshMethod.invoke(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bsh.BshMethod.invoke(Unknown Source)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bitel.billing.server.ipn.GateWorker$Scripter.invokeMethod(GateWorker.java:256)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:217)
12-06/17:34:52 ERROR [Thread-41] LoggingPrintStream -   ... 2 more
12-06/17:34:52 ERROR [Thread-41] MikrotikGateWorker - Gate unaccesible - 172.31.0.253
12-06/17:34:52 ERROR [Thread-41] MikrotikGateWorker - -------------------------
12-06/17:34:52 ERROR [Thread-41] MikrotikGateWorker - error: TargetError : at Line: 94 : in file: inline evaluation of: ``import java.util.*; import java.util.regex.*; import java.text.*; import java.sq . . . '' : throw new RuntimeException ( e ) ;

сам по себе шлюз с сервера с BGB пингуется и по telnet\ssh доступен.
никаких обновлений на сервер за последнее время не накатывали, кроме обновления ipn коллектора связанного с функцией "0" интерфейса. Микротик так же не обновляли, текущая версия 4.1.
Используем скриптовый шлюз Микротика:
Код:
user_rule.editor.class=bitel.billing.module.services.ipn.editor.MikrotikContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.MikrotikGateWorker
use.script=1

пробывал ставить use.script=0, не помогло.
Код:
import java.util.*;
import java.util.regex.*;
import java.text.*;
import java.sql.*;

import ru.bitel.bgbilling.common.*;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.server.ipn.*;
import bitel.billing.server.util.ssh.*;
import bitel.billing.server.util.*;
import bitel.billing.server.util.ssh.SSHSession;


protected void doSync()
{
   host = gate.getHost();
   port = gate.getPort();
   gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );
   login = gateSetup.getStringValue( "login", "root" );                               
   pswd = gate.getKeyword();

   if ( log.isDebugEnabled() )
   {
      log.debug( " gate: " + host + ":" + port + " login: " + login + " pswd: " + pswd );
   }
   session = null;
   try
   {
      session = new SSHSessionExec( host, port, login, pswd );
      address_list = session.command( "ip firewall address-list print without-paging" );

      for ( UserStatus status : statusList )
      {
         new_address_list = null;
         cid = status.contractId;
         getNewRule(status);
         ruleType = status.ruleType;
         rule_id = 0;
         if (ruleType != null)
         {
            rule_id = ruleType.getId();
         };
         rules = null;
         if (address_list.indexOf( "cid="+cid+";rule_id="+rule_id+";") != -1)
         {
            // правило для этого договора есть на шлюзе
            if ( status.status > 0 )
            {
               if ( status.status == IPNContractStatus.STATUS_REMOVED )
               {
                  // удаляем
                  rules = getDeleteRules( status );
                  log.info("DeleteRules cid="+cid+" rule_id="+rule_id);
               }
               else
               {
                  // закрываем
                  rules = getCloseRules( status );
                  log.info("CloseRules cid="+cid+" rule_id="+rule_id);
               };
            };
         }
         else if ( status.status == IPNContractStatus.STATUS_OPEN )
         {
            //открываем
            rules = getOpenRules( status );
            log.info("OpenRules cid="+cid+" rule_id="+rule_id);
         };

         if (rules != null)
         {
            for ( String rule : rules )
            {
               p = Pattern.compile("rule_id");
               m = p.matcher(rule);
               if (new_address_list == null)
               {
                  new_address_list = "";
               };
               new_address_list = new_address_list + m.replaceAll("rule_id="+rule_id) + "\n";
            };
         };
         if (new_address_list != null){
//            print(address_list);
//            print(new_address_list);
            result = session.command(new_address_list);
//            print(result);
         };
      };
   }
   catch( Exception e )
   {
      throw new RuntimeException( e );
   }
   finally
   {
            if ( session != null )
            {
                session.disconnect();
            }
   }     
}

private getOpenRules( status )
{
   return getRules( status, "\\[OPEN\\](.*)\\[/OPEN\\]" );
}
private getCloseRules( status )
{
   return getRules( status, "\\[CLOSE\\](.*)\\[/CLOSE\\]" );
}
private getDeleteRules( status )
{
   return getRules( status, "\\[DELETE\\](.*)\\[/DELETE\\]" );
}   
private getRules( status, template )
{
   // пользовательское правило, без типа - то все оставляем как есть
   rule = status.rule.getRuleText();
   // типизированное правило
   if ( status.ruleType != null )
   {
      rule = generateRule( rule, status.gateType, status.ruleType, status.contractId );
   }
   pattern = Pattern.compile( template, Pattern.DOTALL );
   m = pattern.matcher( rule );
   if ( m.find() )
   {
      rule = m.group( 1 );
   }
   rule.replaceAll( "\r", "" );
   return rule.split( "\n" );
}
private   generateRule( addresses, gateType, ruleType, cid )
{
   String rule;
   replacements = new HashMap();     
   replacements.put( "\\{CID\\}", String.valueOf( cid ) );

   ruleText = ManadUtils.getRule( gateType, ruleType );
   rule = ManadUtils.generateRule( ruleText, addresses, replacements, ruleType );
   return rule;
}
private getNewRule(status)
{
   if (status.ruleType == null){
      return;
   };
   H = new Hashtable();
   H.put("operation", "get_ipn_rule_id");
   H.put("cid", status.contractId);
   H.put("mid", status.mid);
   H.put("sid", 5);
   H.put("time", new GregorianCalendar());
   ParseTarif(H);
   rule_id = H.get("rule_id");
   if (rule_id != null)
   {
      rule_type_manager = new RuleTypeManager(con,status.mid);
      status.ruleType = rule_type_manager.getType(Integer.parseInt(rule_id));
   };
}
private ParseTarif(H)
{
   H.put("is_found", false);
   cid = H.get("cid");
   if (cid == null)
   {
      return;
   };
   time = H.get("time");
   if (time == null)
   {
      return;
   };
   formatter = new SimpleDateFormat("yyyy-MM-dd");
   tarif_date = formatter.format(time.getTime()).toString();

   query = "SELECT contract_tree_link.tree_id "+
   "FROM contract_tree_link "+
   "WHERE "+
   "(contract_tree_link.date1 is NULL OR contract_tree_link.date1<='"+tarif_date+"') AND "+
   "(contract_tree_link.date2 is NULL OR contract_tree_link.date2>='"+tarif_date+"') AND "+
   "contract_tree_link.cid='"+cid+"' "+
   "UNION "+
   "SELECT tariff_tree_link.tree_id "+
   "FROM contract_tariff "+
   "  INNER JOIN tariff_tree_link "+
   "  ON (contract_tariff.tpid=tariff_tree_link.tpid) "+
   "WHERE (contract_tariff.date1 is NULL OR contract_tariff.date1<='"+tarif_date+"') AND "+
   "(contract_tariff.date2 is NULL OR contract_tariff.date2>='"+tarif_date+"') AND "+
   "contract_tariff.cid='"+cid+"'";
   re = con.prepareStatement(query);
   rs = re.executeQuery();
   while (rs.next())
   {
      tree_id = rs.getString(1);
      ParseMTree(tree_id,H);
   };
}
private ParseMTree(tree_id,H)
{   
   is_found = H.get("is_found");
   if (is_found == null)
   {
      return;
   };
   if (is_found)
   {
      return;
   };
   mid = H.get("mid");
   if (mid == null)
   {
      return;
   };
   query = "SELECT mtree_node.id "+
   "FROM module_tariff_tree "+
   "  INNER JOIN mtree_node "+
   "  ON (module_tariff_tree.id=mtree_node.mtree_id) "+
   "WHERE mtree_node.type='root' AND module_tariff_tree.tree_id='"+tree_id+"' AND module_tariff_tree.mid='"+mid+"'";
   re = con.prepareStatement(query);
   rs = re.executeQuery();
   while (rs.next())
   {
      node_id = rs.getString(1);
      ParseNode(node_id,H);
   };
}
private ParseNode(node_id,H)
{
   is_found = H.get("is_found");
   if (is_found == null)
   {
      return;
   };
   if (is_found)
   {
      return;
   };
   sid = H.get("sid");
   if (sid == null)
   {
      return;
   };
   operation = H.get("operation");
   if (operation == null)
   {
      return;
   };
   time = H.get("time");
   if (time == null)
   {
      return;
   };
   query = "SELECT id, type, data FROM mtree_node WHERE parent_node='"+node_id+"'";
   re = con.prepareStatement(query);
   rs = re.executeQuery();
   while (rs.next())
   {
      id = rs.getString(1);
      type = rs.getString(2);
      data = rs.getString(3);
      if (type.equals("service") && sid != Integer.parseInt(data))
      {
         continue;
      };
      if (type.equals("ipn_rule") && operation.equals("get_ipn_rule_id"))
      {
         datas = data.split ("&");
         H.put("rule_id",datas[1]);
         H.put("is_found",true);
      };
      if (type.equals("period"))
      {
         datas = data.split ("%");
         date1 = null;
         date2 = null;
         for (i=0; i<datas.length; i++)
         {
            date_arr = datas[i].split("&");
            if (date_arr.length != 2)
            {
               continue;
            };
            formatter = new SimpleDateFormat("dd.MM.yyyy");
            date = formatter.parse(date_arr[1]);
            if (date_arr[0].equals("date1"))
            {
               date1 = date;
            };
            if (date_arr[0].equals("date2"))
            {
               date2 = date;
            };
         };
         if (date1 != null && date1.compareTo(time.getTime()) != -1){
            continue;
         };
         if (date2 != null && date2.compareTo(time.getTime()) != 1){
            continue;
         };
      };
      ParseNode(id,H);
   };
};

Автор:  Dog [ 07 дек 2009, 13:41 ]
Заголовок сообщения:  Re: Mikrotik - Шлюз не доступен

BGBillingServer v 4.6 build 580 from 07.10.2009 10:01:50

Автор:  Dog [ 08 дек 2009, 15:52 ]
Заголовок сообщения:  Re: Mikrotik - Шлюз не доступен

Уважаемые разработчики,
ответьте по проблеме, половина наших пользователей висит в закрытом состоянии после блокировки, приходится дергать их руками.

Автор:  Dog [ 08 дек 2009, 18:00 ]
Заголовок сообщения:  Re: Mikrotik - Шлюз не доступен

вопрос закрыт. проблема решена.

Автор:  stark [ 11 дек 2009, 20:23 ]
Заголовок сообщения:  Re: Mikrotik - Шлюз не доступен

Dog писал(а):
вопрос закрыт. проблема решена.

а в чем дело то было?

Автор:  mikos [ 12 апр 2010, 20:58 ]
Заголовок сообщения:  Re: Mikrotik - Шлюз не доступен

Полагаю таймаут добавил

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