#!/bin/bash
# Script de backup para a INTRANET - v3 Maico

DATA=$(date)
DIASEM=$(date +%F-%Hh%Mm)
INTRADBDIR=/home/intranet
INTRADB=intranet.gdb
INTRABKPDIR=/root/backup-intranet
INTRABKP=intranet-$DIASEM.gbk
DB_CONNECTION="$INTRADBDIR/$INTRADB"
BKP_DATA=$(date "+%Y-%m-%d %H:%M:%S")
BK_BACKUP=0
BK_DRIVE=0
LOG=/tmp/backup.log
ERROR_LOG=/tmp/backup_error.log

GravaLog(){
  case $2 in
    0) tipomsg=" [  \e[0;32mOK\e[0m  ]";;
    2) tipomsg="";;
    *) tipomsg=" [\e[0;31mFALHOU\e[0m]";;
  esac
  echo -e $(date +%x" "%X)" - $1"$tipomsg >> $LOG
}

# Iniciando Backup
GravaLog "Backup Iniciado" 2

/opt/firebird/bin/gbak -B -USER INETMAX -PASS <SENHA-INTRANET> $INTRADBDIR/$INTRADB $INTRABKPDIR/$INTRABKP
backup_status=$?
GravaLog "Gerando backup do BD..." $backup_status

# Verifica o status do backup
if [ $backup_status -ne 0 ]; then
  GravaLog "Erro ao gerar backup do BD. Consulte $ERROR_LOG para detalhes." 1
  exit 1
fi

# Compacta
if bzip2 -z9 "$INTRABKPDIR/$INTRABKP"; then
  bz2=$?
  GravaLog "Compactando backup do BD..." $bz2
  INTRABKP2=$INTRABKP".bz2"
  GravaLog "$INTRABKP2" $bz2
else
  bz2=$?
  GravaLog "Compactando backup do BD..." $bz2
  GravaLog "Erro ao compactar o arquivo $INTRABKPDIR/$INTRABKP" 1
fi

# Verifica se o arquivo .bz2 existe
if [ -e "$INTRABKPDIR/$INTRABKP2" ]; then
  BK_BACKUP=1
  fi

# Drive
/usr/bin/rclone sync --update --verbose "$INTRABKPDIR" "Backup-Intranet:Backup/" -vv --include "*.bz2" >> /tmp/upload_rclone.txt
drive_status=$?
GravaLog "Enviando para o Drive..." $drive_status

# Verifica o status do envio para o Drive
if [ $drive_status -ne 0 ]; then
  GravaLog "Erro ao enviar para o Drive. Consulte $ERROR_LOG para detalhes." 1
fi

# Verifica se o arquivo .bz2 existe no drive
if rclone ls "Backup-Intranet:Backup/$INTRABKP2" | grep -q "$INTRABKP2"; then
  BK_DRIVE=1
fi

# Defina a variável de ambiente TERM
export TERM=xterm

# Insira os detalhes do backup no banco de dados Firebird
/opt/firebird/bin/isql -user "INETMAX" -password "<SENHA-INTRANET>" <<-EOF 2>> $ERROR_LOG
  CONNECT "/home/intranet/intranet.gdb";
  INSERT INTO BACKUP (bk_date, bk_nome, bk_backup, bk_drive) VALUES ('$BKP_DATA', '$INTRABKP', '$BK_BACKUP', '$BK_DRIVE');
  COMMIT;
  QUIT;
EOF
db_status=$?
GravaLog "Inserindo registro no Banco..." $db_status

# Verifica o status da inserção no Banco
if [ $db_status -ne 0 ]; then
  GravaLog "Erro ao inserir registro no Banco. Consulte $ERROR_LOG para detalhes." 1
fi

GravaLog "Backup Concluído" 0
