#!/bin/bash
#########################################################
##  GLOBAL VARIABLES                                   ##
#########################################################
URL="http://java.com/en/download/windows_manual.jsp"
CACHE="/tmp/win_java_version"
CACHE_TIMEOUT=30 # in minutes

function get_new_version() {
  if [ -f "$CACHE" ]; then
    if [ $(( (`date +%s` - `stat -L --format %Y $CACHE`) > ($CACHE_TIMEOUT*60) )) -eq 1 ]; then
      rm $CACHE
    else
      cat "$CACHE"
      return
    fi
  fi
  (curl -s $URL \
  | grep Version \
  | while read a; do
    i=${a%%</h4>*}
    echo ${i#*>}
    done \
  | head -n 1 \
  | while read a; do
    b=${a#* * }
    b=${b%% *}
    echo 1.$b.0_${a##* }
    done\
  ) 2> /dev/null \
    | tee "$CACHE"
}

verlte() {
    [  "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
}

verlt() {
    [ "$1" = "$2" ] && return 1 || verlte $1 $2
}

#########################################################
##  MAIN CODE                                          ##
#########################################################

HOST_NAME="$1"

# Make sure all necessary arguments were given; EXIT with an UNKNOWN status if not
if [ -z "$HOST_NAME" ];then
  # we need these parameters to continue
  EXIT_STRING="UNKNOWN: Hostname variable has not been set!\n"
  EXIT_CODE=3
else
  VERSION=$(/usr/lib/nagios/plugins/check_nrpe -u -t 90 -H $HOST_NAME -c check_java 2>/dev/null)
  RETVAL=$?
  if [ $RETVAL -ne 0 -a $RETVAL -ne 3 ]; then
    # Test if client is alive
    if `fping -q -r0 $HOST_NAME`; then
      # Check for server response - is SNMP even setup okay?
      EXIT_STRING="WARNING: No NRPE response from $HOST_NAME! Make sure host is up and Nagios is configured properly.\n"
      EXIT_CODE=1
    else
      EXIT_STRING="Host $HOST_NAME unreachable.\n"
      EXIT_CODE=3
    fi
  elif [ "$VERSION" = "not found" ]; then
    EXIT_STRING="Java not installed"
    EXIT_CODE=$RETVAL
  else
    version=$(echo "$VERSION" | cut -d ';' -f 1)
    newversion=$(get_new_version)

    if $(verlt $version $newversion); then
      EXIT_STRING="Critical: Java Version $version - available $newversion"
      EXIT_CODE=2
    else
      EXIT_STRING="OK: Java Version $version"
      EXIT_CODE=0
    fi

  fi
fi

# If the program hasn't exited already, then a check was run okay and we can quit.
printf "$EXIT_STRING\n"

exit $EXIT_CODE
