#!/bin/bash
CFGFILE=/etc/opt/sshbuk/sshbuk.vars
## настройки по-умолчанию (можно переопределить ключами в ком. строке)
DBLOCALUSER=$USER
DBLOCALNAME=ubuk
DBUSER=db_report
DBNAME=ubuk
REMOTE_CMD=handmes
LOCAL_ADDRESS=127.0.0.1

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_target
AZS2=$cml_target2
IDLOCAL=$cml_azs
IP=$cml_ipadr
CML_TAIL=$cml_tail
TO_AZS=$cml_toazs

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

#блокировка
LOCK=$VARDIR/tmp/LCK..$AZS.handmess
PID=$$
if [ -f ${LOCK} ]; then
  rpid=`head -n 1 ${LOCK}`
  rcmd=`tail -n 1 ${LOCK}`
  z=`ps ax | grep "${rcmd}" | grep -v grep | grep "${rpid}" | wc -l`;
  if [ ${z} -gt 0 ] ; then
    fn_to_log "$(date +%H:%M:%S) Задание уже запущено"
    exit 0;
  fi
fi

echo ${PID} > ${LOCK?}
echo $0 >> ${LOCK?}

CML=
if [ ! -z "$AZS" ]; then
    CML=$CML" -azs $AZS"
fi

FILERCV=$DATADIR/file.$AZS.$(date "+%y%m%d%H%M%S").sql.gz
OFILE=$DATADIR/tmp.$AZS.$(date "+%y%m%d%H%M%S").sql
  
if [ -f $FILERCV ]; then rm $FILERCV; fi
if [ -f $OFILE ]; then rm $OFILE; fi

### вывести в выходной файл необходимую информацию
echo "--DBNAME:$DBNAME" >> $OFILE
echo "--TARGET:$AZS" >> $OFILE

echo "copy td_get (id, id_shop, target, qtable, qtype, qtext, qwhere) FROM stdin;" >> $OFILE
SQL="SELECT id, id_shop, target, qtable, qtype, qtext, qwhere FROM td_tosend WHERE target=$AZS"
psql $DBNAME -U $DBUSER -h $LOCAL_ADDRESS -Aqt -P null='null' -c "$SQL" >> $OFILE
echo "\." >> $OFILE
sed -i -e "s/|/\t/g" $OFILE 

gzip -c $OFILE > $FILERCV
if [ -f $OFILE ]; then rm $OFILE; fi

# размер архива не должен быть нулевым
SIZE=$(ls -s $FILERCV | awk '{print $1}')
if [ -z "$SIZE" -o "$SIZE" == "0" ]; then
  rm $FILERCV 2>/dev/null
  MSG="exit; ошибка архива: SIZE=\"$SIZE\""
  echo $MSG >& 2
  fn_to_log "$(date +%H:%M:%S) $MSG"
  rm -f ${LOCK}
  exit 1
fi

echo "Файл готов. Вы его можете забрать по адресу $FILERCV"
rm -f ${LOCK}
exit 0
