|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (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} |