#!/bin/bash
#
# Check for zombie jobs (not terminated).
# Also scan logs for ERROR messages
#

# shellcheck source=../environment.in
. ./environment

# shellcheck source=./functions
. "${BAREOS_SCRIPTS_DIR}"/functions

# check_for_zombie_jobs storage=STORAGE [client=localhost-fd]

if [ $# = 2 ]; then
  client="$2"
else
  client="client"
fi

wait_for_jobs_to_terminate "${client}" 20

"${BAREOS_BCONSOLE_BINARY}" -c "${BAREOS_CONFIG_DIR}" <<END_OF_DATA >/dev/null 2>&1
@output "${tmp}"/dir.out
status dir
@output "${tmp}"/fd.out
status ${client}
@output "${tmp}"/sd.out
status $1
@output
quit
END_OF_DATA

export zstat
if ! grep "No Jobs running." "${tmp}"/dir.out >/dev/null 2>&1; then
  echo " "
  echo "  !!!! Zombie Jobs in Director !!!!"
  echo "  !!!! Zombie Jobs in Director !!!!" >>test.out
  cat "${tmp}"/dir.out
  cat "${tmp}"/dir.out >>test.out
  echo " "
  zstat=1
  exit 1
fi
if ! grep "No Jobs running." "${tmp}"/fd.out >/dev/null 2>&1; then
  echo " "
  echo "  !!!! Zombie Jobs in File daemon !!!!"
  echo "  !!!! Zombie Jobs in File daemon !!!!" >>test.out
  cat "${tmp}"/fd.out
  cat "${tmp}"/fd.out >>test.out
  echo " "
  zstat=1
  exit 1
fi
if ! grep "No Jobs running." "${tmp}"/sd.out >/dev/null 2>&1; then
  echo " "
  echo "  !!!! Zombie Jobs in Storage daemon !!!!"
  echo "  !!!! Zombie Jobs in Storage daemon !!!!" >>test.out
  cat "${tmp}"/sd.out
  cat "${tmp}"/sd.out >>test.out
  echo " "
  zstat=1
  exit 1
fi

if ls "${tmp}"/log*.out >/dev/null 2>&1; then

  if grep "ERROR" "${tmp}"/log*.out >/dev/null 2>&1; then
    echo " "
    echo "  !!!! ERROR in log output !!!!"
    echo "  !!!! ERROR in log output !!!!" >>test.out
    grep "ERROR" "${tmp}"/log*.out
    echo " "
    zstat=1
    exit 1
  fi

  if grep "Fatal Error" "${tmp}"/log*.out >/dev/null 2>&1; then
    echo " "
    echo "  !!!! Fatal Error in log output !!!!"
    echo "  !!!! Fatal Error in log output !!!!" >>test.out
    grep "Fatal Error" "${tmp}"/log*.out
    echo " "
    zstat=1
    exit 1
  fi

  if grep "glibc detected" "${tmp}"/log*.out >/dev/null 2>&1; then
    echo " "
    echo "  !!!! glibc detected Error in log output !!!!"
    echo "  !!!! glibc detected Error in log output !!!!" >>test.out
    grep "glibc detected" "${tmp}"/log*.out
    echo " "
    zstat=1
    exit 1
  fi

fi
