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 ] |
Заголовок сообщения: | |
![]() понятно... непонятно только, к чему тогда городить огород с 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 ] |
Заголовок сообщения: | |
спасибо, помогло. А говорили - месажбоксы выкидывать нельзя! ![]() но появился следующий вопрос, можно ли как то переопроделить вводимое поле? Т.е. если я ввожу к примеру '?=' в текстовом параметре, то скрипт производит поиск свободного 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/ |