#!/bin/bash

####
## Description: rspamd wrapper script
## Author: Phil Thiele
## E-Mail: p.thiele@timmehosting.de
## Version: 1.0
## Date: 23.06.2021
####

. /etc/profile
NAG_PLUGINS='/usr/lib/nagios/plugins'
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$NAG_PLUGINS:$PATH

usage() {
   cat <<-EOF
Usage: $0 [options]
   -t <num>          optional: Number of hours since last write (default: 3)
EOF
}

parse_args() {
   if [ "${1#[-]}" != 't' ]; then
      return 0
   fi
   return 1
}

ERRNO=$?
ARGC=$#
ARG_STALE=3
# Check argument count 
if [ $((ARGC)) -gt 2 ]; then
   ERRNO=2
   printf "%s: Too many arguments\n" $0
   echo "$(usage)"
   exit $ERRNO
fi

# Validate arguments
if test ! -z "${1}"; then
   # Check if argument is known
   if ! parse_args; then
      ERRNO=2
      printf "%s: Unknown argument!\n" $0
      echo "$(usage)"
      exit $ERRNO
   fi
   # Is provided argument numeric?
   if test ! -z "${2}" && (case ${2#[-]} in (*[!0-9]*|'') false;; (*) true;; esac); then
      ARG_STALE="${2}"
   else
      ERRNO=2
      printf "%s: Invalid argument!\n" $0
      echo "$(usage)"
      exit $ERRNO
   fi
fi

# First check returned error --> return and exit
CMD=$(check_http -I 127.0.0.1 -p 11334)
ERRNO=$?
if [ $((ERRNO)) -ne 0 ]; then
  printf "CRIT - %s\\n" "${CMD}" && exit $ERRNO
fi

# Check was OK - Verify last write to log
LOG_FILE='/var/log/rspamd/rspamd.log'
if ! test -f "${LOG_FILE}"; then
  printf "CRIT - [%s]: No such file or directory\n" "${LOG_FILE}"
  exit 2
fi
STAT_LAST=$(stat --format=%Y "${LOG_FILE}")
TIME_CURRENT=$(date '+%s')

# Calculate duration since last write
# LAST=$(printf %.2f\\n "$(awk -v sl=$STAT_LAST -v c=$TIME_CURRENT 'BEGIN { print (c - sl) / 60 / 60 }')")
LAST=$(awk -v sl=$STAT_LAST -v c=$TIME_CURRENT 'BEGIN { printf("%.2f\n"), (c - sl) / 60 / 60 }')

# Compare with help of awk if time of last modification is less than 3 hours
STATE=$(awk -v val=$LAST -v arg_stale=$ARG_STALE 'BEGIN { print ((val <= 1 || val >= 1) && val < arg_stale) }')

if [ $STATE = 1 ]; then
  ERRNO=0
  echo "OK - rspamd is healthy."
  exit $ERRNO
fi

ERRNO=2
echo "CRIT - rspamd working, but logging seems stale"
exit $ERRNO
