#!/bin/bash
# 
# 0. sources /usr/sbin/eb-check-eb and hence /usr/lib/bsclient/load_environment
#    which guarantees $BSCLIENT_ETC_DIR and $BSCLIENT_ENV_FILE beeing set,
#    usally to /etc/bsclient resp. /etc/bsclient/environment
# 1. executes all commands in $BSCLIENT_ETC_DIR/prep-steps
#    and lists them with OK or FAILURE
# 2. calls eb-backup for all directories listed in $BSCLIENT_ETC_DIR/dirs2backup
# 3. executes all commands in $BSCLIENT_ETC_DIR/post-steps

echo "eb-daily starting"
echo " "

. /usr/sbin/eb-check-eb

# check if last night's instance is still running
MYPID="$$"
OTHERBSCDAILY=$(ps -ef |egrep "bash .*/usr/sbin/eb-daily" |grep -E -v " $MYPID |grep ")
if [ -n "$OTHERBSCDAILY" ] ; then 
  echo "ERROR: Another eb-daily is still running:"
  echo "$OTHERBSCDAILY"
  #if [ -x /usr/bin/mail -o -x /bin/mail ] ; then
  #  ( echo "ERROR: Another eb-daily is still running on $(hostname):"
  #    echo "$OTHERBSCDAILY"
  #  ) |mail root
  #fi
  exit 1
fi

echo "Touching .bsclient/eb-daily-beginning.txt on backup target ..."
mkdir -pv ${EBMOUNTDIR}/${EBDESTBASE}/.bsclient/
touch ${EBMOUNTDIR}/${EBDESTBASE}/.bsclient/eb-daily-beginning.txt
echo " "

