воскресенье, 27 мая 2012 г.

Asterisk realtime queue_log

Продолжаем рассказ о подключении к Asterisk 1.8 архитектуры реального времени или как её иначе называют realtime. О получении с использованием realtime конфигурации musiconhold рассказано в предыдущей публикации, если realtime на Asterisk настраивается впервые, рекомендуется обратиться к этой статье для первоначальной настройки. 
На этот раз мы будем подключать queue_log. Как было замечено в предыдущей публикации одним из препятствий с которым приходится сталкиваться при подключении realtime является отсутствии структуры таблицы. Те таблицы что в обилии есть на просторах интернета уже давно не актуальны, а те что идут вместе с исходным кодом Asterisk приходится модифицировать. 

При создании структуры таблицы из поставляемого с исходным кодом Asterisk файла дампа queue_log.sql в лог файле Asterisk у нас появятся ошибки:

“Realtime table queue_log@general: Column time cannot be a datetime res_config_mysql.c: Table queue_log requires a column 'data' of size '0', but no such column exists.
res_config_mysql.c: MySQL RealTime: Failed to insert into database: Unknown column 'data' in 'field list'”

Нам требуется модифицированная SQL таблица которая представлена ниже

CREATE TABLE `queue_log` (
       time varchar(32) default NULL,
       callid char(64) default NULL,
       queuename char(64) default NULL,
       agent char(64) default NULL,
       event char(32) default NULL,
       data char(64) default NULL,
       data1 char(64) default NULL,
       data2 char(64) default NULL,
       data3 char(64) default NULL,
       data4 char(64) default NULL,
       data5 char(64) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Рассмотрим по порядку назначение каждого поля.

time - Дата и время события. С некоторых пор к дате и времени через точку добавляются микросекунды, после этого поле таблицы по понятным причинам уже не может быть SQL формата datetime, меняем формат поля на varchar.
callid - "REALTIME", "NONE", или уникальный идентификатор канала.  
queuename - Имя затронутой очереди пока описанной в конфигурационном файле queues.conf
agent - Одно из значений ADDMEMBER, REMOVEMEMBER, RINGNOANSWER, EXITEMPTY, TRANSFER, AGENTDUMP, ABANDON, SYSCOMPAT, CONNECT, COMPLETECALLER, COMPLETEAGENT, AUSEALL, UNPAUSEALL, PAUSE, UNPAUSE, PENALTY, ENTERQUEUE, EXITWITHTIMEOUT, EXITEMPTY, EXITWITHKEY, или значение определённое пользователем.
data ... data5 - Аргументы связанные с событием описанном в поле event.

В конфигурационном файле логов Asterisk logger.conf по умолчанию идёт настройка таким образом, что как только для queue_log появляется возможность работы с realtime сразу начинается запись в базу данных. Поэтому теперь нам лишь требуется убрать комментарий перед надписью “queue_log => mysql,general” в конфигурационном файле extconfig.conf, выполнить команду из консоли Asterisk “module reload” и можно начинать смотреть данные которые начнут появляться в MySQL таблице queue_log. Файл queue_log находящийся в директории “/var/log/asterisk” нам больше не понадобится и его можно удалить.

1 комментарий: