AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

A2billing, feature request: load balancing между исходящими транками

Биллинг 17 сообщений 27.12.2010 13:25 - 18.01.2011 17:24
#1

Распределение готово. В том числе с учётом пожеланий - можно указывать в процентах и без учёта повременной нагрузки.
Commit
Большая часть интерфейсных новинок уже отображается по-русски, поэтому должно помочь разобраться в настройке.
Логика распределения...
1.Обработка RANDOM TRUNKS считается возможной бесконечное количество раз за сессию.
2.Если в списке RANDOM TRANKS задать один или несколько транков с нулевым процентом и один или больше с процентами >0, то в случае если все процентные окажутся недоступными для прохождения исходящего вызова (например, все линии заняты), то такой вызов будет пропущен через "нулевой%" транк с наибольшим количеством оставшихся исходящих минут (транки с незаданными минутами считаются как с бесконечным кол-вом минут)
3.Если все RANDOM транки задать с нулевым процентом, то исходящий вызов будет пропущен через наименее нагруженный транк (напоминаю, что транки с незаданными в них минутами считаются как с бесконечным кол-вом минут).
4.FAILOVER TRUNK A/B и RUNDOM TRUNKS действуют вне зависимости от START DATE A/B и EXPIRY DATE A/B, но обязательно установить DIAL PREFIX A/B. Например, если все звонки хотим обрабатывать через RUNDOM TRANKS A/B или FAILOVER TRUNK A/B, то в DIALPREFIX A/B заносим « _X. ».
С пустым DIALPREFIX A/B ни одно подправило не обработается.
5.Если RUNDOM TRUNKS не заданы или звонок пришел уже после их обработки в этом или другом транке, то обработка передаётся на нижележащие правила И в случае если они не будут удовлетворены, то только тогда обработка будет передана через заданный FAILOVERTRUNK A/B.
6.Блок правил «А» (First Destination Limited) всегда обрабатывается первым, поэтому, можно ему задать префикс на избранные направления (например « _0044(1|2). »), а в блоке «В» указать все направления « _X. ».

Скачать последнюю версию в архиве: https://github.com/nixonch/a2billing/archives/master

... или клонировать с помощью git:Обновлять в дальнейшем из репозитория:
    # git pull
Обязательно апгрейднуть базу:
    /путь к a2b/DataBase/mysql-5.x/UPDATE-a2billing-nixonch.sh

Удачи!

_________________
https://github.com/nixonch/a2billing


Последний раз редактировалось: nixon (Пт Апр 26, 2013 08:31)
#2

Выглядит внушительно Twisted Evil Спасибо!!
На днях попробую, отпишусь.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#3 27.12.2010 13:25

A2billing, feature request: load balancing между исходящими транками


Может ктонить такое сообразит? отправлю патч к areski...
Что именно хочется: иметь возможность равномерно распределять исходящие звонки между имеющимися (или только заданными) транками.
Думаю это можно реализовать полностью через php но есть вариант с наименьшим программингом: добавить четвертый параметр вызова AGI a2billing.php и передавать в нем имя транка (или провайдера) через который должен пойти звонок. В этом случае сам балансинг будет в диалплане через RAND(). Уверен, данную фичу по достоинству оценят, например теже владельцы дешевых GSM карт (datacard) и не только.. Кто возьмется?
ps: если вкрутите в пост с аттачем патча кнопку Donate то лично обещаю нажать на неё Smile

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#4 11.01.2011 12:57

А если звонить через другой астериск в котором реализован случайный вызов случайного провайдера? Very Happy
( Донейт - клик ми)

_________________
NoOne has no fun
#5 11.01.2011 23:05

а зачем так извращаться? нужен новый функционал а не костыль.
проще всего реализовать такое - добавить новый ключ запуска a2billing.php где передавать имя транка для принудительного его использования для данного конкретного звонка. и сделать RAND() через диалплан астериска.
сложнее - добавить rand() функционал на php в билинг. буду благодарен любой реализации.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#6 12.01.2011 03:00

Уже наваял давно. По ссылке в подписи можно скачать мою ветку а2б. Жду только ответа от areski по проблеме с интерфейсом и сразу включу равномерное распределение.
- Сейчас к каждому транку можно задать по два направления с ограничением минут, фейловер транком и другими ограничениями.
- Добавлен перекрывающий OutCID в настройках каждого транка.
- Добавлен возвратный звонок - чтобы люди, на телефоны которых звонили ваши пользователи, могли перезвонив на высветившийся номер попасть в источник беспокойства. Настройки этого добавлены как в админском так и в клиентском интерфейсе.
- Добавлена возможность для пользователя включать себе и выключать запись разговоров и соответственно в списке звонков прослушивать.
Ставьте. Hадеюсь, интуитивно понятно будет.
Апдейт на мой форк ничего не должен поменять в работе вашей системы. За исключением того, что возможно с *1.4 не всё будет гладко.
Не забываем апдейтнуть базу (файл DataBase/mysql-5.x/UPDATE-a2billing-nixonch.sh).
Все углы вроде уже откатал. Новые идеи приветствуются.

_________________
https://github.com/nixonch/a2billing


Последний раз редактировалось: nixon (Ср Дек 05, 2012 08:07)
#7 12.01.2011 22:22

WOW! Просто праздник какойто!! Big Green
спасибо огромное! Clap 2
nixon писал(а):
Жду только ответа от areski по проблеме с интерфейсом и сразу включу равномерное распределение.

пожалуй подожду этого момента, тогда уже скачаю и погляжу.

Added after 1 hours 44 minutes:

картинку лучше сюда аттачем крепить сразу, все эти файлосервисы крайне ненадежны и срок жизни там очень мал.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#8 13.01.2011 08:50

