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

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

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

просмотр истории страницы
h3. Пример скрипта выгрузки cdr файлов с asterisk
В скрипте заложена возможность модификации csv-файла, на случай если средствами *Asterisk* не получится сформировать полностью корректную выгрузку.
{code}
#!/bin/bash
set -eu

# Путь к Master.csv со звонками с предыдущей ротации
CDR_SRC_FILE='/var/log/asterisk/cdr-csv/Master.csv' CDR_SRC_FILE='/var/log/asterisk/cdr-custom/Master.csv'
# Папка где сохраняются файлы, исходный и обработанный для биллинга
CDR_DST_DIR='/var/log/asterisk/cdr-csv-rotate/'
# IP биллинга
FTP_SERVER='46.19.46.169' 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'

cd "$CDR_DST_DIR"

# Проверяем что есть папка для обработанных файлов
[ ! -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
bye
End-Of-Session
# Если файл выгружен корректно, переименовываем в uploaded чтобы не выгружать повторно
if fgrep -q "226 Transfer complete" /tmp/ftplog.$$ ;then
echo "ftp OK"
fi
done

{code}