{toc:maxLevel=2}
h1. Как работает архивирование (партиционирование БД)
Часть исторических данных с определенной периодичностью выносится в отдельные БД, к которым можно будет обратиться в последствии если эти данные потребуются.
Обособленные данные хранятся в папке */app/asr_billing/var/db/billing/*, разбитые по месяцам. Например, листинг директории с данными за Ноябрь 2017 года:
{code}[root@localhost ~]# ll /app/asr_billing/var/db/billing/201711/
итого 736
-rw-rw---- 1 495 496 749568 Дек 28 09:12 audit_operations.fdb
-rw-r----- 1 495 496 6 Дек 21 00:00 audit_operations.modified{code}
Данные, отделяемые в отдельные базы, относятся к четырём категориям:
* *AuditOperations* - даные [аудита|CarbonBilling:Статистика, аудит, диагностика]
* *ArchAccountStack* - [детализация расхода|CarbonBilling:Детализация расхода]
* *VoipLog* - [детализация телефонного трафика|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=65798996#%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B8%D1%83%D1%81%D0%BB%D1%83%D0%B3.%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0%22%D0%A0%D0%B0%D1%81%D1%85%D0%BE%D0%B4%22.-%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%22Voip%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%22]
* *RadiusSessions* - история radius-сессия (не отражается в веб-интерфейсе, требуется предоставлять выгрузку по запросу правоохранительных органов)
Объём данных, сохраняемых в основной базе, можно настроить указав количество месяцев "*month_cnt*" в конфигурационном файле демона, отвечающего за разбиение базы:
Расположение файла: */app/asr_billing/etc/pumper/confs.json*
{code}[
{
"model_name": "AuditOperations",
"date_key": "op_time",
"abon_key": "abonent",
"month_cnt": 1
},
{
"model_name": "ArchAccountStack",
"date_key": "bill_date",
"abon_key": "abonent",
"month_cnt": 6
},
{
"model_name": "VoipLog",
"date_key": "e_time",
"abon_key": "abonent",
"month_cnt": 3
},
{
"model_name": "RadiusSessions",
"date_key": "end_time",
"abon_key": "abonent",
"month_cnt": 3
}
]
{code}
Выше приведены стандартные настройки: аудит хранится один месяц, данные по списаниям шесть месяцев, остальные данные - три месяца. Вы можете изменить период, указав нужное значение в параметре "*month_cnt*" и [переопределив|Изменение системных файлов] конфигурационный файл.
h1. Как получить информацию из архива?
[Аудит|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=48693361] можно посмотреть просто выбрав нужные периоды в интерфейсе.
Остальные данные Вы можете получить запросив их в коммандной строке.
h2. Примеры
Чтобы запросить данные, потребуется написать небольшие запросы на языке SQL и передать их утилите *sqlexec*
h3. Получить данные по звонкам абонента
Получить данные по звонкам абонента ID 1481, совершенным в август 2023 года:
# Проверьте, что БД с архивом звонков есть на диске. Если её нет, восстановите её из [резервной копии|Система резервного копирования. Описание, настройка и создание резервных копий.]:
{code}
ls /app/asr_billing/var/db/billing/202308/voip_log.fdb
{code}
# Команда выведет все звонки на экран:
{code}
chroot /app/asr_billing/ sqlexec /var/db/billing/202308/voip_log.fdb "set list on; select * from voip_log where abonent_id=1481 and s_time between '2023-08-01 00:00:00.0000' and '2023-08-31 23:59:59.0000' order by S_TIME"
{code}
# Если требуется сохранить данные в текстовый документ, используйте следующую команду
{code}
chroot /app/asr_billing/ sqlexec /var/db/billing/202308/voip_log.fdb "set heading off; select SRC, DST, S_TIME, E_TIME, V_TYPE_ID, SRC_CHAN, DST_CHAN from voip_log where abonent_id=1481 and s_time between '2023-08-01 00:00:00.0000' and '2023-08-31 23:59:59.0000' order by S_TIME" | sed '/^$/d' | sed 's/ * /;/g' > /root/voip_archive_log.csv
{code}
При использовании команды (*>*) конечный файл /root/voip_archive_log.csv будет перезаписываться, после каждого выполнения команды.
Для дополнения, ранее созданного файла необходимо использовать (*>>*)
h3. Запустить поиск по всем архивным базам
Если нужно найти записи по одинковым параметрам, но в нескольких базах, это можно сделать скриптом.
Допустим, мы хотим найти администратора который назначил абоненту ID 2673 переход на новый тариф с 1 июля 2019 года.
Для этого найдем записи аудита по абоненту (where abonent_id=2673) о действих администраторов системы (admin_id is not null), совершенные до 1 июля 2019 года включительно (op_time<='2019-07-01'), в описании которых есть "Дата следующего перехода=2019-07-01" (and descr containing 'Дата следующего перехода=2019-07-01'),
{code}find /app/asr_billing/var/db/billing/ -iname audit_operations.fdb | sort | while read file;
do
echo 'file='${file/\/app\/asr_billing/}
sqlexec ${file/\/app\/asr_billing/} "select op_time, descr from audit_operations where abonent_id=2673 and admin_id is not null and op_time<='2019-07-01' and descr containing 'Дата следующего перехода=2019-07-01'" | sed 's/ */ /g'
done{code}
h1. Как работает архивирование (партиционирование БД)
Часть исторических данных с определенной периодичностью выносится в отдельные БД, к которым можно будет обратиться в последствии если эти данные потребуются.
Обособленные данные хранятся в папке */app/asr_billing/var/db/billing/*, разбитые по месяцам. Например, листинг директории с данными за Ноябрь 2017 года:
{code}[root@localhost ~]# ll /app/asr_billing/var/db/billing/201711/
итого 736
-rw-rw---- 1 495 496 749568 Дек 28 09:12 audit_operations.fdb
-rw-r----- 1 495 496 6 Дек 21 00:00 audit_operations.modified{code}
Данные, отделяемые в отдельные базы, относятся к четырём категориям:
* *AuditOperations* - даные [аудита|CarbonBilling:Статистика, аудит, диагностика]
* *ArchAccountStack* - [детализация расхода|CarbonBilling:Детализация расхода]
* *VoipLog* - [детализация телефонного трафика|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=65798996#%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B8%D1%83%D1%81%D0%BB%D1%83%D0%B3.%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0%22%D0%A0%D0%B0%D1%81%D1%85%D0%BE%D0%B4%22.-%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%22Voip%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%22]
* *RadiusSessions* - история radius-сессия (не отражается в веб-интерфейсе, требуется предоставлять выгрузку по запросу правоохранительных органов)
Объём данных, сохраняемых в основной базе, можно настроить указав количество месяцев "*month_cnt*" в конфигурационном файле демона, отвечающего за разбиение базы:
Расположение файла: */app/asr_billing/etc/pumper/confs.json*
{code}[
{
"model_name": "AuditOperations",
"date_key": "op_time",
"abon_key": "abonent",
"month_cnt": 1
},
{
"model_name": "ArchAccountStack",
"date_key": "bill_date",
"abon_key": "abonent",
"month_cnt": 6
},
{
"model_name": "VoipLog",
"date_key": "e_time",
"abon_key": "abonent",
"month_cnt": 3
},
{
"model_name": "RadiusSessions",
"date_key": "end_time",
"abon_key": "abonent",
"month_cnt": 3
}
]
{code}
Выше приведены стандартные настройки: аудит хранится один месяц, данные по списаниям шесть месяцев, остальные данные - три месяца. Вы можете изменить период, указав нужное значение в параметре "*month_cnt*" и [переопределив|Изменение системных файлов] конфигурационный файл.
h1. Как получить информацию из архива?
[Аудит|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=48693361] можно посмотреть просто выбрав нужные периоды в интерфейсе.
Остальные данные Вы можете получить запросив их в коммандной строке.
h2. Примеры
Чтобы запросить данные, потребуется написать небольшие запросы на языке SQL и передать их утилите *sqlexec*
h3. Получить данные по звонкам абонента
Получить данные по звонкам абонента ID 1481, совершенным в август 2023 года:
# Проверьте, что БД с архивом звонков есть на диске. Если её нет, восстановите её из [резервной копии|Система резервного копирования. Описание, настройка и создание резервных копий.]:
{code}
ls /app/asr_billing/var/db/billing/202308/voip_log.fdb
{code}
# Команда выведет все звонки на экран:
{code}
chroot /app/asr_billing/ sqlexec /var/db/billing/202308/voip_log.fdb "set list on; select * from voip_log where abonent_id=1481 and s_time between '2023-08-01 00:00:00.0000' and '2023-08-31 23:59:59.0000' order by S_TIME"
{code}
# Если требуется сохранить данные в текстовый документ, используйте следующую команду
{code}
chroot /app/asr_billing/ sqlexec /var/db/billing/202308/voip_log.fdb "set heading off; select SRC, DST, S_TIME, E_TIME, V_TYPE_ID, SRC_CHAN, DST_CHAN from voip_log where abonent_id=1481 and s_time between '2023-08-01 00:00:00.0000' and '2023-08-31 23:59:59.0000' order by S_TIME" | sed '/^$/d' | sed 's/ * /;/g' > /root/voip_archive_log.csv
{code}
При использовании команды (*>*) конечный файл /root/voip_archive_log.csv будет перезаписываться, после каждого выполнения команды.
Для дополнения, ранее созданного файла необходимо использовать (*>>*)
h3. Запустить поиск по всем архивным базам
Если нужно найти записи по одинковым параметрам, но в нескольких базах, это можно сделать скриптом.
Допустим, мы хотим найти администратора который назначил абоненту ID 2673 переход на новый тариф с 1 июля 2019 года.
Для этого найдем записи аудита по абоненту (where abonent_id=2673) о действих администраторов системы (admin_id is not null), совершенные до 1 июля 2019 года включительно (op_time<='2019-07-01'), в описании которых есть "Дата следующего перехода=2019-07-01" (and descr containing 'Дата следующего перехода=2019-07-01'),
{code}find /app/asr_billing/var/db/billing/ -iname audit_operations.fdb | sort | while read file;
do
echo 'file='${file/\/app\/asr_billing/}
sqlexec ${file/\/app\/asr_billing/} "select op_time, descr from audit_operations where abonent_id=2673 and admin_id is not null and op_time<='2019-07-01' and descr containing 'Дата следующего перехода=2019-07-01'" | sed 's/ */ /g'
done{code}