Я в первом посте не совсем коректно выразил свою мысль, хочется не равномерного (фиксированного) распределения а задаваемого, например имеем три транка, сегодня хочу распределять только между двумя указанными 60%/40%, а завтра например захочу между тремя: 65%/30%/5%, хочется иметь возможность менять эти параметры в любое время. Под "равномерным" имелось ввиду очень точное распределение в встроенной функции астериска RAND(). Вобщем это пожелание Smile
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#9 13.01.2011 09:36

Задавать распределение по количеству успешных звонков? по продолжительности? по сравнению между лимитами каждого?
Вот что-то мне кажется, что это лишнее. Уже есть настраиваемые лимиты по каждому транку. Таким образом простой равномерности через RAND будет достаточно. А если лимиты по какому-то из ранд транков уже превышены, то этот транк не будет участвовать в распределении. Может быть сделаю распределение по минимальной продолжительности, но тоже не вижу пока нужды.
А пока добавил русский в админ-интерфейс и горку переводов https://github.com/nixonch/a2billing/commit/4a253d238f95a07a81a2c88737e6f2065aefa374

_________________
https://github.com/nixonch/a2billing
#10 13.01.2011 19:10

nixon писал(а):
Задавать распределение по количеству успешных звонков?

Просто по количеству звонков. Я читал что RAND() в астериске очень точно делает эту работу, тоесть если поставить скажем 60%/20%/10% то из ста звонков они распределятся соответственно как 60/20/10 с высокой точностью и "равномерно" по заданной формуле. Кстати в данном примере оставшиеся 10 звонков пойдут в никуда или на заданный заранее для таких случаев "дефолтный" транк. Я уверен это будет очень полезная возможность и не думаю что такое есть в каждом коммерческом билинге.

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#11 13.01.2011 19:27

anest писал(а):
в данном примере оставшиеся 10 звонков пойдут в никуда или на заданный заранее для таких случаев "дефолтный" транк
Если имеешь ввиду пример с моей картинки, то там как раз всё пучком будет, т.к. задаётся список рандовых транков по каждому направлению. Т.е. получишь распределение не по одному списку транков, а по двум с пересекающимися условиями.
_________________
https://github.com/nixonch/a2billing
#12 13.01.2011 19:43

Честно говоря я на этой картинке так и не смог рассмотреть ни одной опции - надписи не читабельны. Советую приаттачить картинку в оригинальном разрешении - форум сам сделает превьюшку меньшего размера.
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#13 13.01.2011 20:34

Правой кнопкой по картинке -> Сохранить изображение как

При наличии ограничений в виде предельной продолжительности звонков в сутки, как представляешь распределение в процентном соотношении? Ведь там где 60%, могут и с одного звонка выговорить все разрешенные минуты.
Предлагаю так... после того как осмыслишь в работе существующий функционал, напиши алгоритм твоего распределения с учётом полученного опыта. Потому что пока не вижу как это натянуть на мой код.

_________________
https://github.com/nixonch/a2billing
#14 14.01.2011 04:11

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

насчет распределения - я же уже написал, ничего не нужно мыслить больше - мне не нужно распределение по минутам, зачем их сюда приплетать. мне нужно тупо распределение по количеству звонков. Я уже приводил пример выше, посмотри описание на RAND() и что народ пишет по ней хотябы в этом форуме. эта функция РАВНОМЕРНО распределяет КОЛИЧЕСТВО звонков. тоесть если задать 30% в один транк то из 100 звонков в него ровно 30 и уйдет. (только не спрашивай меня как она это делает, я не знаю)
собственно мне надо какойто простой механизм задания в билинге этого процента на конкретный транк, только и всего. если сделать пропускать ключем в скрипт название транка на который этот звонок гарантированно пойдет то можно вообще не заморачиваться насчет логики распределения, rand() в астериске сама все сделает. правда проценты эти я уже в диалплане буду выставлять но и на том уже спасибо скажу.

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

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

_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#15 18.01.2011 10:13

anest писал(а):
мне не нужно распределение по минутам, зачем их сюда приплетать. мне нужно тупо распределение по количеству звонков.
Тут как раз всё наоборот, мне надо приплести твоё распределение к моим минутам. Wink Не буду же я себя обделять функционалом, раз уж дописывать что-то. Правильно?
Цитата:
если сделать пропускать ключем в скрипт название транка на который этот звонок гарантированно пойдет, то можно вообще не заморачиваться насчет логики распределения, rand() в астериске сама все сделает. правда проценты эти я уже в диалплане буду выставлять но и на том уже спасибо скажу.
Кривость лепить не буду, зачем двойные настройки плодить - уж делать, так делать всё внутри движка a2billing'a.
Цитата:
счас вот какая еще мысль в голову пришла: а транки исходящие в базе билинга имеют порядковый номер какой-нить? если да то может проще тогда добавить ключ в команде вызова где и передавать "принудительный транк" - если там задано число - гоним звонок только через этот транк. такое сложно сделать? ну и гдето надо сделать чтоб посмотреть какой номер за каким транком в данный момент.
Всё можно, но тоже не буду, по выше обозначенному обстоятельству. Спасибо за идею!
_________________
https://github.com/nixonch/a2billing


Последний раз редактировалось: nixon (Ср Янв 19, 2011 02:41)
#16 18.01.2011 12:48

я уже понял твою позицию, тогда давай на этом закончим это обсуждение которое никуда не приведет. буду надеяться что может ктото еще откликнется и поможет сделать именно то что я прошу а не то что мне совсем не нужно. спасибо в любом случае за отклик и попытку помочь.
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#17 18.01.2011 17:24

Хм! Ты не понял. Процесс идёт. Просто вопрос в разнообразии, чтоб была возможность любых вариантов, в том числе и перекрещивающихся.
_________________
https://github.com/nixonch/a2billing