#!/bin/sh
# PURPOSE:	dfosBackup:backup job for software (tools and data) relevant for QC work
# AUTHOR:	Reinhard Hanuschik / ESO
# PARAMETERS:	none
# VERSIONS:     1.0  -- generated from UVES version (2006-01-23)
# CONFIG:	config.dfosBackup
# OUTPUT: 	compressed tar files under $BACKUP_DIR1 and 2
#
# =========================================================================

TOOL_VERSION="1.0"

# =========================================================================
# 0. Initialization
# 0.1 check for directory variables which should be set globally in .dfosrc
# =========================================================================

CHECK=`printenv | grep DFO`

if [ "Q$CHECK" = "Q" ]
then
        echo "*** ERROR: DFO variables not defined. Check ~/.dfosrc and restart."
        exit -1
fi

if [ ! -s $DFO_CONFIG_DIR/config.dfosBackup ]
then
        echo "*** ERROR: no $DFO_CONFIG_DIR/config.dfosBackup found. Exit."
        exit -1
fi

# =========================================================================
# 0.2 read options and parameters
# =========================================================================

while getopts hv OPTION
do
	case "$OPTION" in
	 v ) echo $TOOL_VERSION
	     exit 0 ;;
	 h ) cat $DFO_DOC_DIR/dfosBackup.h 
	    exit 0 ;;
	 esac
done

# =========================================================================
# 0.3 Initialize some parameters
# =========================================================================

BACKUP_DIR1=`grep "^BACKUP_DIR1"	$DFO_CONFIG_DIR/config.dfosBackup | awk '{print $2}'`
BACKUP_DIR2=`grep "^BACKUP_DIR2"	$DFO_CONFIG_DIR/config.dfosBackup | awk '{print $2}'`
KEEP_NLATEST=`grep "^KEEP_NLATEST"	$DFO_CONFIG_DIR/config.dfosBackup | awk '{print $2}'`

BACKUP_DIR1=`eval "echo $BACKUP_DIR1"`
BACKUP_DIR2=`eval "echo $BACKUP_DIR2"`

DATE=`date +%Y-%m-%d`

if [ ! -d $BACKUP_DIR1 ]
then
	eval "mkdir $BACKUP_DIR1"
	echo "*** INFO: $BACKUP_DIR1 created."
fi

if [ ! -d $BACKUP_DIR2 ]
then
	eval "mkdir $BACKUP_DIR2"
	echo "*** INFO: $BACKUP_DIR2 created."
fi

cd $BACKUP_DIR2
if [ -s ${DATE} ]
then
	rm -r ${DATE}
fi
mkdir ${DATE}

cd $BACKUP_DIR1
if [ -s ${DATE} ]
then
	rm -r ${DATE}
fi
mkdir ${DATE}

# =========================================================================
# 1.0 Find the tar file names 
# =========================================================================

rm -f $TMP_DIR/list_tarfiles
grep "^ITEM" $DFO_CONFIG_DIR/config.dfosBackup | awk '{print $4}' | sort -u > $TMP_DIR/list_tarfiles

for T in `cat $TMP_DIR/list_tarfiles`
do
	echo "$T ..."
	rm -f $TMP_DIR/list_list
	grep "^ITEM" $DFO_CONFIG_DIR/config.dfosBackup | grep "[[:space:]]$T[[:space:]]" | awk '{print "INDEX"NR,$0}' > $TMP_DIR/list_list

# =========================================================================
# 2. Find the items to backup
# =========================================================================

	for I in `cat $TMP_DIR/list_list | awk '{print $1}'`
	do
		DIR=`grep "^$I[[:space:]]" $TMP_DIR/list_list | awk '{print $3}'`
		ITM=`grep "^$I[[:space:]]" $TMP_DIR/list_list | awk '{print $4}'`
		TAR=`grep "^$I[[:space:]]" $TMP_DIR/list_list | awk '{print $5}'`

		DIR1=`eval "echo $DIR"`

		if [ "Q$DIR1" = "Q" ]
		then
			echo "*** ERROR: $DIR1 no directory configured."
			continue
		fi

		if [ ! -d $DIR1 ]
		then
			echo "*** ERROR: directory $DIR1 not found."
			continue
		fi

		echo "$DIR: '$ITM' 	to ${TAR}_$DATE.tar"
		eval "cd $DIR"

		eval "tar -rf ${BACKUP_DIR1}/$DATE/${TAR}_$DATE.tar $ITM"
	done

# =========================================================================
# 3. Compression
# =========================================================================

	echo "  compressing ${TAR}_$DATE.tar ..."
	compress ${BACKUP_DIR1}/$DATE/${TAR}_$DATE.tar
	echo ""
done

# =========================================================================
# 4. Statistics
# =========================================================================

echo ""
echo "Backup created under ${BACKUP_DIR1}/$DATE."
cd ${BACKUP_DIR1}/$DATE

echo "Backup:"
du -h *

BSIZE=`du -ksh`
echo ""
echo "Total size of backup: $BSIZE"

# =========================================================================
# 5. Create copy of backup
# =========================================================================

cp $BACKUP_DIR1/$DATE/* $BACKUP_DIR2/$DATE

# =========================================================================
# 6. Remove outdated backups 
# =========================================================================

# $BACKUP_DIR1
cd $BACKUP_DIR1

rm -f $TMP_DIR/list_all_backups
ls -d 20* > $TMP_DIR/list_all_backups
ls -d 20* | tail -${KEEP_NLATEST} > $TMP_DIR/list_leave

if [ -s $TMP_DIR/list_all_backups ]
then
	for L in `cat $TMP_DIR/list_leave`
	do
		grep -v $L $TMP_DIR/list_all_backups > $TMP_DIR/list_all_backups1
		mv $TMP_DIR/list_all_backups1 $TMP_DIR/list_all_backups
	done
fi

# delete outdated backups
if [ -s $TMP_DIR/list_all_backups ]
then
	echo ""
	echo "Removed:"
	cat $TMP_DIR/list_all_backups
	rm -r `cat $TMP_DIR/list_all_backups`
fi

# BACKUP_DIR2
cd $BACKUP_DIR2

rm -f $TMP_DIR/list_all_backups
ls -d 20* > $TMP_DIR/list_all_backups
ls -d 20* | tail -${KEEP_NLATEST} > $TMP_DIR/list_leave

if [ -s $TMP_DIR/list_all_backups ]
then
	for L in `cat $TMP_DIR/list_leave`
	do
		grep -v $L $TMP_DIR/list_all_backups > $TMP_DIR/list_all_backups1
		mv $TMP_DIR/list_all_backups1 $TMP_DIR/list_all_backups
	
	done
fi

# delete outdated backups
if [ -s $TMP_DIR/list_all_backups ]
then
	echo ""
	echo "Removed:"
	cat $TMP_DIR/list_all_backups
	rm -r `cat $TMP_DIR/list_all_backups`
fi

# =========================================================================
# 7. Call $PLUGIN_FINAL; $DATE and $BACKUP_DIR1 are exported
# =========================================================================

export DATE
export BACKUP_DIR1

PLUGIN_FINAL=`grep "^PLUGIN_FINAL" $DFO_CONFIG_DIR/config.dfosBackup | awk '{print $2}'`

if [ "Q$PLUGIN_FINAL" != "Q" ] 
then
	if [ -s $DFO_BIN_DIR/$PLUGIN_FINAL ]
	then
		eval "$DFO_BIN_DIR/$PLUGIN_FINAL"
	fi
fi

exit
