#!/bin/bash
CFGFILE=/etc/opt/sshbuk/sshbuk.vars
#CFGFILE=$HOME/sshbuk/sshbuk.vars
#CFGFILE=/root/sshbuk/sshbuk.vars
## настройки по-умолчанию (можно переопределить ключами в ком. строке)
DBLOCALUSER=bukts
DBLOCALNAME=ubuk
ZIPEXT="bz2"
REMOTE_CMD=bukdbsave

show_help() {
    echo "--------------------------------------------------"
    echo "Копирование указанных данных с удаленной АЗС"
    echo "--------------------------------------------------"
};

if [ -f $CFGFILE ]; then
    . $CFGFILE
else
    echo "Не найден файл \"$CFGFILE\"" >& 2
    exit 1
fi

if [ -f $BINDIR/sshbuk.fn ]; then
    . $BINDIR/sshbuk.fn
else
    echo "Не найден файл \"sshbuk.fn\"" >& 2
    exit 1
fi

fn_make_log $LOGDIR
fn_to_log ""
fn_to_log "$(date +%H:%M:%S) $(basename $0) \"$@\""

## анализ командной строки
fn_command_line "$@"
AZS=$cml_azs
IP=$cml_ipadr
SHIFTIN=$cml_shift
DICT=$cml_dict
TODB=$cml_todb
RAW=$cml_raw
SSH_PORT=$cml_port;
CML_TAIL=$cml_tail
TALONONLY=$cml_talononly
TANKONLY=$cml_tankonly
DELSHIFT=$cml_delshift
MINI=$cml_mini
if [ ! -z "$cml_list_file" ]; then 
    AZSLIST=$cml_list_file; 
fi
if [ ! -z "$cml_user" ]; then 
    DBLOCALUSER=$cml_user;  
fi
if [ ! -z "$cml_db" ]; then 
    DBLOCALNAME=$cml_db
    TODB="yes"
fi

## в ком. строке должны быть заданы АЗС и смена (или "-dict")
if [ -z "$AZS" -o \( -z "$SHIFTIN" -a -z "$DICT" \) ]; then
    show_help
    fn_to_log "$(date +%H:%M:%S) exit 1"
    exit 1
fi

CML=
if [ ! -z "$IP" ]; then
    CML=$CML"-ip $IP -azs $AZS"
else
    CML=$CML"-azs $AZS -list $AZSLIST "
fi
if [ ! -z "$SSH_PORT" ]; then
    CML=$CML" -port $SSH_PORT"
fi
if [ ! -z "$TANKONLY" ]; then
    CML=$CML" -tankonly "
fi

CMR="-nomd5 -cat "
FPREFIX=
FSHIFT=
if [ "$DICT" == "yes" ]; then
    FPREFIX=${FPREFIX}"d"
    CMR=$CMR"-dict "
fi
if [ "$RAW" == "yes" ]; then
    CMR=$CMR"-raw "
fi
if [ ! -z "$SHIFTIN" ]; then
    FPREFIX=${FPREFIX}"j"
    FSHIFT=".$SHIFTIN"
    CMR=$CMR"-sh $SHIFTIN "
fi
if [ "$ZIPEXT" == "gz" -o "$ZIPEXT" == "bz2" ]; then
    CMR=$CMR"-$ZIPEXT "
fi
if [ ! -z "$AZS" ]; then
    CMR=$CMR"-idshop $AZS "
fi
if [ ! -z "$TALONONLY" ]; then
    CMR=$CMR" -talononly "
fi
if [ ! -z "$TANKONLY" ]; then
    CMR=$CMR" -tankonly "
fi
if [ ! -z "$MINI" ]; then
    CMR=$CMR" -mini "
fi

TEMPRCV=$DATADIR/tmp.$AZS.$(date "+%y%m%d%H%M%S").tar.$ZIPEXT
FILERCV=$DATADIR/${FPREFIX}.${AZS}${FSHIFT}.tar.$ZIPEXT

if [ -f $TEMPRCV ]; then rm $TEMPRCV; fi
if [ -f $FILERCV ]; then rm $FILERCV; fi

$BINDIR/sshbuk $CML_TAIL $CML -cmd "$REMOTE_CMD $CMR" > $TEMPRCV
ERR=$?
fn_to_log "$(date +%H:%M:%S) sshbuk=$ERR"
if [ $ERR -ne 0 ]; then
    rm $TEMPRCV 2>/dev/null
    exit 1
fi
# размер архива не должен быть нулевым
SIZE=$(ls -s $TEMPRCV | awk '{print $1}')
if [ -z "$SIZE" -o "$SIZE" == "0" ]; then
    rm $TEMPRCV 2>/dev/null
    MSG="exit; ошибка при получении файла: SIZE=\"$SIZE\""
    echo $MSG >& 2
    fn_to_log "$(date +%H:%M:%S) $MSG"
    exit 1
fi

mv $TEMPRCV $FILERCV
rm $TEMPRCV 2>/dev/null

if [ "$TODB" == "yes" ]; then
    CML=
    if [ ! -z "$DBLOCALNAME" ]; then
        CML="-db $DBLOCALNAME"
    else
        CML="-azs $AZS -list $AZSLIST"
    fi
    if [ ! -z "$DELSHIFT" ]; then
        CML=$CML" -delshift"
    fi
    fn_to_log "$(date +%H:%M:%S) Загрузка файла $FILERCV в БД"
    $BINDIR/file2bukdb $CML -user $DBLOCALUSER -f $FILERCV
    fn_to_log "$(date +%H:%M:%S) file2bukdb=$?"
    if [ -f $FILERCV ]; then
        mkdir -p $DATADIR/noloaded
        mv $FILERCV $DATADIR/noloaded
    fi
fi

fn_to_log "$(date +%H:%M:%S) ok"

exit 0
