Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Количество звонков в единицу времени

1

Добрый день,

стоит задача: мониторить шлюзы на количество одновременно занятых линий. SNMP в шлюзах нет.

Совсем не обязательно что бы это было в режиме реального времени. Поэтому берусь анализировать сдр. Все cdr хранятся в базе, мне необходимо получить количество совершенных звонков в заданном промежутке времени. Вся сложность в том, что я не могу понять логику составления запроса. Предположим, есть поля в таблице: Кто, куда, канал, началозвонка, конецзвонка, продолжительность.

Допустим, я хочу узнать количество звонков соверешных в период с 1970-01-01 00:00:00 по 1970-01-01 00:00:10

Как мне сравнить промежутка начала и конца звонка с промежутками заданными в запросе? Заранее Спасибо за помощь.

удалить закрыть спам изменить тег редактировать

спросил 2011-10-25 20:36:38 +0400

jacuba Gravatar jacuba
11 1 2

3 Ответа

0

самый простой алгоритм такой

1) берете все даты начала звонка(запросом) в виде calldate,1 as c с вашей даты -2 часа

2) берете все концы звонка(считаете) date_add(calldate, interval duration second),-1 as c

3) ну а теперь просто суммируете по колонке с ;)

так вы получаете колчичество звонков сейчас.

ну а количестов звоноков за период считается просто суммированием. если надо макс занятых каналов, то надо 1,2 упорядочить по первой колонке и считать максимум в вашем интервале по всем этим моментам.

ссылка удалить спам редактировать

ответил 2011-10-26 06:56:37 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил 2011-10-26 07:05:26 +0400

0

еси необходимо ловить перегрузку по емкости, то лучше поставить "заглушку". если необходимо анализировать нагрузку, то, думаю лучше будет суммировать продолжительности разговоров в интервалы времени.
О том, что Вы спросили на языке sql звучит так:
...where start_call between (dateA,dateB) and end_call between (dateA,dateB).
Но count() Вам здесь не в помощь, т.к. количество звонков за установленный интервал не является показательным для Вашей задачи (кол-во одновременно занятых каналов). Т.е., Вы этим запросом посчитаете сколько было звонков в интервале между dateA и dateB. Думаю, что дальнейшему объяснению это логическое направление не подлежит...
Предлагаю другой путь...
Допустим у Вас N каналов. Максимальной нагрузке (занятости всех каналов) за установленный интервал (А,В) времени будет выражение (B-A)*N. Минимальная продолжительность разговора 1сек. Интервал времени 30мин
Максимальная нагрузка за этот период составляет N*30*60. Просуммировав продолжительности звонков, начало и конец которых находится между началом и концом установленного интервала, добавив сумму продолжительности звонков, начало которых находится между интервалом, но конец больше, чем конец... тьфу, какие пошлости получаются... Второй суммой должны быть звонки, выпадающие концом... ага, из ширин... Ну, клин блинтон, надеюсь вы поняли... чтобы не выпалииии... не, не могу больше....
Не потеряйте звонки с неоконченными разговорами по отношению к интервалу.
Полученную сумму соизмерьте с максимальным значением. Вы получили среднее значение нагрузки за весь период.
Разделив интервал пополам и выполнив суммирование в каждой части, Вы получили первое приближение к действительному значению нагрузки. И так далее...
Адекватно суммируя продолжительности звонков, при этом, изменяя дискретность итераций в интервале, Вы получаете более или менее близкую к реальной кривую нагрузки. Где-то вот так...

ссылка удалить спам редактировать

ответил 2011-10-25 22:45:14 +0400

TandemK Gravatar TandemK
175 3 10

обновил 2011-10-26 23:02:40 +0400

Comments

зачем эти танцы с бубном. я вон написал как быстро посчитать.

meral ( 2011-10-27 09:01:32 +0400 )редактировать
-1

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

а правильней было бы snmp прикрутить к астеру и мониторить картину в mrtg к примеру, ну или раз в минуту или можно чаще выполнять команду asterisk -rx "core show channels" и анализировать ее вывод.

ссылка удалить спам редактировать

ответил 2011-10-25 21:40:44 +0400

um2010 Gravatar um2010
2056 70 13 55

Comments

да ну, это вы фиговую идею предложили. по сдр однозначно и просто вычисляется колчиество звонков. а вот core show channels может вешать ядро *, елси часто вызывать

meral ( 2011-10-26 07:02:41 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2011-10-25 20:36:38 +0400

Просмотрен: 2,329 раз

Обновлен: Oct 26 '11

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.