Принцип работы TTS

Подсистема TTS собирает первичную информацию о вызовах (анализирует поток сигнальной информации, проходящий через Core), осуществляет её накопление, обработку и формирование файлов с записями о разговорах (CDR - Call Detail Record) - CDR-файлов. Подсистема TTS работает в рамках кластера Core и состоит из трех приложений:

  1. ct_trike_tts_server - базовый сервис, занимающийся накоплением и обработкой первичной информации, формированием CDR-записей и записью их в БД;
  2. ct_trike_cdr_server - сервис занимается генерацией CDR-файлов на основе сформированных подсистемой ct_trike_tts_server-записей;
  3. tts_ftp_server - FTP-сервер, использующий БД MySQL в качестве файловой системы. Это приложение предоставляет доступ к файлам CDR, сгенерированным приложением "ct_trike_cdr_server" по протоколу FTP.

База данных TTS содержит следующие объекты:

  • tolltickets - таблица с расширенной информацией о вызовах, используется для показа истории вызовов;
  • ss - таблица с информацией об использованных в рамках вызова услугах;
  • cdr - таблица CDR-записей;
  • tree - таблица со структурой файлов и каталогов (виртуальное представление файловой системы CDR);
  • inodes - таблица с мета-информацией об объектах виртуальной файловой системы CDR (тип, режим доступа, владельца, время создания, размер);
  • data — таблица с данными, связанными с файлами в виртуальной файловой системе CDR;
  • tree_view — представление полных сведений о виртуальной файловой системе, информация получена из таблиц treeinodes и data;
  • counters - таблица с системной информацией, необходимой для формирования CDR-файлов типа "counter";
  • различные хранимые функции и процедуры для работы с виртуальной файловой системой.

Таблица 1 - Описание параметров приложения "core_trike_tts" сервиса TTS, доступные администратору виртуальной АТС

НазваниеЗначение по умолчаниюОписание
actual_calls_archive_size1000Количество завершенных вызовов, которое будет хранить сервис service_actual_calls.
actual_calls_enabledtrueОпределяет, включен (true) или выключен (false) сервисе истории вызовов (будет или нет история вызовов сохраняться в базу).
adaptationundefinedтекущая адаптация
autoclean_enabledtrueОпределяет, активирована ли автоочистка.
autoclean_start_atevery 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_enabledtrueОпределяет, включена (true) или выключена (false) запись CDR в БД и генерации CDR-файлов.
cdr_field_delimitersemicolonРазделитель полей CDR:
tab - символ Tab (\t);
space - пробел ( );
comma - запятая (,);
semicolon - точка с запятой (;).
cdr_typenormalОпределяет формат создаваемых CDR-файлов: расширенный (extended), обычный (normal) или задаваемый вручную (manual). Расширенный режим отличается от обычного дополнительными полями:
- CODEC - список кодеков;
- T_DNA - время ожидания ответа абонента при неотвеченном вызове, в секундах.
В manual режиме список колонок создаваемого CDR файла берется из свойства manual_cdr_columns
cdr_time_roundingdownsideОпределяет режим округления времени при записи 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 файле. При этом колонки будут в том порядке, в каком они заданы.
enabledtrueОпределяет, включен (true) или выключен (false) сервис TTS (история вызовов, запись CDR).
partial_cdr_timeout300Период, по истечении которого в базе данных создается запись с информацией о вызове. Также параметр задает периодичность, с которой будут выгружаться "partial CDR", в секундах.
port_sourceiface_name

Формат записи имен интерфейсов:

iface_name - в CDR/tollticket будет записано имя интерфейса;

iface_id - в CDR/tollticket будет записано id интерфейса.

purge_older_than2 monthПериод времени, по истечении которого записи в базе данных будут удалены. Значение может быть задано в часах (hour[s]), днях (day[s]), неделях (week[s]), месяцах (month[s]), годах (year[s]).
sign_cdr_enabledfalseОпция, при включении которой (значение "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-файла.