#!/bin/bash
PATH=/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin

cd /opt/euro-beta
EMAIL=`systools/get_eurodb_config_val MailBackupEmail`
BACKUP_PWD=`systools/get_eurodb_config_val MailBackupPassword`
FREQUENCY=`systools/get_eurodb_config_val MailBackupPeriod`
RETRY=5
KEEP_MAILBACKUPS_MIN=1440
KEEP_MAILBACKUPS_MIN=720
LASTTRY_ISO=`systools/get_eurodb_config_val MailBackupLastTry`
LASTREPORT_ISO=`systools/get_eurodb_config_val MailBackupLastSent`
if [ "LASTREPORT_ISO" == "1970-01-01" -o "$1" ]
then
  FREQUENCY=1
  LASTREPORT_ISO="1970-01-01"
  LASTTRY_ISO="1970-01-01"
fi


cleanup_old_mailbackups()
{
  {
    touch /tmp/mailbackup_cleanup_running 
    find /tmp -type d -iname "mailbackup*" -mmin +$1 -exec rm -rf {} \;
    rm /tmp/mailbackup_cleanup_running
  }&
}

check_support()
{
  CUR_SEC=`date '+%s'`
  MNT_DATE=`./systools/get_eurodb_config_val MaintenanceExpireDate`
  MNT_SEC=`date -d$MNT_DATE +%s`
  DIF_DAYS=$(( ($MNT_SEC-$CUR_SEC)/86400 ))
  echo $DIF_DAYS
}

DAYS_SUPPORT=`check_support`
[ "$EMAIL" -a "$FREQUENCY" ] && [ "$FREQUENCY" -gt 0 -a "$DAYS_SUPPORT" -gt -60 ]  || exit 2

#mandare solo avviso
NOSEND=""
if [ $DAYS_SUPPORT -lt -45 ]; then
  NOSEND="no"
  FREQUENCY=900
fi

TEXT=""
if [ $DAYS_SUPPORT -lt 0 ];  then 
  S=$(( 0-$DAYS_SUPPORT ))
  TEXT="Periodo di manutenzione scaduto da $S giorni."
elif [ $DAYS_SUPPORT -lt 30 ]; then
  TEXT="ATTENZIONE, il periodo di manutenzione scade tra $DAYS_SUPPORT giorni."
fi

DBNAME=eurotest
MYSQL="mysql -peuro3g -ueuro3g $DBNAME -B --silent"
TMPFILE=/tmp/mailevents$$.txt
ERRORFILE=/tmp/mailreport.err

MAIL=mail
if [ -e /usr/local/bin/mail ]
then
  MAIL=/usr/local/bin/mail
fi

SYSNAME=`systools/get_eurodb_config_val ModemSystemName`
NOW_S=`date +%s`
#NOW_ISO=`date -d@$NOW_S +"%Y-%m-%d %H:%M:%S"`
NOW_ISO=`awk 'BEGIN { print strftime("%Y-%m-%d %H:%M:%S", '$NOW_S'); }'`

#LASTTRY_ISO=`systools/get_eurodb_config_val MailBackupLastTry`
LASTTRY_ISO=${LASTTRY_ISO:=2000-01-01}
LASTTRY_S=`date -d"$LASTTRY_ISO" +%s`
DIFF=$(( ($NOW_S-$LASTTRY_S)/60 ))

BACKUP_ID=""
if [ -f "/tmp/spinkey_nr" ]
then
  BACKUP_ID="#"`cat /tmp/spinkey_nr`" "
fi
BACKUP_ID=${BACKUP_ID}${SYSNAME}

#initial cleanup of old mailbackup dirs.....
{
  if [ ! -f /tmp/mailbackup_cleanup_running ]
  then
    cleanup_old_mailbackups $KEEP_MAILBACKUPS_MIN
  fi     
}&


[ $DIFF -lt $RETRY ] && exit 0
systools/set_eurodb_config_val MailBackupLastTry string "$NOW_ISO" 

#LASTREPORT_ISO=`systools/get_eurodb_config_val MailBackupLastSent`
LASTREPORT_ISO=${LASTREPORT_ISO:=2000-01-01}
LASTREPORT_S=`date -d"$LASTREPORT_ISO" +%s`
DIFF=$(( ($NOW_S-$LASTREPORT_S)/60 ))

[ $DIFF -lt $FREQUENCY ] && exit 0

RETVAL=1
rm -f $ERRORFILE

if [ "$NOSEND" ]
then
  if echo -e "Periodo di manutenzione scaduto da piu' di 30 giorni, il salvataggio NON e' allegato" | $MAIL -s "EURO3G $BACKUP_ID DB BACKUP - $NOW_ISO" -r "noreply@e3g.spintec.com (EURO3G $SYSNAME)" $EMAIL 2>$ERRORFILE 
  then
    systools/set_eurodb_config_val MailBackupLastSent string "$NOW_ISO"
    exit 0
  fi
  exit 1
fi

#unconditional cleanup of old mailbackup dirs.....
cleanup_old_mailbackups $KEEP_MAILBACKUPS_MIN

TMPDIR="/tmp/mailbackup$$"
rm -rf $TMPDIR
mkdir $TMPDIR

#nice mysqldump -c --add-drop-table --add-locks -u euro3g -peuro3g eurotest > $TMPDIR/$SYSNAME.sql
#gzip $TMPDIR/$SYSNAME.sql
/opt/euro-beta/systools/backup_db --no-progress --message mailbackup eurotest --outfile $TMPDIR/$SYSNAME

cd data_export
nice tar czvf $TMPDIR/${SYSNAME}_invoices.tgz `find invoices -mtime -30 -type f` #backup invoices for last 30 days
cd ..

ATTACHMENT1="$TMPDIR/${SYSNAME}_invoices.tgz"
ATTACHMENT2="$TMPDIR/$SYSNAME.sql.gz"

ATTACHMENT=""
ZIP_ATTACHMENT=""

if [ -f "$ATTACHMENT1" ]
then
  ATTACHMENT=" -a $ATTACHMENT1"
  ZIP_ATTACHMENT=" "`basename $ATTACHMENT1`
fi
if [ -f "$ATTACHMENT2" ]
then
  ATTACHMENT="$ATTACHMENT -a $ATTACHMENT2"
  ZIP_ATTACHMENT="$ZIP_ATTACHMENT "`basename $ATTACHMENT2`
fi

if [ -f "$ATTACHMENT1" -o -f "$ATTACHMENT2" ]
then
  if [ -n "$BACKUP_PWD" ]
  then
    CURDIR=`pwd`
    cd $TMPDIR
#    zip -P $BACKUP_PWD backup_euro3g.zip $ZIP_ATTACHMENT
    nice /opt/euro-beta/systools/encrypt_zip $BACKUP_PWD backup_euro3g.zip $ZIP_ATTACHMENT
    ATTACHMENT="-a $TMPDIR/backup_euro3g.zip"
    cd $CURDIR
  fi
  if echo -e "$TEXT\nSalvataggio del DB in allegato" | $MAIL -s "EURO3G $BACKUP_ID DB BACKUP - $NOW_ISO" $ATTACHMENT -r "noreply@e3g.spintec.com (EURO3G $SYSNAME)" $EMAIL 2>$ERRORFILE 
  then
    systools/set_eurodb_config_val MailBackupLastSent string "$NOW_ISO" 
    RETVAL=0
  fi
fi

rm -f $ATTACHMENT1
rm -f $ATTACHMENT2
rm -f $TMPDIR/backup_euro3g.zip
rm -fr $TMPDIR
exit $RETVAL


