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

Skip to end of metadata
Go to start of metadata

Пример скрипта выгрузки cdr файлов с asterisk

В скрипте заложена возможность модификации csv-файла, на случай если средствами Asterisk не получится сформировать полностью корректную выгрузку.

#!/bin/bash

set -eu

# Путь к Master.csv со звонками с предыдущей ротации
CDR_SRC_FILE='/var/log/asterisk/cdr-custom/Master.csv'
# Папка где сохраняются файлы, исходный и обработанный для биллинга
CDR_DST_DIR='/var/log/asterisk/cdr-csv-rotate/'
# IP биллинга
FTP_SERVER='10.20.30.40'
# !!!Всегда cdr_ftp!!! Логин на биллинге 
FTP_LOGIN='cdr_ftp'
# Пароль пользователя cdr_ftp
FTP_PASSWORD='servicemode'
# Папка с CDR NAS
FTP_DIRECTORY='/cdr/Asterisk/'
# В случае если в исходной CSV нужно что-то исправить, например:
#   -транки не всегда одинаковы (например, транк соседа SIP/TrunkCiscoXXX-YYYYYYYYY, где XXX-случайное число, YYYYYYYYY - случайное число в HEX формате), 
#   -в файле есть лишние символы, например точка с запятой ";" или ghj,ktvs 
# "1"=исправляем файл, "0"=не исправляем
FIX_CSV='1'
# "1"=выгружаем исходный файл, "0"=не выгружаем
DEBUG_SEND='1'

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

# Переходим в папку
cd "$CDR_DST_DIR"

# Если Master.csv существует, запускаем в работу
if [ -f "$CDR_SRC_FILE" ]; then
    # Получаем текущую дату
    DATE=`date +%Y%m%d%H%M%S`
    # Если нужно преобразовывать транки, сохраняем исходный файл и при необходимости тоже выгружаем на FTP (DEBUG_SEND), если транк не преобразуем - просто сохраняем текущий Master.csv для выгрузки и делаем пустой
    if [[ "$FIX_CSV" == "1" ]]; then
        # Сохраняем исходный файл на всякий случай, если DEBUG_SEND=1 - его тоже отправляет на FTP биллинга
        if [[ "$DEBUG_SEND" == "1" ]]; then
            \cp $CDR_SRC_FILE $CDR_DST_DIR/cdr-trunk_original-${DATE}.csv
        else
            \cp $CDR_SRC_FILE $CDR_DST_DIR/cdr-trunk_original-${DATE}.csv.debug_send_disabled
        fi
        # Переносим Master.csv в папку для дальнейшей модификации строк, удаляя лишние символы и преобразуя транки
        mv $CDR_SRC_FILE $CDR_DST_DIR/cdr-${DATE}.csv
        # Создаём новый Master.csv
        touch $CDR_SRC_FILE
        # Преобразуем:
        #   -удаляем кавычки
        #   -удаляем лишние пробелы в разделителе полей
        #   -преобразуем транки, в примере SIP/TrunkCiscoXXX-YYYYYYYYY меняем на Neighbor (транк соседа), SIP/XXXXXXXX-YYYYYYYYY (наш транк) меняем на BestISP
        # В этой части вместо SED можно использовать что-либо еще, если его возможностей недостаточно: awk, python, etc
        sed -e 's/"//g; s/, /,/g; s|,SIP\/TrunkCisco[0-9]*-[a-zA-Z0-9]*,|,Neighbor,|g; s|,SIP\/[a-zA-Z0-9]*-[a-zA-Z0-9]*,|,BestISP,|g' -i $CDR_DST_DIR/cdr-${DATE}.csv
    else
        # Переносим Master.csv в папку для дальнейшей выгрузки
        mv $CDR_SRC_FILE $CDR_DST_DIR/cdr-${DATE}.csv
        # Создаём новый Master.csv
        touch $CDR_SRC_FILE
    fi 
fi

# Выгружаем на FTP биллинга
for f in $CDR_DST_DIR/cdr-*.csv; do
    echo $f
    f_name="${f##*/}"
    ftp -v -n $FTP_SERVER <<End-Of-Session > /tmp/ftplog.$$
user $FTP_LOGIN "$FTP_PASSWORD"
binary
pass
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 ${f}.uploaded
    fi
done
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.