#!/bin/sh

#------------------------------------------------------------------------------#
# parametri
#------------------------------------------------------------------------------#

# 1 virtual host (basename, es. test.3ware.it)
# 2 destinazione da usare al di sotto di /backup/$VH (es. auto/$SET/$SHIFT o manual/2021201123456)
# 3 ftp (bit sì/no)
# 4 incrementale (bit sì/no)
# 5 livello incrementale (non necessario se non richiesto incrementale)
# 6 verbose



#------------------------------------------------------------------------------#
# preparazione variabili in base ai parametri e alla configurazione
#------------------------------------------------------------------------------#

VH=$1
PARTIAL=$2
FTP=$3
INC=$4
LEVEL=$5
VERBOSE=$6

DEST=/backup/$VH/$PARTIAL
mkdir -p $DEST
date +%s%N | cut -b1-13 > $DEST/timestamp
touch $DEST/running

TMPID=$(date +%s%N)
CNF=/tmp/my$TMPID.cnf

MYSQL=/usr/local/mysql/bin/mysql
MYSQLDUMP=/usr/local/mysql/bin/mysqldump

echo "[client]" > $CNF
echo "password=f0EMDe2dw2sdLCBlq9A9pC3fAB9CQ3iiZSQ58Z5XZ59ZBHp9l2x0SejA801ZLe8V" >> $CNF

SRVNAME=$(< /srv/name)



#------------------------------------------------------------------------------#
# backup nella cartella locale
#------------------------------------------------------------------------------#

SRC=/work/www/$VH
FILE=vh.tar.gz

if [ "$INC" == "1" ]
then
	touch $DEST/incremental

	rm $DEST/start

	# se il file log snap manca si creerà un backup completo indipendentemente dal livello
	if [ ! -f /var/log/backuphosts.$VH.snap ]
	then
		touch $DEST/start
	fi

	if [ "$LEVEL" == "0" ]
	then
		touch $DEST/start
	fi
	
	tar								\
		-cz$VERBOSE						\
		--acls							\
		--preserve-permissions					\
		--listed-incremental=/var/log/backuphosts.$VH.snap	\
		--level=$LEVEL						\
		--file=$DEST/$FILE					\
		--directory=$SRC .
else
	rm $DEST/incremental
	rm $DEST/start
	
	tar				\
		-cz$VERBOSE		\
		--acls			\
		--preserve-permissions	\
		--file=$DEST/$FILE	\
		--directory=$SRC .
fi



#------------------------------------------------------------------------------#
# copia via FTP
#------------------------------------------------------------------------------#

if [ "$FTP" == "1" ] || [ "$FTP" == "true" ]
then
	sendftp $DEST/$FILE /backup/$SRVNAME/$VH/$PARTIAL/$FILE &
fi



#------------------------------------------------------------------------------#
# database collegati al virtual host
#------------------------------------------------------------------------------#

OPTS="--triggers --routines --events --skip-lock-tables --single-transaction --quick --hex-blob --default-character-set=utf8mb4"
#EXTRAOPTS="--column-statistics=0 --set-gtid-purged=OFF"

SQL="SELECT d.nome FROM gpanel.\`databases\` AS d INNER JOIN gpanel.virtualhosts AS v ON d.idVirtualHost = v.id AND d.backup INNER JOIN gpanel.domini AS dd ON v.idDominio = dd.id AND dd.nome = '$VH'"
SCHEMAS=$($MYSQL --defaults-extra-file=$CNF -h 127.0.0.1 -u backup -B gpanel -N -e "$SQL")

for s in $SCHEMAS
do
	FILE=$s.sql
	
	$MYSQLDUMP --defaults-extra-file=$CNF $OPTS $EXTRAOPTS -h 127.0.0.1 -u backup -B $s --result-file=$DEST/$FILE
	gzip -f9 $DEST/$FILE
	FILE=$FILE.gz

	if [ "$FTP" == "1" ] || [ "$FTP" == "true" ]
	then
		sendftp $DEST/$FILE /backup/$SRVNAME/$VH/$PARTIAL/$FILE &
	fi
done

#------------------------------------------------------------------------------#



rm $CNF
rm $DEST/running



#------------------------------------------------------------------------------#
# sblocco il dominio
#------------------------------------------------------------------------------#

/work/scripts/cancelTask $VH
