Описание принципа работы
Принцип работы TTS
Подсистема TTS собирает первичную информацию о вызовах (анализирует поток сигнальной информации, проходящий через Core), осуществляет её накопление, обработку и формирование файлов с записями о разговорах (CDR - Call Detail Record) - CDR-файлов. Подсистема TTS работает в рамках кластера Core и состоит из трех приложений:
- ct_trike_tts_server - базовый сервис, занимающийся накоплением и обработкой первичной информации, формированием CDR-записей и записью их в БД;
- ct_trike_cdr_server - сервис занимается генерацией CDR-файлов на основе сформированных подсистемой ct_trike_tts_server-записей;
- tts_ftp_server - FTP-сервер, использующий БД MySQL в качестве файловой системы. Это приложение предоставляет доступ к файлам CDR, сгенерированным приложением "ct_trike_cdr_server" по протоколу FTP.
База данных TTS содержит следующие объекты:
- tolltickets - таблица с расширенной информацией о вызовах, используется для показа истории вызовов;
- ss - таблица с информацией об использованных в рамках вызова услугах;
- cdr - таблица CDR-записей;
- tree - таблица со структурой файлов и каталогов (виртуальное представление файловой системы CDR);
- inodes - таблица с мета-информацией об объектах виртуальной файловой системы CDR (тип, режим доступа, владельца, время создания, размер);
- data — таблица с данными, связанными с файлами в виртуальной файловой системе CDR;
- tree_view — представление полных сведений о виртуальной файловой системе, информация получена из таблиц tree, inodes и data;
- counters - таблица с системной информацией, необходимой для формирования CDR-файлов типа "counter";
- различные хранимые функции и процедуры для работы с виртуальной файловой системой.
Таблица 1 - Описание параметров приложения "core_trike_tts" сервиса TTS, доступные администратору виртуальной АТС
Название | Значение по умолчанию | Описание |
---|---|---|
actual_calls_archive_size | 1000 | Количество завершенных вызовов, которое будет хранить сервис service_actual_calls. |
actual_calls_enabled | true | Определяет, включен (true) или выключен (false) сервисе истории вызовов (будет или нет история вызовов сохраняться в базу). |
adaptation | undefined | текущая адаптация |
autoclean_enabled | true | Определяет, активирована ли автоочистка. |
autoclean_start_at | every 1 day at 00:00 | Определяет время и периодичность запуска автоочистки. Задается в следующих видах: - every <N> (day/week/month/year) at <HH:MM>, где <N> - автоочистка будет срабатывать каждые <N> дней (недель, месяцев, лет соответственно) в заданное время с небольшой погрешностью, необходимой, чтобы при большом количестве доменов не создать большую нагрузку на сервер MySQL. Например, значение "every 1 day at 00:00" означает, что автоочистка будет запускаться каждый день около полуночи. - at <DD.MM.YYYY HH:MM:SS> - автоочистка сработает в заданное время, после чего задача автоматически удалится. Например, "at 22.12.2014 15:00:00" означает, что необходимо выполнить очистку 22 декабря 2014 года ровно в 15:00. |
cdr_columns_name | Команда позволяет изменить название колонки <column> на новое | |
cdr_generation_enabled | true | Определяет, включена (true) или выключена (false) запись CDR в БД и генерации CDR-файлов. |
cdr_field_delimiter | semicolon | Разделитель полей CDR: tab - символ Tab (\t); space - пробел ( ); comma - запятая (,); semicolon - точка с запятой (;). |
cdr_type | normal | Определяет формат создаваемых CDR-файлов: расширенный (extended), обычный (normal) или задаваемый вручную (manual). Расширенный режим отличается от обычного дополнительными полями: - CODEC - список кодеков; - T_DNA - время ожидания ответа абонента при неотвеченном вызове, в секундах. В manual режиме список колонок создаваемого CDR файла берется из свойства manual_cdr_columns |
cdr_time_rounding | downside | Определяет режим округления времени при записи CDR файлов. Доступные значения: downside - округление в меньшую сторону путем, берется только прошедшее целое количество секунд (2999мс округляется до 2-x секунд); upside - округление в большую сторону путем. Если количество миллисекунд в последней секунде > 0 - считается эту секунду (1001мс округляется до 2-x секунд); downside_with_delta - округление в меньшую сторону, если количество миллисекунд в последней секунде <= 850, иначе, округляем в большую сторону. Замечание: если весь вызов длился более 200мс, но меньше 1 секунды - то время вызова будет равно 1 секунде; upside_with_delta - округление в большую сторону, если количество миллисекунд в последней секунде >= 330, иначе, округляем в меньшую сторону. Замечание: если весь вызов длился более 200мс, но меньше 1 секунды - то время вызова будет равно 1 секунде; mathematically - математическое округление. Если количество миллисекунд в последней секунде >= 500 - округляем в большую сторону, иначе - в меньшую; millisecond - записываем время в CDR в миллисекундах. |
manual_cdr_columns | type, datetime, kod_a, kod_b, nai_a, nai_b, n_tr_gr_a, n_tr_gr_b, t_ecd, t_dba, t_dna, cause_isup, cause_int, completind, origin_dig, dialed_dig, actsusb, categ_a, place, rec_seq, servuser, servindic, treatment, conn_id, redirected, redirection, orig_called, src_ip, dst_ip, port_a, port_b, diagnostic, call_record_a, call_record_b, codec, src_port, dst_port, media_proxy, signal_src_ip, signal_dst_ip, signal_src_port, signal_dst_port | Задается список колонок, которые будут присутствовать в CDR файле. При этом колонки будут в том порядке, в каком они заданы. |
enabled | true | Определяет, включен (true) или выключен (false) сервис TTS (история вызовов, запись CDR). |
partial_cdr_timeout | 300 | Период, по истечении которого в базе данных создается запись с информацией о вызове. Также параметр задает периодичность, с которой будут выгружаться "partial CDR", в секундах. |
port_source | iface_name | Формат записи имен интерфейсов: iface_name - в CDR/tollticket будет записано имя интерфейса; iface_id - в CDR/tollticket будет записано id интерфейса. |
purge_older_than | 2 month | Период времени, по истечении которого записи в базе данных будут удалены. Значение может быть задано в часах (hour[s]), днях (day[s]), неделях (week[s]), месяцах (month[s]), годах (year[s]). |
sign_cdr_enabled | false | Опция, при включении которой (значение "true") будет производиться цифровая подпись CDR-файлов и отдельных записей в рамках CDR-файлов. В CDR-файл будет добавлена колонка с именем SIGN, в которой для каждой записи будет прописана её цифровая подпись. Кроме того, в CDR-файле будет создана CDR-запись типа "final", все поля которой, кроме "SIGN", будут пустыми. В поле "SIGN" у данной записи будет подпись всего CDR-файла. |
Команды управления сервисом TTS приведены в разделах:
Принцип работы системы сбора CDR
Как правило, по результату обслуживания вызова системой TTS формируется один пакет информации в CDR-файле с полной информацией о вызове.
Если вызов находится продолжительное время в фазе разговора, осуществляется формирование промежуточных записей (partial cdr).
Промежуточная CDR-запись формируется с периодичностью, задаваемой параметром "partial_cdr_timeout", по умолчанию составляет 5 минут и может быть изменена, подробное описание приведено в разделе Команды управления сервисом TTS.
В случае формирования Partial CDR в поле "rec_seq" в первой Partial CDR будет записана цифра 1, у второй - цифра 2 и так далее. В тот момент, как вызов завершится, и будет сформирована финальная запись CDR, в поле "rec_seq" будет записан 0 - это служит признаком, что данный вызов завершен. При этом у каждой Partial CDR будет собственная длительность вызова, поле "datetime" у каждой последующей Partial CDR будет равно времени формирования предыдущей Partial CDR.
Например, после ответа абонента через 5 минут происходит формирование промежуточной CDR-записи и повторный запуск таймера.
Если по истечении очередного периода разговор между абонентами продолжается, то формируется следующая промежуточная CDR-запись. По завершении разговора формируется финальная CDR-запись, которая закрывает записи о вызове.
Если во время звонка абоненты пользовались услугами, формируется запись, у которой поле "type" соответствует "service", в поле
"actsusb" будет записан вид услуг, которое было использовано. Более подробное описание поля CDR в случае использования услуг приведено в разделе Управление системой CDR.
Группировка CDR, структура папок и файлов
CDR-файлы сохраняются на файловой системе в следующей древовидной структуре:
domain ├─ some_domain_1 ├─ default │ └─ csv ├─ some_group_1 │ └─ csv │ ... └─ some_group_n └─ csv
Вызовы в рамках системы группируются в заданные оператором логические группы. Подкаталоги в файловой системе создаются только под существующие группы. При удалении группы папка с группой удаляется автоматически в случае, если для данной группы нет ни одного CDR-файла, иначе папку необходимо удалять вручную.
Вызовы одной группы сохраняются в файлы общей папки, определенной для этой группы на виртуальной файловой системе. Файл формируется только в момент закрытия CDR-файла. Принадлежность вызова к группе определяется принадлежностью к этой группе вызывающего абонента (абонента А) или транка, с которого поступил вызов. Определение, к какой группе относится абонент или транк, является задачей оператора.
Информация о вызове записывается в БД MySQL с именем ecss_calls_db в таблицу cdr.
Сформированные CDR-файлы хранятся на виртуальной файловой системе, которая также хранится в БД MySQL, доступ до которой осуществляется по протоколу FTP.
Имя CDR-файла имеет следующую структуру:
для режимов "time", "period":
cdr<Prefix>_<TimeStamp>_<F>.csv
- для режима "counter":
cdr<Prefix>_<TimeStamp>_<FileNumber>_<F>.csv
где
<Prefix> - префикс имени файла;
<TimeStamp> - метка времени создания файла в формате (ГГГГММДД_ЧЧ_ММ_ДД);
<FileNumber> - монотонно возрастающий счетчик. Начинается с 1. Для каждого времени формирования CDR типа "counter" свой счетчик;
<F> - флаг режима файла, значения описаны в главе "Режимы генерации CDR-файлов".
Примеры имен файлов:
cdrAts23_20150925_11_15_00_p.csv
cdrAts23_20150925_17_00_00_1_с.csv
Формат CDR-файлов
В системе поддерживается формат сохранения файлов с CDR-записями - csv. Это стандартный формат представления данных в табличной форме.
Первая строка в файле - список с именами колонок, которые разделяются символом разделителем (по умолчанию точка с запятой ";").
Каждая следующая строка соответствует одной CDR. В строке перечислены значения полей, разделенные символом разделителем.
Состав полей и названия колонок можно настраивать.
Файлы в этом формате имеют расширение .csv.
Набор полей при разных cdr_type:
normal
- type
- datetime
- kod_a
- kod_b
- n_tr_gr_a
- n_tr_gr_b
- t_ecd
- t_dba
- cause_isup
- cause_int
- completind
- dialed_dig
- actsusb
- categ_a
- place
- rec_seq
- servuser
- servindic
- treatment
- conn_id
- redirected
- redirection
- orig_called
- src_ip
- dst_ip
- port_a
- port_b
- diagnostic
extended
- type
- datetime
- kod_a
- kod_b
- n_tr_gr_a
- n_tr_gr_b
- t_ecd
- t_dba
- t_dna
- cause_isup
- cause_int
- completind
- dialed_dig
- actsusb
- categ_a
- place
- rec_seq
- servuser
- servindic
- treatment
- conn_id
- redirected
- redirection
- orig_called
- src_ip
- dst_ip
- port_a
- port_b
- media_proxy
- diagnostic
- codec
manual
- type
- datetime
- kod_a
- kod_b
- nai_a
- nai_b
- n_tr_gr_a
- n_tr_gr_b
- t_ecd
- t_dba
- cause_isup
- cause_int
- completind
- origin_dig
- dialed_dig
- actsusb
- categ_a
- place
- rec_seq
- servuser
- servindic
- treatment
- conn_id
- redirected
- redirection
- orig_called
- src_ip
- dst_ip
- port_a
- port_b
- diagnostic
- signal_src_ip
- signal_dst_ip
- signal_src_port
- signal_dst_port
- call_record_a
- call_record_b
При этом в режиме manual можно менять состав колонок и их порядок
Кроме того, система ECSS-10 поддерживает возможность цифровой подписи СDR файлов. В этом случае в CDR файл добавляется колонка sign, которая содержит подпись данной CDR записи/файла. Подробнее про цифровую подпись CDR файлов написано в главе Цифровая подпись СDR файлов, описание полей файлов см. Описание полей CSV-файла.
Режимы генерации CDR-файлов
В ECSS-10 поддерживаются следующие режимы сохранения CDR-файлов: "count", "period", "time".
Рекомендуется устанавливать большой период закрытия файла (1 раз в сутки).
При малых значениях периода (например, "count" с ограничением 10 вызовов в файле или "period" с ограничением в интервал меньше одного часа) создается очень большое количество файлов, что приводит к деградации производительности файловой подсистемы хоста, снижению производительности кластера CORE, снижению производительности последующей обработки при импорте в биллинг. Такого рода режимы можно использовать только для проверки функциональности. Также нужно производить удаление CDR-файлов после экспорта их в биллинговую систему.
Режим "count"
Режим "count" позволяет сохранять файлы с определенным количеством записей. В этом режиме CDR-файл будет формироваться в момент, когда количество несохраненных в CDR-файл записей типа "count" в базе достигнет заданное значение.
CDR-файлы с типом записей "count" формируются не чаще одного раза в минуту. К имени CDR-файла привязан номер сгенерированного файла. Так, например, если за 1 минуту было сформировано CDR для трех файлов, их имена будут следующие:
cdr_count_20150925_11_15_00_1_c.csv
cdr_count_20150925_11_15_00_2_c.csv
cdr_count_20150925_11_15_00_3_c.csv
"Partial_cdr" запись является отдельной записью. Возможна ситуация, когда разные части длительного вызова (в том числе вызовы по услугам) будут сохранены в разных файлах.
В имени файлов данного режима присутствует суффикс "c", указывающий на режим "count".
Режим "period"
В режиме "period" CDR-файлы формируются каждые <N> секунд. При этом начало интервала выравнено по 01.01.1970 г. Этот режим позволяет сохранять файлы с ограничением по времени.
Для режима "period" актуально замечание о возможности разнесения записей длительных вызовов (вызовов по услугам) в разные файлы. В имени файлов данного режима присутствует суффикс "p", указывающий на режим "period".
Режим "time"
В этом режиме CDR записываются в текущий файл, пока не наступит очередной заданный момент времени в сутках, по которому происходит закрытие текущего файла и открытие нового. Этот режим позволяет делать "нарезку" файлов в определенные моменты времени в течение суток (например, закрывать файл в 00:00).
Можно задать несколько моментов закрытия файла за сутки, они могут указываться с точностью до секунды (если секунды опущены, то они считаются равными нулю). В имени файлов данного режима присутствует суффикс "t", указывающий на режим "time".
Цифровая подпись СDR-файлов
Система ECSS-10 может производить цифровую подпись CDR-файлов и отдельных записей в рамках CDR-файлов. Для этого необходимо включить цифровую подпись CDR-файлов командой:
/domain/<DOMAIN>/tts/properties/set sign_cdr_enabled true
где
<DOMAIN> - имя виртуальной АТС.
Если включена подпись CDR-файла, то в CDR-файл добавляется колонка с именем SIGN, в которую для каждой записи будет записана её цифровая подпись. Кроме того, в CDR-файле будет создана CDR-запись типа "final", все поля которой, кроме "SIGN", будут пустыми. В поле "SIGN" у данной записи будет подпись всего CDR-файла.
Проверка цифровой подписи СDR-файла:
Для проверки подписи CDR-файла используется команда:
/domain/<DOMAIN>/cdr/validate --line <CDR_Line> | --file <CDR_File_Path>
где
--line <CDR_Line> - опция для проверки подписи CDR-записи, где
<CDR_Line> - имя CDR-записи;
--file <CDR_File_Path> - опция для проверки подписи CDR-файла, где
<CDR_File_Path> - имя CDR-файла.