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

BGBS: автоматический выбор IP-адреса из пула.
http://forum.bitel.ru/viewtopic.php?f=19&t=2317
Страница 1 из 1

Автор:  mrlexy [ 15 май 2009, 12:54 ]
Заголовок сообщения:  BGBS: автоматический выбор IP-адреса из пула.

Может кто сталкивался и подскажет, в какую сторону копать:

Необходимо при создании договора автоматически выдавать IP адрес из пула свободных адресов.

Буду благодарен за примеры кода.

Автор:  stark [ 15 май 2009, 15:57 ]
Заголовок сообщения: 

можуль какой? IPN или dialup?

Автор:  mrlexy [ 15 май 2009, 16:47 ]
Заголовок сообщения: 

stark писал(а):
можуль какой? IPN или dialup?


в контракте у нас вводится IP клиента как параметр

Автор:  stark [ 15 май 2009, 19:08 ]
Заголовок сообщения: 

mrlexy писал(а):
stark писал(а):
можуль какой? IPN или dialup?


в контракте у нас вводится IP клиента как параметр


а где пул хранится ? может в скриптом на событие создания договора добавлять параметр, вопрос только - где брать пул и где хранить занятые ..и зачем вам это нужно ? чем вас не устривает функуионал одного из модулей - dialup и ipn

Автор:  mrlexy [ 15 май 2009, 20:29 ]
Заголовок сообщения: 

пул вычисляется из списка двух параметров договора, как сделать запрос - я понимаю. IPN мы не используем, в dialup этих данных тоже нет. Выдача адресов происходит не зависящими от BGbilling'a процедурами, которые получают данные с БД биллинга. По сути, я хотел посмотреть, как пишутся скрипты на это событие, т.к. на данный момент я нашел только описание API (достаточно куцее), и на его основе допилить под свои нужды.

Автор:  Fate [ 17 май 2009, 17:17 ]
Заголовок сообщения: 

Я тоже так хочу... Ничего не прояснилось?..

Автор:  mrlexy [ 18 май 2009, 12:42 ]
Заголовок сообщения: 

Fate писал(а):
Я тоже так хочу... Ничего не прояснилось?..

сейчас пытаюсь сваять самостоятельно, сделать все равно надо ))))))
как что будет - по результату отпишусь

Автор:  Администратор [ 19 май 2009, 12:33 ]
Заголовок сообщения: 

Событие - создание договора.
Для 4.6 добавили описание событий: http://www.bgbilling.ru/v4.6/doc/ch02s02s01.html. Скоро будет полное.

Автор:  mrlexy [ 19 май 2009, 12:41 ]
Заголовок сообщения: 

Администратор писал(а):
Событие - создание договора.

оно вызывается сразу после создания, пришлось использовать событие на изменение параметра.
Администратор писал(а):
Для 4.6 добавили описание событий: http://www.bgbilling.ru/v4.6/doc/ch02s02s01.html. Скоро будет полное.
HTTP/404

Автор:  Администратор [ 19 май 2009, 12:48 ]
Заголовок сообщения: 

Точку в конце URL уберите, ошибся.

Автор:  mrlexy [ 20 май 2009, 12:54 ]
Заголовок сообщения: 

предварительно что получилось...
первый раз пишу на BeanShell, поэтому готов к замечаниям и объективной критике ;-)
подсеть в виде 172.16.x указывется в поле квартал адреса клиента, адреса 172.16..x.1 не используются
Код:
import java.sql.*;
import java.util.*;
import java.util.regex.Pattern;


//Auto inserting IP into contract on change customer city address value

//const
ADDRESS_PARAM_ID=15; //Customer city address parameter id
IP_PARAM_ID=16; // Ip address parameter id
//functions
/* int freeLastOctet */private getFreeIP(subnet){
   qPool = "SELECT val FROM `contract_parameter_type_1` "
      + "WHERE pid=? AND val LIKE ? "
         + " AND INET_ATON( val )>INET_ATON( ? ) "
      + "ORDER BY INET_ATON(val) ASC";
   pool = con.prepareStatement(qPool);
   pool.setInt(1,IP_PARAM_ID);
   pool.setString(2,subnet+".%");
   pool.setString(3,subnet+".1");
   resPool=pool.executeQuery();
   
   prevLO=2;
   count=0;
   for( ;resPool.next(); ){
      prevIp=resPool.getString(1);
      String[] aOctets=Pattern.compile("\\.").split(prevIp);
      curLO = aOctets[3];

      print("Prev: "+prevLO+" Cur: "+curLO);

      if((Integer.valueOf(curLO)-Integer.valueOf(prevLO))>1){
         return Integer.valueOf(prevLO)+1;
      } else {
         prevLO=curLO;
      }
      count++;
   }
   if(count==0 ){
      return 2;
   } else if (Integer.valueOf(prevLO)>=2 && Integer.valueOf(prevLO)<253){
         return Integer.valueOf(prevLO)+1;
   } else {
      return 0;
   }
}
//code
cid = event.getContractID();

if( event.getParamId() == ADDRESS_PARAM_ID ){
   print ("CID="+cid);
   qSubnet = "SELECT address_quarter.title FROM `contract_parameter_type_2` "
      +"JOIN address_house "
         +"ON hid = address_house.id "
      +"JOIN address_quarter " 
         +"ON quarterid = address_quarter.id "
      +"WHERE cid = '"+cid+"'";

   ps = con.prepareStatement(qSubnet);
   rs = ps.executeQuery();
   if( rs.next() ){
       strSubnet = rs.getString(1);
      print("Subnet: "+strSubnet);
   } else {
      print("В адресе не определена подсеть!");
      return;
   }
   print( "Select: "+getFreeIP(strSubnet));
}

осталось разобраться, как вставлять поолученый параметр в договор.
Кстати, с MessageBox'ом на стороне клиента ничего не поменялось? Хотелось бы информировать оператора о некоторых событиях, например, что закончились адреса в пуле ;-)

Автор:  mrlexy [ 20 май 2009, 16:39 ]
Заголовок сообщения: 

Код:
new ContractParamUtils( con ).setStringParam( cid, IP_PARAM_ID, strFreeIP );

работает, но не обновляет визуально пока не выйдешь страницы контракта и не зайдешь снова. Это особенность клиента или можно что-то сделать, чтоб отображалось сразу?

для изменения атрибута договора пробовал
Код:
   cm = new ContractManager(con);
   contract=cm.getContractByID(cid);
   contraсt.setTitle(strFreeIP);

ошибок не выдает, но и заголовок договора не меняет...
ЧЯДНТ?

Автор:  Администратор [ 20 май 2009, 16:42 ]
Заголовок сообщения: 

Цитата:
работает, но не обновляет визуально пока не выйдешь страницы контракта и не зайдешь снова. Это особенность клиента или можно что-то сделать, чтоб отображалось сразу?

ничего не сделаешь, клиент не знает, что на сервере какой-то скрипт что-то менял..

Цитата:
ошибок не выдает, но и заголовок договора не меняет...

меняйте запросом в таблице contract

Автор:  mrlexy [ 20 май 2009, 17:43 ]
Заголовок сообщения: 

:shock:
понятно...
непонятно только, к чему тогда городить огород с api, если клиенту никаких действий не передается? можно было и не париться, все писать через sql

Автор:  stark [ 21 май 2009, 12:32 ]
Заголовок сообщения: 

mrlexy писал(а):
:shock:
понятно...
непонятно только, к чему тогда городить огород с api, если клиенту никаких действий не передается? можно было и не париться, все писать через sql


это api не специально только для того, чтобы скрипты писать . Его использует код биллинга , оно в первую очередь нам нужно .. А вы , да может использовать sql, если оно вам не нужно.

Автор:  mrlexy [ 21 май 2009, 13:22 ]
Заголовок сообщения: 

stark писал(а):
это api не специально только для того, чтобы скрипты писать . Его использует код биллинга , оно в первую очередь нам нужно .. А вы , да может использовать sql, если оно вам не нужно.

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

Автор:  mrlexy [ 21 май 2009, 14:02 ]
Заголовок сообщения: 

В http://wiki.bgbilling.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%B0_%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC

проверка телефонного номера есть такой код:
Код:
event.setError("Не надо писать что попало!");


у меня он не работает, говорит, что метод не определен, в чем может быть ошибка?

Автор:  stark [ 22 май 2009, 17:28 ]
Заголовок сообщения: 

mrlexy писал(а):
В http://wiki.bgbilling.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%B0_%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC

проверка телефонного номера есть такой код:
Код:
event.setError("Не надо писать что попало!");


у меня он не работает, говорит, что метод не определен, в чем может быть ошибка?


этот метов доступен только в обработчике события "Перед изменением параметра договора" , но не у других ..Это метов класса bitel.billing.server.script.bean.event.ContractParamBeforeChangeEvent

Автор:  mrlexy [ 22 май 2009, 19:54 ]
Заголовок сообщения: 

спасибо, помогло.
А говорили - месажбоксы выкидывать нельзя! :D

но появился следующий вопрос, можно ли как то переопроделить вводимое поле?
Т.е. если я ввожу к примеру '?=' в текстовом параметре, то скрипт производит поиск свободного IP и вместо введенного вставляет в поле его.
Подобные конструкции результата не дали:
Код:
      ip_addr=event.getValue();
      ip_addr=strFreeIP;


Код:
      cpu=new ContractParamUtils( con );
      cpu.setStringParam( cid, IP_PARAM_ID, strFreeIP );

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