#!/bin/bash
# ------------------------------------------------------------------
# [DADT@IFPE] script_bacula-job-check
#          Script utilizado pelo Zabbix para obter propriedades dos
#          dos jobs de backup do Bareos/Bacula
# ------------------------------------------------------------------

# HISTORY
#     2019/05/09 : xxxxxxxxxxxxxx : Versão inicial do script
#     2015/10/14 : Paulo Fernando : Pequenos melhoramentos no código

VERSION=0.1.0
USAGE="Usage: command <jobname> <option> <level>"

# --- Options processing -------------------------------------------
if [ $# == 0 ] ; then
    echo $USAGE
    exit 1;
fi

# ------------------------------------------------------------------

baculaConfPath="/etc/bacula/bacula-dir.conf"

Grep="$(which grep)"
Sed="$(which sed)"

## GET DB CONFIG
getdb_config() {
  bacula_InfoDB=$( $Grep dbname ${baculaConfPath} | $Sed 's/ //g' )

  eval "$bacula_InfoDB"

  if [ "$DBAddress" == "" ]
  then
    DBAddress="localhost"
  fi
}

## GET EACH JOB STATUS, BYTES, LEVEL AND LAST EXECUTION FOR PGSQL
get_job_param_pgsql()
{
  arg1="name='$1'"
  if [ "$2" == "lastexecution" ]
  then
    arg2="EXTRACT(EPOCH FROM NOW()-EndTime)::integer"
  elif [ "$2" == "jobbytes" ]
  then
    arg1="name='$1' AND jobstatus='T' AND level='$3'"
    arg2=$2
  elif [ "$2" == "duration" ]
  then
    arg1="name='$1' AND jobstatus='T' AND level='$3'"
    arg2="EXTRACT(EPOCH FROM EndTime-StartTime)::integer"
  else
    arg2=$3
  fi
  jobStatus=$( export PGPASSWORD=$dbpassword && /usr/bin/psql -h$DBAddress -U$dbuser -d$dbname -t -c "SELECT $arg2 FROM Job WHERE $arg1 ORDER BY jobid DESC LIMIT 1 OFFSET 0"| xargs )

  translateCode "$jobStatus"
}

## GET EACH JOB STATUS, BYTES, LEVEL AND LAST EXECUTION FOR MYSQL
get_job_param()
{
  arg1="name='$1'"
  if [ "$2" == "lastexecution" ]
  then
    arg2="EXTRACT(EPOCH FROM NOW()-EndTime)::integer"
  elif [ "$2" == "jobbytes" ]
  then
    arg1="name='$1' AND jobstatus='T' AND level='$3'"
    arg2=$2
  elif [ "$2" == "duration" ]
  then
    arg1="name='$1' AND jobstatus='T' AND level='$3'"
    arg2="EXTRACT(EPOCH FROM EndTime-StartTime)::integer"
  else
    arg2=$2
  fi
  jobStatus=$(export PGPASSWORD=$dbpassword && /usr/bin/psql -h$DBAddress -U$dbuser -d$dbname -t -c "SELECT $arg2 FROM Job WHERE $arg1 ORDER BY jobid DESC LIMIT 1 OFFSET 0"|xargs)

  translateCode "$jobStatus"
}

get_job_param_mysql()
{
  arg1="name='$1'"
  if [ "$2" == "lastexecution" ]
  then
    arg2="TIMESTAMPDIFF(SECOND,EndTime,NOW())"
  elif [ "$2" == "jobbytes" ]
  then
    arg1="name='$1' AND jobstatus='T' AND level='$3'"
    arg2=$2
  elif [ "$2" == "duration" ]
  then
    arg1="name='$1' AND jobstatus='T' AND level='$3'"
    arg2="TIMESTAMPDIFF(SECOND,StartTime,EndTime)"
  else
    arg2=$2
  fi
  jobStatus=$(/usr/bin/mysql -h$DBAddress -u $dbuser -p$dbpassword -D $dbname -e "SELECT $arg2 FROM Job WHERE $arg1 ORDER BY jobid DESC LIMIT 1 OFFSET 0" --skip-column-names|xargs)

  translateCode "$jobStatus"
}

translateCode() {
  code="$1"
  case "$code" in
    "T")
      echo Ok ;;
    "C")
      echo Criado ;;
    "R")
      echo Executando ;;
    "E")
      echo Falhou ;;
    "f")
      echo Erro_Fatal ;;
    "A")
      echo Cancelado ;;
    "t")
      echo 'Esperando a hora de executar' ;;
    "p")
      echo 'Esperando tarefa com prioridade' ;;
    "")
      # Vazio, acontece quando o backup falhou
      echo '-1' ;;
    *)
      echo "$code" ;;
    esac
}

## EXECUTION
getdb_config && \

IsPSQL=$( export PGPASSWORD=$dbpassword && /usr/bin/psql -h$DBAddress -U$dbuser -d$dbname -l 2> /dev/null| grep $dbname | xargs )

if [ -z "$IsPSQL" ];
then
  get_job_param_mysql $1 $2 $3
else
  get_job_param $1 $2 $3
fi

