Экспорт CDR в плоский файл (Thrift)

S
Автор Sergiiy
Обновлено 11 месяцев назад

Прямое извлечение CDR из PostgreSQL не всегда является приемлемым решением для наших пользователей. При включенной функции Thrift система обрабатывает CDR обычным образом, но вы можете настроить агрессивный цикл очистки CDR (например, каждые два дня).

Преимущество использования Thrift заключается в том, что вы можете автономно внедрять, обрабатывать и анализировать свои CDR.

Ниже приведен запрос, который подтолкнул нас расширить функциональность Thrift с softswitch.

Запрос: Как оператор оптового переключателя, я хочу извлекать CDR в простом текстовом формате из своего переключателя, чтобы затем загружать эти данные в другие системы для внешнего использования.

Переключатель должен записывать CDR аккаунта и поставщика в согласованном текстовом формате (JSON или CSV) в плоские файлы.

 Файлы должны вращаться каждые N минут. Файлы должны быть своевременно удалены, чтобы обеспечить, что серверы не исчерпают место.

Конвенция наименования файлов, формат: 

client_<time_from_epoch>_<rotation_frequency_in_seconds>If the rotation time is set to 3600 seconds, and the file is rotated at Wed, 11 Dec 2013 22:02:15 GMT, then the file name will be 1386799335client_1386799335_3600.bin

Кроме того, файлы Thrift можно загружать на сервер SFTP, и данные можно разбирать в желаемом формате с помощью стороннего инструмента.

Основные файлы: balance_updates-thrift.bin - файл Thrift с данными об обновлениях баланса для аккаунта/клиента/поставщика, которые участвовали в вызове calls-thrift.bin - основные данные о вызове. Он содержит уникальную запись i_call, которая используется как ключ для связи данных из других таблиц. cdrs-thrift.bin - данные CDR для аккаунта cdrs_connections-thrift.bin - данные CDR поставщика Дополнительные файлы: cdrs_customers-thrift.bin - данные CDR клиента cdrs_dids-thrift.bin - данные CDR для DID cdrs_customers_dids-thrift.bin - данные CDR делегированного DID cdrs_connections_dids-thrift.bin - данные CDR поставщика для случая настройки группы зарядки DID для правила аутентификации DID commissions-thrift.bin - данные CDR с дополнительными комиссиями для вызова calls_sdp-thrift.bin - данные CDR с записями полученных SDP, файл будет присутствовать, если для среды включена запись SDP surcharges - данные CDR с дополнительными сборами.

ПРИМЕР С СЕРВЕРА:

$ sudo /home/ssp/scripts/support_tools/thrift_parser.py /var/env1/upload/cdrs/thrift/calls-thrift.bin
Calls(local_i_call=6101993, call_id='[email protected]', cld='12064248284', cli='Tenson Hokey', setup_time=1672226825, parent_local_i_call=None, i_call_type=None, i_routing_group=354, node_id='node-', i_call=935442)

$ sudo /home/ssp/scripts/support_tools/thrift_parser.py /var/env1/upload/cdrs/thrift/cdrs-thrift.bin
Cdrs(i_cdr=2554692, i_account=34, result=0, cost=0.3603, delay=30.0, duration=2.183015525, billed_duration=2.0, connect_time=1672226855, disconnect_time=1672226857, cld_in='testnumber_12064248284', cli_in='sipp', prefix='1', price_1=0.0063, price_n=0.0043, interval_1=1, interval_n=1, post_call_surcharge=0.2, connect_fee=0.3, free_seconds=0, remote_ip='192.168.1.34', grace_period=0, user_agent='', pdd1xx=0.621326224, i_protocol=1, release_source='', plan_duration=0.0, accessibility_cost=0.0, lrn_cld=None, lrn_cld_in=None, area_name=None, p_asserted_id=None, remote_party_id=None, conn_proc_time=0.061621094, lrn_cli_in=None, lrn_cli=None, media_timeout_correction=0.0, lrn_cli_result=4, lrn_cld_result=4, i_call=935442)

$ sudo /home/ssp/scripts/support_tools/thrift_parser.py /var/env1/upload/cdrs/thrift/cdrs_customers-thrift.bin
CdrsCustomers(i_cdrs_customer=885332, i_cdr=2554692, i_customer=31, cost=-0.3603, billed_duration=2.0, prefix='1', price_1=0.0063, price_n=0.0043, interval_1=1, interval_n=1, post_call_surcharge=0.2, connect_fee=0.3, free_seconds=0, grace_period=0, i_wholesaler=1, setup_time=1672226825, duration=2.183015525, area_name=None, media_timeout_correction=0.0, i_call=935442)

$ sudo /home/ssp/scripts/support_tools/thrift_parser.py /var/env1/upload/cdrs/thrift/commissions-thrift.bin
Commissions(i_commission=753889, i_account=NullInt64(v=34), i_customer=None, i_cdrs_customer=885332, commission_size=1.0, setup_time=1672226825, i_call=935442)

$ sudo /home/ssp/scripts/support_tools/thrift_parser.py /var/env1/upload/cdrs/thrift/calls_sdp-thrift.bin
CallsSdp(i_calls_sdp=4776912, i_cdrs_connection=None, time_stamp=UnixTime(seconds=1672226824, nanoseconds=583246946), sdp='v=0\r\no=user1 53655765 2353687637 IN IP4 192.168.1.34\r\ns=-\r\nc=IN IP4 192.168.1.34\r\nt=0 0\r\nm=audio 6000 RTP/AVP 0\r\na=rtpmap:0 PCMU/8000\r\n', sip_msg_type='INVITE', direction='received from', call_leg='customer', i_call=935442)

$ sudo /home/ssp/scripts/support_tools/thrift_parser.py /var/env1/upload/cdrs/thrift/cdrs_connections-thrift.bin
CdrsConnections(i_cdrs_connection=2717960, i_connection=146, result=0, cost=0.001743333333333333, delay=0.0, duration=2.183015525, billed_duration=2.0, setup_time=1672226854, connect_time=1672226854, disconnect_time=1672226857, cld_out='+B003_translated_cld_12064248284', cli_out='Clever guy', prefix='1206', price_1=0.08, price_n=0.0246, interval_1=1, interval_n=1, post_call_surcharge=0.0, connect_fee=0.0, free_seconds=0, grace_period=0, user_agent='', pdd100=0.16096918600669596, pdd1xx=0.16096918600669596, i_account_debug=34, i_proto_transport=1, release_source='', call_setup_time=1672226824, lrn_cld=None, area_name=None, i_media_relay=NullInt64(v=20), remote_ip=NullString(s='vendor-name.provider.com:6070'), vendor_name=NullString(s='sipp_uas'), i_media_relay_outcome=NullInt64(v=1), media_ip='192.168.3.65', lrn_cli=None, call_id='[email protected]_4', media_timeout_correction=0.0, huntstop=False, i_call=935442)

Оцените эту статью