Конструктор отчетов

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (1)

просмотр истории страницы
order by 3
{code}
Скрипт для получения журнала звонков по всем [архивным базам|CarbonBilling:Настройка периода хранения исторических данных в базе]
{code}#!/bin/bash

>export.csv
>export_raw.csv

# Текущая дата
curdate=$(date +'%Y-%m-%d %H:%M:%S')

# Начало периода в формате '%Y-%m-%d %H:%M:%S', например '2019-01-01 00:00:00'
period_start='2019-01-01 00:00:00'
# Конец периода в формате '%Y-%m-%d %H:%M:%S', например '2019-01-01 00:00:00'
period_end='2019-10-01 00:00:00'

# Если начало или конец периода не заданы - будет выбрана текущая дата
period_start_fixed=${period_start:-$curdate}
period_end_fixed=${period_end:-$curdate}

# ID абонента
abonent_id=10507

# Заголовок csv для удобства работы в электронных таблицах
echo "Звонок с номера;Назначение звонка;Название направления;Начало звонка;Окончание звонка;Время разговора;Стоимость направления;Стоимость" > export.csv

# Получаем звонки из архивных баз
find /var/db/billing/ -iname voip_log.fdb | sort | while read file; do
#echo $file >> export_raw.csv # DEBUG
sqlexec $file "set heading off; select distinct
vl.src || ';' ||
vl.dst || ';' ||
'direction:' || vl.direction_id || ';' ||
substring(cast(vl.s_time as varchar(32)) from 1 for 19) || ';' ||
substring(cast(vl.e_time as varchar(32)) from 1 for 19) || ';' ||
cast(iif(vl.step is not null and vl.step>0, coalesce(vl.bill_sec_round/vl.step,'0'), coalesce(vl.bill_sec_round/60,'0')) as float) || ';' ||
coalesce(vl.step_price/10000000000.00,0) || ';' ||
cast(coalesce(vl.bill_sum/10000000000.00,'') as float)
from
voip_log vl
where
vl.s_time between '$period_start' and '$period_end_fixed'
and vl.abonent_id=$abonent_id " | sed 's/ *//g; /^$/d' >> export_raw.csv
done

# Получаем звонки из основной БД
#echo '/var/db/billing.gdb' >> export_raw.csv # DEBUG
sqlexec /var/db/billing.gdb "set heading off; select distinct
vl.src || ';' ||
vl.dst || ';' ||
'direction:' || vl.direction_id || ';' ||
substring(cast(vl.s_time as varchar(32)) from 1 for 19) || ';' ||
cast(iif(vl.step is not null and vl.step>0, coalesce(vl.bill_sec_round/vl.step,'0'), coalesce(vl.bill_sec_round/60,'0')) as float) || ';' ||
coalesce(vl.step_price/10000000000.00,0) || ';' ||
cast(coalesce(vl.bill_sum/10000000000.00,'') as float)
from
voip_log vl
where
vl.s_time between '$period_start_fixed' and '$period_end_fixed'
and vl.abonent_id=$abonent_id" | sed 's/ *//g; /^$/d' >> export_raw.csv

# Получаем из БД названия направлений и отфильтровываем дебаг
cat export_raw.csv | grep -vE '^<null>|voip_log.fdb$' | cut -d';' -f 3 | sort | uniq | while IFS=':' read field_name direction_id; do
direction_name=$(sqlexec "set heading off; select vd.name from voip_direction vd where vd.id='$direction_id'" | sed 's/ *//g; /^$/d')
sed "s/direction:${direction_id}/${direction_name}/g" -i export_raw.csv
done

# Сортируем на случаей если звонок попал в несколько архивных баз и пишем в выгрузку
cat export_raw.csv | grep -v '^<null>' | sort | uniq >> export.csv{code}
# h5. Отчёт по абонентам, у которых услуги подключены не 5 числа. Данный отчёт подойдет для отслеживания абонентов со сдвигом даты списания услуг.
{code}