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

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы

Скрипт выгружает CDR с MERA на FTP биллинга.

Даты звонка (начало, завершение) в CDR-файлах создаваемых MERA записываются в формате Unix Time, их необходимо конвертировать в формат подобный "2019-06-06 15:57:57", в приведенном ниже скрипте эту задачу выполняет дополнительный скрипт cdrformat.pl, вызываемый для преобразования каждой записи о вызове в отдельности.
#!/bin/bash

set -eu

# Путь к исходным CDR
CDR_SRC_DIR='/mvts/billing/'
# Путь к CDR для правки (по необходимости) и выгрузки
CDR_DST_DIR='/mvts/billing/cdr-csv-rotate/'
# Путь к архивам CDR
CDR_ARCHIVE='/mvts/billing/archive'
# Путь до скрипта конвертации формата CDR
CDR_CONVERTER='/root/CB5_Intagration/cdrformat.pl'
# IP биллинга
FTP_SERVER='10.0.0.1'
# !!!Всегда cdr_ftp!!! Логин на биллинге 
FTP_LOGIN='cdr_ftp'
# Пароль пользователя cdr_ftp
FTP_PASSWORD='cdr_ftp'
# Папка с CDR NAS
FTP_DIRECTORY='/cdr/MERA/'

# В случае если в исходной CSV нужно что-то исправить, например:
#   -транки не всегда одинаковы (например, транк соседа SIP/TrunkCiscoXXX-YYYYYYYYY, где XXX-случайное число, YYYYYYYYY - случайное число в HEX формате), 
#   -в файле есть лишние символы, например точка с запятой ";" или ghj,ktvs 
# "1"=исправляем файл, "0"=не исправляем
FIX_CSV='1'
# "1"=выгружаем исходный файл, "0"=не выгружаем
DEBUG='1'

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

# Проверяем что есть папка для обработанных файлов
[ ! -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
    done
fi

# Выгружаем на FTP биллинга если выгрузка включена
if [[ "$UPLOAD" == "1" ]]; then
for f in ${CDR_DST_DIR}*.csv; do
    echo $f
    f_name="${f##*/}"
    ftp -p -v -n $FTP_SERVER <<End-Of-Session > /tmp/ftplog.$$
user $FTP_LOGIN "$FTP_PASSWORD"
binary
cd $FTP_DIRECTORY
put "$f" "$f_name"
bye
End-Of-Session
    # Если файл выгружен корректно, переименовываем в uploaded чтобы не выгружать повторно
    if fgrep -q "226 Transfer complete" /tmp/ftplog.$$ ;then
        echo 'ftp OK'
        mv $f $CDR_ARCHIVE/${f_name}.uploaded
        base_file=${f%.csv}
        # Если включен дебаг - печатаем команду перемещения в терминал
        if [[ "$DEBUG" == "1" ]]; then
            echo 'mv '$base_file $CDR_ARCHIVE/${base_file##*/}
        fi 
        mv $base_file $CDR_ARCHIVE/
    fi
done
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.