пятница, 27 декабря 2024 г.

Запись CDR файлов Freeswitch 1.10 в базу PostgreSQL 15.10. ОС Rocky Linux 9.4.

1. Подготавливаем базу данных PostgreSQL для записи данных.
Создадим базу данных fscdr. Пользователя fscdr с паролем fscdrpassword.
# sudo -i -u postgres
$ psql
postgres=# CREATE DATABASE fscdr;
postgres=# CREATE USER fscdr WITH PASSWORD 'fscdrpassword';
postgres=# GRANT ALL PRIVILEGES ON DATABASE fscdr to fscdr;
postgres=# \c fscdr
fscdr=# CREATE TABLE cdr (
    id                        serial PRIMARY KEY,
    local_ip_v4               inet NOT NULL,
    caller_id_name            VARCHAR,
    caller_id_number          VARCHAR,
    destination_number        VARCHAR NOT NULL,
    context                   VARCHAR NOT NULL,
    start_stamp               TIMESTAMP WITH TIME zone NOT NULL,
    answer_stamp              TIMESTAMP WITH TIME zone,
    end_stamp                 TIMESTAMP WITH TIME zone NOT NULL,
    duration                  INT NOT NULL,
    billsec                   INT NOT NULL,
    hangup_cause              VARCHAR NOT NULL,
    uuid                      uuid NOT NULL,
    bleg_uuid                 uuid,
    accountcode               VARCHAR,
    read_codec                VARCHAR,
    write_codec               VARCHAR,
    sip_hangup_disposition    VARCHAR,
    ani                       VARCHAR
);
fscdr=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "fscdr";
fscdr=# GRANT USAGE, SELECT ON SEQUENCE cdr_id_seq TO fscdr;

Теперь разрешаем пользователю fscdr соединяться с базой по логину и паролю:
# nano /var/lib/pgsql/data/pg_hba.conf
# IPv4 local connections:
host    all             bsdb            127.0.0.1/32            md5

Рестартуем сервис PostgreSQL:
# systemctl restart postgresql-15


2. Устанавливаем расширение mod_cdr_pg_csv для Freeswitch.
В моей инсталляции Freeswitch был собран из исходных кодов, поэтому модуль нужно так же зобрать из исходных кодов.
# export PKG_CONFIG_PATH=/usr/pgsql-15/lib/pkgconfig:/usr/lib/pkgconfig
# cd /usr/src/freeswitch/src/mod/event_handlers/mod_cdr_pg_csv/
# make install

Теперь в директории с модулями Freeswitch должны появитсья файлы расширения - mod_cdr_pg_csv
# ls -l /usr/lib64/freeswitch/mod/ | grep mod_cdr_pg_csv
Проверка загрузки модуля в Freeswitch
# fs_cli
> load mod_cdr_pg_csv
+OK Reloading XML
+OK
[CONSOLE] switch_loadable_module.c:1772 Successfully Loaded [mod_cdr_pg_csv]


3. Включаем модуль mod_cdr_pg_csv для загрузки при старте Freeswitch
# nano /etc/freeswitch/autoload_configs/modules.conf.xml
Добавляем строку:
<load module="mod_cdr_pg_csv"/>
Рестартуем Freeswitch:
# systemctl restart freeswitch
Проверить, что модуль загрузился после старта можно так:
# fs_cli
> module_exists mod_cdr_pg_csv
true


4. Настраиваем связку Freeswitch и PostgreSQL:
# nano autoload_configs/cdr_pg_csv.conf.xml
Раскомментируем строки:
 <param name="db-table" value="cdr"/>
 ....
 <field var="sip_hangup_disposition"/>
 <field var="ani"/>

и правим строку с авторизационными данными:
<param name="db-info" value="host=127.0.0.1 dbname=fscdr user=fscdr password='fscdrpassword' connect_timeout=10" />


Теперь все данные о вызовах (включая не успешные) будут записываться в базу данных.


Комментариев нет:

Отправить комментарий