Выгрузка CDR c MERA в Carbon Billing 5

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

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

просмотр истории страницы
Скрипт выгружает CDR с MERA на [FTP|CarbonBilling:Настройка FTP сервера для выгрузки CDR] биллинга.
{info}* Даты звонка (начало, завершение) в CDR-файлах создаваемых MERA записываются в формате Unix Time, их необходимо конвертировать в формат подобный "2019-06-06 15:57:57", в приведенном ниже скрипте эту задачу выполняет дополнительный скрипт cdrformat.pl, вызываемый для преобразования каждой записи о вызове в отдельности.{info}
* В скрипте добавлена защита от повторного запуска. У пользователя от имени которого выполняется скрипт должен быть доступ до LOCK-файла (/tmp/lock в примере), директория в которой он должен размещаться должна существовать.{info}

{code}#!/bin/bash
set -eu

LOCK='/tmp/lock'

trap __exit EXIT

__exit() {
local ret=$?
#rm -f $TMPDIR/*.$$
if [ "$ret" != 255 ] && [ "$ret" != 250 ]; then
rm -f $LOCK
fi
return $ret
}

exit_if_locked(){
if [[ -f $LOCK ]]; then
echo "Already rinning"
exit 250
fi
}

# Путь к исходным CDR
CDR_SRC_DIR='/mvts/billing/'
CDR_ARCHIVE='/mvts/billing/archive'
# Путь до скрипта конвертации формата CDR
CDR_CONVERTER='/root/CB5_Intagration/cdrformat.pl' CDR_CONVERTER='/mvts/CB5_Intagration/cdrformat.pl'
# IP биллинга
FTP_SERVER='10.0.0.1'
FIX_CSV='1'
# "1"=выгружаем исходный файл, "0"=не выгружаем
DEBUG='10'

# 0 - не выгружаем на FTP
UPLOAD='1'

process_upload(){
# Проверяем что есть папка для обработанных файлов
[ ! -d "$CDR_DST_DIR" ] && mkdir $CDR_DST_DIR

# Проверяем что есть файлы для выгрузки, предполагаем что файлы могут быть - только CDR
if [[ `find $CDR_SRC_DIR -maxdepth 1 -type f -not -path '*/\.*' | wc -l` != "0" ]]; then
# Получаем список файлов и обрабатываем
find $CDR_SRC_DIR -maxdepth 1 -type f -not -path '*/\.*' | while read CDR_SRC_FILE; do
CDR_DST_FILE=`echo $CDR_SRC_FILE | sed 's|'$CDR_SRC_DIR'|'$CDR_DST_DIR'|g'`
# Если дебаг включен - файл копируем и печатаем предполагаемую команду перемещения файлов
if [[ "$DEBUG" == "1" ]]; then
cp $CDR_SRC_FILE $CDR_DST_FILE
echo 'mv '$CDR_SRC_FILE $CDR_DST_FILE
# Если дебаг выключен - тотолько перемещаем файл
else
mv $CDR_SRC_FILE $CDR_DST_FILE
fi
# Исправляем CDR (по необходимости) и складываем в отдельный файл на выгрузку
if [[ "$FIX_CSV" == "1" ]]; then
cat $CDR_DST_FILE | while read call; do
/usr/bin/perl $CDR_CONVERTER <<< $(echo $call)
done > $CDR_DST_FILE.csv
fi
else done
mv $CDR_SRC_FILE $CDR_DST_FILE
fi
# Исправляем CDR (по необходимости) и складываем в отдельный файл на выгрузку
if [[ "$FIX_CSV" == "1" ]]; then
cat $CDR_DST_FILE | while read call; do
/usr/bin/perl $CDR_CONVERTER <<< $(echo $call)
done > $CDR_DST_FILE.csv
fi
done
fi

# Выгружаем на FTP биллинга если выгрузка включена
mv $base_file $CDR_ARCHIVE/
fi
done{code}
fi
}

main(){
exit_if_locked
touch $LOCK
process_upload
exit 0
}

main{code}