PREPSTEPFILES=$(ls -1d ${BSCLIENT_ETC_DIR}/prep-steps ${BSCLIENT_ETC_DIR}/bsclient-etc-dirs.d/*/prep-steps 2>/dev/null |sort)
if [ -n "${PREPSTEPFILES}" ] ; then
  echo "Found the following prep-steps files:"
  echo "${PREPSTEPFILES}"
  echo "Doing pre-backup work from these prep-steps files ..."
  #cat ${PREPSTEPFILES} |egrep -v '^\s*(#|;|$)' |while read SCRIPTLINE
  egrep -H -n -v '^\s*(#|;|$)' ${PREPSTEPFILES} |while read FILELINESCRIPT
  do
    STEPFILE=$(echo "$FILELINESCRIPT" |cut -f1 -d ':')
    STEPLINENR=$(echo "$FILELINESCRIPT" |cut -f2 -d ':')
    SCRIPTLINE=$(echo "$FILELINESCRIPT" |cut -f3- -d ':')
    export STEPOK="unknown"
    SCRIPTCMD=$(basename $(echo "$SCRIPTLINE" |cut -f1 -d ' '))
    #echo "SCRIPTCMD=$SCRIPTCMD"
    STEPFILEKEY=$(echo "${STEPFILE}" |cut -f5 -d '/') # |sed -e 's|^$|main|g')
    SCRIPTLOGFILE="${BSCLIENT_LOGBASE}/eb-prep-step_${STEPFILEKEY}_${STEPLINENR}_${SCRIPTCMD}.log"
    test -f ${SCRIPTLOGFILE} && mv -v ${SCRIPTLOGFILE} ${SCRIPTLOGFILE}.bak
    STEPOK="NO"
    echo -n "For ${STEPFILE} line ${STEPLINENR} calling $SCRIPTLINE" |tee ${SCRIPTLOGFILE}
    echo "" >>${SCRIPTLOGFILE}
    $SCRIPTLINE >>${SCRIPTLOGFILE} 2>&1 && STEPOK="YES"
    if [ "$STEPOK" = "YES" ] 
    then 
      echo " - OK" 
      echo "Back from script, seems it went OK" >>${SCRIPTLOGFILE}
    else 
      echo " - FAILURE"
      echo "Please check ${SCRIPTLOGFILE}"
      echo "Back from script, seems it FAILED" >>${SCRIPTLOGFILE}
    fi
  done
else
  echo "No ${BSCLIENT_ETC_DIR}/prep-steps or ${BSCLIENT_ETC_DIR}/bsclient-etc-dirs.d/*/prep-steps, not doing any preparation work."
fi

echo " "

DIRLISTFILES=$(ls -1d ${BSCLIENT_ETC_DIR}/dirs2backup ${BSCLIENT_ETC_DIR}/bsclient-etc-dirs.d/*/dirs2backup 2>/dev/null |sort)
export DIRLIST=""
if [ -n "${DIRLISTFILES}" ] ; then
  echo "Found the following dirs2backup files:"
  echo "${DIRLISTFILES}"
  echo "Backuping up directories from these dirs2backup files ..."
  DIRLIST=$(cat ${DIRLISTFILES} |cut -f1 -d ' ' |egrep -v '^\s*(#|;|$)')
else
  echo "No ${BSCLIENT_ETC_DIR}/dirs2backup or ${BSCLIENT_ETC_DIR}/bsclient-etc-dirs.d/*/dirs2backup, not backing up any directories."
fi
for DIR in $DIRLIST
do
  LOGFILENAME=$(echo "$DIR" |cut -c2- |tr '/' '_')
  test -f $BSCLIENT_LOGBASE/eb-backup_$LOGFILENAME.log && -v mv $BSCLIENT_LOGBASE/eb-backup_$LOGFILENAME.log $BSCLIENT_LOGBASE/eb-backup_$LOGFILENAME.log.bak
  export SYNCOK="NO"
  echo -n "Synching $DIR"
  /usr/sbin/eb-backup $DIR >$BSCLIENT_LOGBASE/eb-backup_$LOGFILENAME.log 2>&1 && SYNCOK="YES"
  if [ "$SYNCOK" = "YES" ] 
  then 
    echo " - OK" 
    echo "Back from sync, seems it went OK" >>$BSCLIENT_LOGBASE/eb-backup_$LOGFILENAME.log
  else 
    echo " - FAILURE"
    echo "Please check $BSCLIENT_LOGBASE/eb-backup_$LOGFILENAME.log"
    echo "Back from sync, seems it FAILED" >>$BSCLIENT_LOGBASE/eb-backup_$LOGFILENAME.log
  fi
done
echo " "


POSTSTEPFILES=$(ls -1d ${BSCLIENT_ETC_DIR}/post-steps ${BSCLIENT_ETC_DIR}/bsclient-etc-dirs.d/*/post-steps 2>/dev/null |sort)
if [ -n "${POSTSTEPFILES}" ] ; then
  echo "Found the following post-steps files:"
  echo "${POSTSTEPFILES}"
  echo "Doing post-backup work from these post-steps files ..."
  #cat ${POSTSTEPFILES} |egrep -v '^\s*(#|;|$)' |while read SCRIPTLINE
  egrep -H -n -v '^\s*(#|;|$)' ${POSTSTEPFILES} |while read FILELINESCRIPT
  do
    STEPFILE=$(echo "$FILELINESCRIPT" |cut -f1 -d ':')
    STEPLINENR=$(echo "$FILELINESCRIPT" |cut -f2 -d ':')
    SCRIPTLINE=$(echo "$FILELINESCRIPT" |cut -f3- -d ':')
    export STEPOK="unknown"
    SCRIPTCMD=$(basename $(echo "$SCRIPTLINE" |cut -f1 -d ' '))
    #echo "SCRIPTCMD=$SCRIPTCMD"
    STEPFILEKEY=$(echo "${STEPFILE}" |cut -f5 -d '/') # |sed -e 's|^$|main|g')
    SCRIPTLOGFILE="eb-post-step_${BSCLIENT_LOGBASE}/${SCRIPTCMD}.log"
    SCRIPTLOGFILE="${BSCLIENT_LOGBASE}/eb-post-step_${STEPFILEKEY}_${STEPLINENR}_${SCRIPTCMD}.log"
    test -f ${SCRIPTLOGFILE} && mv -v ${SCRIPTLOGFILE} ${SCRIPTLOGFILE}.bak
    STEPOK="NO"
    echo -n "For ${STEPFILE} line ${STEPLINENR} calling $SCRIPTLINE" |tee ${SCRIPTLOGFILE}
    echo "" >>${SCRIPTLOGFILE}
    $SCRIPTLINE >>${SCRIPTLOGFILE} 2>&1 && STEPOK="YES"
    if [ "$STEPOK" = "YES" ] 
    then 
      echo " - OK" 
      echo "Back from script, seems it went OK" >>${SCRIPTLOGFILE}
    else 
      echo " - FAILURE"
      echo "Please check ${SCRIPTLOGFILE}"
      echo "Back from script, seems it FAILED" >>${SCRIPTLOGFILE}
    fi
  done
else
  echo "No ${BSCLIENT_ETC_DIR}/post-steps or ${BSCLIENT_ETC_DIR}/bsclient-etc-dirs.d/*/post-steps, not doing any post-backup work."
fi

echo " "

echo "Touching .bsclient/eb-daily-done.txt on backup target ..."
touch ${EBMOUNTDIR}/${EBDESTBASE}/.bsclient/eb-daily-done.txt

echo " "

#UPDATELISTFILE="${BSCLIENT_LOGBASE}/available_updates.txt"
## |wc -l |tr -d ' ')
#if [ -z "$UPDATELISTFILE" ] ; then
#  echo "Update checks did not find any updates - OK"
#else
#  echo "Update checker suggest these updates:"
#  cat $UPDATELISTFILE
#fi

#echo "Press ENTER to continue" ; read ENTER

echo " "

