#!/bin/bash

# Plugin Return Codes
# 0 = Ok
# 1 = Warning
# 2 = Critical
# 3 = Unknown

PrinterName="${1:-*}" # Hostname or IP
WarnLevel="${2:-10}"
CriticalLevel="${3:-5}"
StatusCacheDir=/var/log/nagios3/toner

CName=([0]="Cyan" [1]="Magenta" [2]="Yellow" [3]="Black")
CShort=([0]="C" [1]="M" [2]="Y" [3]="BK")

Levels=$(curl -fs http://${PrinterName}/Information/supplies_status.htm|grep '^var.*TonerPer')
if [ "$?" -ne "0" ]; then
  if [ -r "${StatusCacheDir}/${PrinterName}" ]; then
    Levels=$(cat "${StatusCacheDir}/${PrinterName}")
  else
    echo "Can't contact printer."
    exit 3
  fi
else
  echo "${Levels}" > ${StatusCacheDir}/${PrinterName}
fi

RetVal=0; RetLev=""; RetMsg=""

for((i=0; i<=3; i++)) {
  Level[$i]=$(echo "${Levels}"|grep "${CName[$i]}")
  Level[$i]=${Level[$i]%;*}
  Level[$i]=${Level[$i]#*=}
  Level[$i]=${Level[$i]##* }

  if [ "${Level[$i]}" -le "${CriticalLevel}" ]; then
    RetMsg="${RetMsg}${RetMsg:+;}Cartridge ${CName[$i]} (almost) empty!"
    if [ ${RetVal} -lt 2 ]; then
      RetVal=2
    fi
  elif [ "${Level[$i]}" -le "${WarnLevel}" ]; then
    RetMsg="${RetMsg}${RetMsg:+;}Toner low in Cartridge ${CName[$i]}!"
    if [ ${RetVal} -lt 1 ]; then
      RetVal=1
    fi
  fi
  RetLev="${RetLev}${RetLev:+;}${CShort[$i]}=${Level[$i]}%"

}
echo "${RetMsg:-Ok} (${RetLev})"
exit $RetVal
