Клиент подключается к нашему астериску по SIP соединению и производит вызов.
После прохода по экстеншену, вызов попадает через deadagi в билинговый скрипт (модифицированный a2b).
Далее скрипт перед вызовом команды dial на провайдера, получает текущее имя канала.
Допустим название канала SIP/7573794284-0001b6e5 и записывает это в базу данных.
После чего происходит команда dial на выбранного провайдера.
После дозвона на номер поднимается второй канал, в этом варианте SIP/voicetrading-ring-0001b6e6
Далее клиент делает комбинацию hold-unhold-hold и оставляет канал в холд режиме.
Есть внешний скрипт, который обсчитывает текущие звонки клиентов, и если они уходят за превыещение баланса, то он должен остановить текущий звонок. Подключается через asm manager. Ну и понятное дело работает с бд, где записаны текущие звонки с названием канала (первого канала).
Так вот получается такая ситуация, что чекалка пытается остановить канал SIP/7573794284-0001b6e5, а астериск говорит что такого канала нет.
Код: Выделить всё
2012-05-14 04:48:12 27578 Error: array (
'Response' => 'Error',
'Message' => 'No such channel',
)
Далее смотрим в логи. И видим что звонок в момент попытки остановки существует. И заканчивается позже после попытки. Через 4-5 минут в данном случае.
Код: Выделить всё
[May 14 04:52:24] ERROR[27388] utils.c: write() returned error: Broken pipe
[May 14 04:52:24] VERBOSE[27388] logger.c: -- AGI Script a2billing.php completed, returning 0
[May 14 04:52:24] VERBOSE[27388] logger.c: -- Executing [0037745598134@a2billing:5] Hangup("SIP/voicetrading-ring-0001b6ea", "") in new stack
[May 14 04:52:24] VERBOSE[27388] logger.c: == Spawn extension (a2billing, 0037745598134, 5) exited non-zero on 'SIP/voicetrading-ring-0001b6ea'
Билинговый скрипт включен на логирование любых ошибок внутри себя, но ничего не появляется.
В момент данного проиществия не было возможности провести какой-то мониторинг. Есть только логи.
Получается что пропал первый канал SIP/7573794284-0001b6e5 вместе со скриптом, при этом второй канал SIP/voicetrading-ring-0001b6e6 остался рабочим относительно длительное время.
Мы пытались повторить ситуацию, но убить первый канал нам так и не удалось. Множество раз холдили. Пытались убить билинговый процесс (kill, kill -9 и т.д.), процес переходил в зомби, не отрабатывал свой функционал, но ПЕРВЫЙ канал оставался и по нему можно было закончить звонок.
Нагрузка в тот момент была порядка 30-40 одновременных звонков. Из них 30 с таким поведением.
А так система всегда работает на ура.
Куда копать в поисках пропажи канала?
Ниже лог звонка.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Лог звонка
Код: Выделить всё
[May 14 04:42:55] VERBOSE[27388] logger.c: -- Executing [0037745598134@a2billing:1] NoOp("SIP/7573794284-0001b6e5", "0037745598134") in new stack
[May 14 04:42:55] VERBOSE[27388] logger.c: -- Executing [0037745598134@a2billing:2] Wait("SIP/7573794284-0001b6e5", "1") in new stack
[May 14 04:42:56] VERBOSE[27388] logger.c: -- Executing [0037745598134@a2billing:3] Set("SIP/7573794284-0001b6e5", "TRANSFER_CONTEXT=no-transfer") in new stack
[May 14 04:42:56] VERBOSE[27388] logger.c: -- Executing [0037745598134@a2billing:4] DeadAGI("SIP/7573794284-0001b6e5", "a2billing.php|1") in new stack
[May 14 04:42:56] WARNING[27388] res_agi.c: Running DeadAGI on a live channel will cause problems, please use AGI
[May 14 04:42:56] VERBOSE[27388] logger.c: -- Launched AGI Script /var/lib/asterisk/agi-bin/a2billing.php
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: A2Billing AGI internal configuration - 1:
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: file:a2billing.php - line:97 - IDCONFIG : 1
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: file:a2billing.php - line:98 - MODE : standard
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: file:a2billing.php - line:110 - AGI Request:
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: file:a2billing.php - line:111 - Array
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: (
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_request] => a2billing.php
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_channel] => SIP/7573794284-0001b6e5
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_language] => en
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_type] => SIP
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_uniqueid] => 1336959775.138235
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_callerid] => ---skip---
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_calleridname] => unknown
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_callingpres] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_callingani2] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_callington] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_callingtns] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_dnid] => 0037745598134
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_rdnis] => unknown
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_context] => a2billing
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_extension] => 0037745598134
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_priority] => 4
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_enhanced] => 0.0
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: [agi_accountcode] => --skip--
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: )
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1:
------------SKIPED-------------------
[May 14 04:42:56] VERBOSE[27388] logger.c: a2billing.php|1: file:Class.RealTimeCall.php - line:37 - try add realtime call 'SIP/7573794284-0001b6e5' in DB
------------SKIPED-------------------
[May 14 04:42:56] VERBOSE[27388] logger.c: -- AGI Script Executing Application: (Dial) Options: (SIP/0000037745598134@voicetrading-ring|60|rL(5673000:61000:30000))
[May 14 04:42:56] VERBOSE[27388] logger.c: -- Limit Data for this call:
[May 14 04:42:56] VERBOSE[27388] logger.c: > timelimit = 5673000
[May 14 04:42:56] VERBOSE[27388] logger.c: > play_warning = 61000
[May 14 04:42:56] VERBOSE[27388] logger.c: > play_to_caller = yes
[May 14 04:42:56] VERBOSE[27388] logger.c: > play_to_callee = no
[May 14 04:42:56] VERBOSE[27388] logger.c: > warning_freq = 30000
[May 14 04:42:56] VERBOSE[27388] logger.c: > start_sound =
[May 14 04:42:56] VERBOSE[27388] logger.c: > warning_sound = timeleft
[May 14 04:42:56] VERBOSE[27388] logger.c: > end_sound =
[May 14 04:42:56] VERBOSE[27388] logger.c: -- Called 0000037745598134@voicetrading-ring
[May 14 04:42:56] VERBOSE[27388] logger.c: -- SIP/voicetrading-ring-0001b6e6 is making progress passing it to SIP/7573794284-0001b6e5
[May 14 04:43:05] VERBOSE[27388] logger.c: -- SIP/voicetrading-ring-0001b6e6 answered SIP/7573794284-0001b6e5
[May 14 04:43:18] VERBOSE[27388] logger.c: -- Started music on hold, class 'default', on SIP/voicetrading-ring-0001b6e6
[May 14 04:43:20] VERBOSE[27388] logger.c: -- Stopped music on hold on SIP/voicetrading-ring-0001b6e6
[May 14 04:43:20] VERBOSE[27388] logger.c: -- Started music on hold, class 'default', on SIP/voicetrading-ring-0001b6e6
------- Вот тут в 2012-05-14 04:48:12 попытка сделать hangup по каналу SIP/7573794284-0001b6e5 , но асетр ответил что такого канала нет.
[May 14 04:52:24] ERROR[27388] utils.c: write() returned error: Broken pipe
------- Тут должен быть вывод с билинга. Но его нет.
[May 14 04:52:24] VERBOSE[27388] logger.c: -- AGI Script a2billing.php completed, returning 0
------- Последние две строчки непонятны по какому-то другому каналу, но почему они в этом процессе?
[May 14 04:52:24] VERBOSE[27388] logger.c: -- Executing [0037745598134@a2billing:5] Hangup("SIP/voicetrading-ring-0001b6ea", "") in new stack
[May 14 04:52:24] VERBOSE[27388] logger.c: == Spawn extension (a2billing, 0037745598134, 5) exited non-zero on 'SIP/voicetrading-ring-0001b6ea'