#!/bin/bash
#set -x
## Created by Maricio Fernandez (c)
## some tests


if [ $# -lt 1 ]; then
  echo "USE $0 (DIARIO|SEMANAL)"
  exit 1;
fi

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export PATH
#source /root/.bash_profile
CUSTOMER="GarciaYAsociados"
TYPE=$1
SNAP_SIZE=20
SNAP_NAME=BackupD
PART_NUMBER=2
VG=centos
VOLUME=/dev/centos/server01
SEMANAMES=$((($(date +%-d)-1) / 7+1 ))
DIASSEMANA=(Lunes Martes Miercoles Jueves Viernes Sabado Domingo)
DIA=$(date +%u)
DIA=$(( $DIA - 1 ))
SOURCE="/backup/source"
TARGET=""
LOG=/tmp/backup.txt
ERRLOG=/tmp/error.txt
MAILADDR="malfaro@garciaasociados.net"


# cleanup logs
>/tmp/log

preparation(){
     TIMER=0;
     while [ -n "`lvs  |grep BackupD `" ]; do
       #statements
       sleep 60;
       echo "There is a backup running, job in queue "
       TIMER=$(( $TIMER + 1 ))
     done

  ## SOURCE
  /sbin/lvcreate -s -n $SNAP_NAME -L${SNAP_SIZE}G $VOLUME 2>> $ERRLOG
  mkdir -p $SOURCE
  /sbin/kpartx -av /dev/${VG}/$SNAP_NAME 2>> $ERRLOG
  mount -oro /dev/mapper/${VG}-${SNAP_NAME}${PART_NUMBER} ${SOURCE} 2>> $ERRLOG

  ## TARGET
  if [ "$TYPE" = "DIARIO" ]; then
   mount /backup/diario 2> $ERRLOG
   ## rm -rf "/backup/diario/Respaldos_Nuevo/${DIASSEMANA[$DIA+1]}"
   OLDEST="/backup/diario/Respaldos_Nuevo/${DIASSEMANA[$DIA+4]}"
   TARGET="/backup/diario/Respaldos_Nuevo/${DIASSEMANA[$DIA]}"
   if [ -d $OLDEST ]; then
    mv $OLDEST $TARGET
  else
    mkdir -p $TARGET
  fi

 else
   mount /backup/semanal 2>> $ERRLOG
   TARGET="/backup/semanal/Respaldos_Nuevo/${SEMANAMES}"
   mkdir -p $TARGET
  fi

}

cleanup(){
  /bin/umount $SOURCE 2>> $ERRLOG
  /sbin/kpartx -dv /dev/${VG}/$SNAP_NAME 2>> $ERRLOG
  sync
  if [ "$TYPE" = "DIARIO" ]; then
    umount /backup/diario
  else
    umount /backup/semanal
  fi
   /sbin/lvremove -y /dev/${VG}/$SNAP_NAME
   rmdir /backup/source
   rm $LOG $ERRORLOG
}

send_report(){
  local DATE=$(date +%d/%m/%Y)
  mailx -s "Respaldo $TYPE $DATE" -c "aguila@garciaasociados.net" -r "backups@garciaasociados.net" -a $ERRLOG $MAILADDR  < $LOG

}
hms (){
 #input timeslapsed
local TS=$1
 let S=${TS}%60
 let MM=${TS}/60 #total number of minutes
 let M=${MM}%60
 let H=${MM}/60

   # Display "01h02m03s" format
    [ "$H" -gt "0" ] && printf "%02d%s" $H "h"
    [ "$M" -gt "0" ] && printf "%02d%s" $M "m"
    printf "%02d%s\n" $S "s"

}


run_backup(){
    local SRC=$SOURCE/FileServer/
    echo TimeStamp:`date` > /var/log/rsync_backup.log
    local TIMESTAMP=`date +%s`
    rsync -avzr --delete-after --whole-file --bwlimit=10m --iconv=cp437,utf8 --stats $SRC $TARGET  2>> $ERRLOG |tee -a /var/log/rsync_backup.log
    local TIMESTAMP2=`date +%s`
    local TIMEELAPSED=$(( $TIMESTAMP2 - $TIMESTAMP ))
    HOWLONG=`hms $TIMEELAPSED`
    echo "Tiempo de corrida de backup: $HOWLONG" >> /var/log/rsync_backup.log
    echo "Backup en cola por $TIMER minutos" >> /var/log/rsync_backup.log
    tail -n 19 /var/log/rsync_backup.log > $LOG
    send_report
}

report_error() {
echo "Diagnostic error" >> /tmp/log
lsusb >> /tmp/log
df -h  /media/backup >> /tmp/log
#echo "B$CUSTOMER para $DATE: ERROR" | mail -s "$M_SUBJ" -a $L_ERR -- aguila@virtualhostcr.com

sendEmail -f '"Alertas Virtualhostcr" <alerts@nalakalu.com>' -t aguila@virtualhostcr.com -u "Error backup $CUSTOMER" -m "$MSG \n Error on Backup $CUSTOMER" -s localhost -a /tmp/log
}


preparation
run_backup
send_report
cleanup


#if [ "x$MOUNT" = "x" ]; then
#  if mount /media/backup 2> /tmp/log; then
#    cd /media/backup/Backup_Nalakalu
#  ## backup files and mails
#    rsync -ar --progress --whole-file --iconv=cp437,utf8 /srv/ .
#    ## backup Conitec SQL | Backend system
#    cd /
#    sync
#    umount /media/backup
#    else
#     report_error
#     echo "Error...`cat /tmp/log`"
#  fi
#else
#  report_error
#  echo "Error ... `cat /tmp/log`"
#fi

#umount /media/backup > /dev/null 2>&1
