#!/bin/bash

CFGFILE=/etc/opt/sshbuk/sshbuk.vars
#CFGFILE=$HOME/sshbuk/sshbuk.vars
#CFGFILE=/root/sshbuk/sshbuk.vars

## настройки по-умолчанию
DBLOCALUSER=db_report
DBLOCALNAME=ubuk
TODB=yes

## SQL, который получает список АЗС и IP из локальной БД
## Подстройте под свою таблицу/представление
SRC_SQL="SELECT id_shop, place, ip FROM sd_placelist WHERE COALESCE(ip,'')!='' AND typ IN (0,1,2,7,8,10) ORDER BY id_shop, place"

## Команда, которая будет выполняться на удаленной АЗС
REMOTE_CMD1="date '+%Y-%m-%d %H:%M:%S'"
REMOTE_CMD2="ssh -p 122 root@127.0.0.1 -i /home/bukts/.ssh/azslocal -o StrictHostKeyChecking=no \"date '+%Y-%m-%d %H:%M:%S'\""

show_help() {
    echo "--------------------------------------------------"
    echo "Выполнение удаленной команды по списку IP из БД"
    echo "--------------------------------------------------"
    echo "Ключи:"
    echo "  -db <dbname>     локальная БД"
    echo "  -user <dbuser>   пользователь локальной БД"
    echo "--------------------------------------------------"
}

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

if [ -f "$BINDIR/sshbuk.fn" ]; then
    . "$BINDIR/sshbuk.fn"
else
    echo "Не найден файл \"$BINDIR/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 "$@"

if [ ! -z "$cml_user" ]; then
    DBLOCALUSER="$cml_user"
fi

if [ ! -z "$cml_db" ]; then
    DBLOCALNAME="$cml_db"
fi

TMP_LIST="$DATADIR/iplist.$(date "+%y%m%d%H%M%S").tmp"
TMP_SQL="$DATADIR/remote_cmd.$(date "+%y%m%d%H%M%S").sql"

rm -f "$TMP_LIST" "$TMP_SQL" 2>/dev/null

## получаем список AZS/IP из локальной БД
psql "$DBLOCALNAME" -At -F '|' -h localhost -U "$DBLOCALUSER" -c "$SRC_SQL" > "$TMP_LIST"
ERR=$?
fn_to_log "$(date +%H:%M:%S) get_ip_list=$ERR"

if [ $ERR -ne 0 ]; then
    rm -f "$TMP_LIST" "$TMP_SQL" 2>/dev/null
    exit 1
fi

if [ ! -s "$TMP_LIST" ]; then
    MSG="Список IP пуст"
    echo "$MSG" >&2
    fn_to_log "$(date +%H:%M:%S) $MSG"
    rm -f "$TMP_LIST" "$TMP_SQL" 2>/dev/null
    exit 1
fi

while IFS='|' read -r AZS PLACE IP
do
    if [ -z "$IP" ]; then
        fn_to_log "$(date +%H:%M:%S) skip: empty ip for azs=$AZS"
        continue
    fi

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

    fn_to_log "$(date +%H:%M:%S) run azs=$AZS place=$PLACE ip=$IP"

    OUT1=$("$BINDIR/sshbuk" $CML_TAIL $CML -cmd "$REMOTE_CMD1" </dev/null 2>&1)
    RC1=$?

    ESC_OUT1=$(printf "%s" "$OUT1" | sed "s/'/''/g")

    psql "$DBLOCALNAME" -qAt -h localhost -U "$DBLOCALUSER" \
        -c "SELECT ldict.sf_do_compinfo_set_param($AZS, 0, $PLACE, -1, 'USER', '$ESC_OUT1');"


    OUT2=$("$BINDIR/sshbuk" $CML_TAIL $CML -cmd "$REMOTE_CMD2" </dev/null 2>&1)
    RC2=$?

    ESC_OUT2=$(printf "%s" "$OUT2" | sed "s/'/''/g")

    psql "$DBLOCALNAME" -qAt -h localhost -U "$DBLOCALUSER" \
        -c "SELECT ldict.sf_do_compinfo_set_param($AZS, 0, $PLACE, -1, 'ROOT', '$ESC_OUT2');"

    fn_to_log "$(date +%H:%M:%S) azs=$AZS place=$PLACE ip=$IP sshbuk1=$RC1 sshbuk2=$RC2"

done < "$TMP_LIST"

rm -f "$TMP_LIST" "$TMP_SQL" 2>/dev/null

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