889 lines
		
	
	
	
		
			27 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			889 lines
		
	
	
	
		
			27 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/usr/bin/env bash
 | 
						|
############################# Written and Manteined by Nicola Bandini     ###############
 | 
						|
############################# Created and written by Matthias Luettermann ###############
 | 
						|
############################# finetuning by primator@gmail.com
 | 
						|
############################# finetuning by n.bandini@gmail.com
 | 
						|
############################# finetuning by vitamin.b@mailbox.org
 | 
						|
############################# with code by Tom Lesniak and Hugo Geijteman
 | 
						|
############################# with code by Carsten Koebke
 | 
						|
#
 | 
						|
# copyright (c) 2008 Shahid Iqbal
 | 
						|
# This program is free software; you can redistribute it and/or modify
 | 
						|
# it under the terms of the GNU General Public License as published by
 | 
						|
# the Free Software Foundation;
 | 
						|
#
 | 
						|
# This program is distributed in the hope that it will be useful,
 | 
						|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
# GNU General Public License for more details.
 | 
						|
#
 | 
						|
# contact the author directly for more information at: matthias@xcontrol.de
 | 
						|
##########################################################################################
 | 
						|
plgVer=1.01
 | 
						|
 | 
						|
usage() {
 | 
						|
  echo
 | 
						|
  echo "qnap_health $plgVer"
 | 
						|
  echo
 | 
						|
  echo "Warning: Wrong command line arguments."
 | 
						|
  echo
 | 
						|
  echo "Usage: ${0##*/} [-V protocol] -H <hostname> -C <community> -p <part> -w <warning> -c <critical>"
 | 
						|
  echo
 | 
						|
  echo "Where: -p|--part             - part to check"
 | 
						|
  echo "       -h                    - no human-readable output; do not use unit suffixes"
 | 
						|
  echo "       -w|--warning          - warning"
 | 
						|
  echo "       -c|--critical         - critical"
 | 
						|
  echo "       -t|--timeout          - timeout for snmp connect, default: 5s"
 | 
						|
  echo "       --help                - show this help"
 | 
						|
  echo
 | 
						|
  echo "SNMP specific"
 | 
						|
  echo "       -H|--hostname         - hostname or IP"
 | 
						|
  echo "       -V                    - SNMP protocol version to use (1, 2c, 3); default: 2c"
 | 
						|
  echo "       -P|--port             - SNMP port; default: 161"
 | 
						|
  echo
 | 
						|
  echo "SNMP Version 1|2c specific"
 | 
						|
  echo "       -C|--community        - SNMP community name; default: public"
 | 
						|
  echo
 | 
						|
  echo "SNMP Version 3 specific"
 | 
						|
  echo "       -l|--level            - security level (noAuthNoPriv|authNoPriv|authPriv)"
 | 
						|
  echo "       -u|--user             - security name"
 | 
						|
  echo "       -a|--authprotocol     - authentication protocol (MD5|SHA)"
 | 
						|
  echo "       -A|--authpassphrase   - authentication protocol pass phrase"
 | 
						|
  echo "       -x|--privprotocol     - privacy protocol (DES|AES)"
 | 
						|
  echo "       -X|--privpassphrase   - privacy protocol pass phrase"
 | 
						|
  echo
 | 
						|
  echo "Parts are: status, sysinfo, systemuptime, temp, cpu, cputemp, usedram, iops, latency, powerstatus, fans, diskused, hdstatus, hdtemp, lunstatus (for iSCSI luns), volstatus (Raid Volume Status)"
 | 
						|
  echo
 | 
						|
  echo "volstatus & lunstatus checks all vols/luns and vols/lun space; powerstatus checks power supply"
 | 
						|
  echo "<#> is 1-8 for hd, 1-5 for vol"
 | 
						|
  echo
 | 
						|
  echo " Example for diskusage: ${0##*/} -H 127.0.0.1 -C public -p diskused -w 80 -c 95"
 | 
						|
  echo
 | 
						|
  echo " Example for volstatus: ${0##*/} -H 127.0.0.1 -C public -p volstatus -w 15 -c 10"
 | 
						|
  echo "                        critical and warning value are related to free disk space"
 | 
						|
  echo
 | 
						|
  echo " Example for fans: ${0##*/} -H 127.0.0.1 -C public -p fans -w 2000 -c 1900"
 | 
						|
  echo "                   critical and warning are minimum speed in rpm for fans"
 | 
						|
  echo
 | 
						|
  echo " this plugin requires the following programs to be installed:"
 | 
						|
  echo "  * bc"
 | 
						|
  echo "  * awk"
 | 
						|
  echo "  * snmpget"
 | 
						|
  echo "  * snmpwalk"
 | 
						|
  exit $EXIT_UNKNOWN
 | 
						|
}
 | 
						|
 | 
						|
# Default values
 | 
						|
strProtocol="2c"
 | 
						|
strCommunity="public"
 | 
						|
strPort="161"
 | 
						|
timeout="5"
 | 
						|
 | 
						|
# Exit codes
 | 
						|
EXIT_OK="0"
 | 
						|
EXIT_WARNING="1"
 | 
						|
EXIT_CRITICAL="2"
 | 
						|
EXIT_UNKNOWN="3"
 | 
						|
 | 
						|
# check for needed programs
 | 
						|
SNMPGET_BIN=$(which snmpget)
 | 
						|
SNMPWALK_BIN=$(which snmpwalk)
 | 
						|
BC_BIN=$(which bc)
 | 
						|
AWK_BIN=$(which awk)
 | 
						|
 | 
						|
if [ -z "$SNMPGET_BIN" ]; then
 | 
						|
  echo "Could not find 'snmpget'!"
 | 
						|
  usage
 | 
						|
fi
 | 
						|
 | 
						|
if [ -z "$SNMPWALK_BIN" ]; then
 | 
						|
  echo "Could not find 'snmpwalk'!"
 | 
						|
  usage
 | 
						|
fi
 | 
						|
 | 
						|
if [ -z "$BC_BIN" ]; then
 | 
						|
  echo "Could not find 'bc'!"
 | 
						|
  usage
 | 
						|
fi
 | 
						|
 | 
						|
if [ -z "$AWK_BIN" ]; then
 | 
						|
  echo "Could not find 'awk'!"
 | 
						|
  usage
 | 
						|
fi
 | 
						|
 | 
						|
# Options
 | 
						|
 | 
						|
PARSED_OPTIONS=$(getopt -n "$0" -o V:H:C:p:hw:c:t:l:u:a:A:x:X:P: --long "hostname:,community:,part:,warning:,critical:,timeout:,level:,user:,authprotocol:,authpassphrase:,privprotocol:,privpassphrase:,port:,help" -- "$@")
 | 
						|
if [ $? -ne 0 ]; then
 | 
						|
  usage
 | 
						|
  exit $EXIT_UNKNOWN
 | 
						|
fi
 | 
						|
 | 
						|
if [ $# -eq 0 ]; then
 | 
						|
  usage
 | 
						|
  exit $EXIT_UNKNOWN
 | 
						|
fi
 | 
						|
eval set -- "$PARSED_OPTIONS"
 | 
						|
 | 
						|
while true; do
 | 
						|
  case "$1" in
 | 
						|
    --help)
 | 
						|
      usage
 | 
						|
      shift
 | 
						|
      ;;
 | 
						|
    -C|--community)
 | 
						|
      strCommunity="$2"
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -P|--port)
 | 
						|
      strPort="$2"
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -h)
 | 
						|
      inhuman=1
 | 
						|
      shift
 | 
						|
      ;;
 | 
						|
    -H|--hostname)
 | 
						|
      strHostname="$2"
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -p|--part)
 | 
						|
      strPart="$2"
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -V)
 | 
						|
      if [ -n "$2" ]; then
 | 
						|
        strProtocol="$2"
 | 
						|
        case "$strProtocol" in
 | 
						|
          1|2c|3)
 | 
						|
            ;;
 | 
						|
          *)
 | 
						|
            echo "ERROR: wrong protocol version" >&2
 | 
						|
            usage
 | 
						|
            ;;
 | 
						|
        esac
 | 
						|
      fi
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -w|--warning)
 | 
						|
      strWarning="$2"
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -c|--critical)
 | 
						|
      strCritical="$2"
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -t|--timeout)
 | 
						|
      timeout="$2"
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -l|--level)
 | 
						|
      if [ -n "$2" ]; then
 | 
						|
        strLevel="$2"
 | 
						|
        case "$strLevel" in
 | 
						|
          noAuthNoPriv|authNoPriv|authPriv)
 | 
						|
            ;;
 | 
						|
          *)
 | 
						|
            echo "ERROR: wrong security level" >&2
 | 
						|
            usage
 | 
						|
            ;;
 | 
						|
        esac
 | 
						|
      fi
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -u|--user)
 | 
						|
      if [ -n "$2" ]; then
 | 
						|
        strUser="$2"
 | 
						|
      fi
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -a|--authprotocol)
 | 
						|
      if [ -n "$2" ]; then
 | 
						|
        strAuthprotocol="${2,,}"
 | 
						|
        case "$strAuthprotocol" in
 | 
						|
          md5|sha)
 | 
						|
            ;;
 | 
						|
          *)
 | 
						|
            echo "ERROR: wrong authentication protocol" >&2
 | 
						|
            usage
 | 
						|
            ;;
 | 
						|
        esac
 | 
						|
      fi
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -A|--authpassphrase)
 | 
						|
      if [ -n "$2" ]; then
 | 
						|
        strAuthpassphrase="$2"
 | 
						|
      else
 | 
						|
        echo "ERROR: authentification passphrase is missing" >&2
 | 
						|
        usage
 | 
						|
      fi
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -x|--privprotocol)
 | 
						|
      if [ -n "$2" ]; then
 | 
						|
        strPrivprotocol="${2,,}"
 | 
						|
        case "$strPrivprotocol" in
 | 
						|
          des|aes)
 | 
						|
            ;;
 | 
						|
          *)
 | 
						|
            echo "ERROR: wrong privacy protocol" >&2
 | 
						|
            usage
 | 
						|
            ;;
 | 
						|
        esac
 | 
						|
      fi
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    -X|--privpassphrase)
 | 
						|
      if [ -n "$2" ]; then
 | 
						|
        strPrivpassphrase="$2"
 | 
						|
      else
 | 
						|
        echo "ERROR: privacy passphrase is missing" >&2
 | 
						|
        exit 3
 | 
						|
      fi
 | 
						|
      shift 2
 | 
						|
      ;;
 | 
						|
    --)
 | 
						|
      shift
 | 
						|
      break
 | 
						|
      ;;
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
if ([ "$strPart" != "sysinfo" -a "$strPart" != "hdstatus" -a "$strPart" != "powerstatus" ]) && ( [ -z "$strWarning" -o -z "$strCritical" ]);then
 | 
						|
  echo "UKNOWN: $strPart check needs warning and critical threshold set."
 | 
						|
  exit 3
 | 
						|
fi
 | 
						|
 | 
						|
function _cmdparam() {
 | 
						|
  case "$strProtocol" in
 | 
						|
    1|2c)
 | 
						|
      cmd="-v $strProtocol -c $strCommunity"
 | 
						|
      ;;
 | 
						|
    3)
 | 
						|
      cmd="-v $strProtocol -u $strUser -l $strLevel -a $strAuthprotocol -A $strAuthpassphrase -x $strPrivprotocol -X $strPrivpassphrase"
 | 
						|
      ;;
 | 
						|
  esac
 | 
						|
 | 
						|
  if [ -n "$strPort" ]; then
 | 
						|
    cmd="$cmd $strHostname:$strPort"
 | 
						|
  else
 | 
						|
    cmd="$cmd $strHostname"
 | 
						|
  fi
 | 
						|
 | 
						|
  echo "$cmd"
 | 
						|
}
 | 
						|
 | 
						|
function _trim() {
 | 
						|
  echo $1 | awk '{$1=$1};1'
 | 
						|
}
 | 
						|
 | 
						|
function _snmpget() {
 | 
						|
  snmpget $(_cmdparam) "$@"
 | 
						|
}
 | 
						|
 | 
						|
function _snmpwalk() {
 | 
						|
  snmpwalk $(_cmdparam) "$@"
 | 
						|
}
 | 
						|
 | 
						|
function _snmpgetval() {
 | 
						|
  snmpget $(_cmdparam) -Oqv "$@"
 | 
						|
}
 | 
						|
 | 
						|
function _snmpstatus() {
 | 
						|
  snmpstatus $(_cmdparam) "$@"
 | 
						|
}
 | 
						|
 | 
						|
function _get_exp() {
 | 
						|
  case "$1" in
 | 
						|
    PB) echo "50" ;;
 | 
						|
    TB) echo "40" ;;
 | 
						|
    GB) echo "30" ;;
 | 
						|
    MB) echo "20" ;;
 | 
						|
    KB) echo "10" ;;
 | 
						|
    '') echo "0" ;;
 | 
						|
    *)  echo "ERROR: unknown unit '$1'" ;;
 | 
						|
  esac
 | 
						|
}
 | 
						|
# Check if QNAP is online
 | 
						|
TEST="$(_snmpstatus -t $timeout -r 0 2>&1)"
 | 
						|
if [ "$TEST" == "Timeout: No Response from $strHostname:$strPort" ]; then
 | 
						|
  echo "UNKOWN: SNMP to $strHostname is not available or wrong community string";
 | 
						|
  exit $EXIT_UNKNOWN;
 | 
						|
fi
 | 
						|
 | 
						|
# STATUS ---------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
if [ "$strPart" == "status" ]; then
 | 
						|
  echo "$TEST";
 | 
						|
 | 
						|
# DISKUSED ---------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "diskused" ]; then
 | 
						|
  diskStr="$(_snmpget 1.3.6.1.4.1.24681.1.2.17.1.4.1)"
 | 
						|
  freeStr="$(_snmpget 1.3.6.1.4.1.24681.1.2.17.1.5.1)"
 | 
						|
 | 
						|
  diskSize="$(echo "$diskStr" | awk '{print $4}' | sed 's/.\(.*\)/\1/')"
 | 
						|
  freeSize="$(echo "$freeStr" | awk '{print $4}' | sed 's/.\(.*\)/\1/')"
 | 
						|
  diskUnit="$(echo "$diskStr" | awk '{print $5}' | sed 's/.*\(.B\).*/\1/')"
 | 
						|
  freeUnit="$(echo "$freeStr" | awk '{print $5}' | sed 's/.*\(.B\).*/\1/')"
 | 
						|
 | 
						|
  diskExp="$(_get_exp "$diskUnit")"
 | 
						|
  freeExp="$(_get_exp "$freeUnit")"
 | 
						|
 | 
						|
  disk="$(echo "scale=0; $diskSize*(2^$diskExp)" | bc -l)"
 | 
						|
  free="$(echo "scale=0; $freeSize*(2^$freeExp)" | bc -l)"
 | 
						|
 | 
						|
  used="$(echo "scale=0; $disk-$free" | bc -l)"
 | 
						|
  perc="$(echo "scale=0; $used*100/$disk" | bc -l)"
 | 
						|
 | 
						|
  diskH="$(echo "scale=2; $disk/(2^$diskExp)" | bc -l)"
 | 
						|
  freeH="$(echo "scale=2; $free/(2^$freeExp)" | bc -l)"
 | 
						|
  usedH="$(echo "scale=2; $used/(2^$diskExp)" | bc -l)"
 | 
						|
 | 
						|
  if [ "${inhuman:-0}" -eq 1 ]; then
 | 
						|
    diskF="$disk"
 | 
						|
    freeF="$free"
 | 
						|
    usedF="$used"
 | 
						|
  else
 | 
						|
    diskF="$diskH$diskUnit"
 | 
						|
    freeF="$freeH$freeUnit"
 | 
						|
    usedF="$usedH$diskUnit"
 | 
						|
  fi
 | 
						|
 | 
						|
  #wdisk=$(echo "scale=0; $strWarning*$disk/100" | bc -l)
 | 
						|
  #cdisk=$(echo "scale=0; $strCritical*$disk/100" | bc -l)
 | 
						|
 | 
						|
  OUTPUT="Total:$diskF - Used:$usedF - Free:$freeF - Used Space: $perc%|Used=$perc;$strWarning;$strCritical;0;100"
 | 
						|
 | 
						|
  if [ $perc -ge $strCritical ]; then
 | 
						|
    echo "CRITICAL: $OUTPUT"
 | 
						|
    exit $EXIT_CRITICAL 
 | 
						|
  elif [ $perc -ge $strWarning ]; then
 | 
						|
    echo "WARNING: $OUTPUT"
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    echo "OK: $OUTPUT"
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# CPU ----------------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "cpu" ]; then
 | 
						|
  CPU="$(_snmpgetval 1.3.6.1.4.1.24681.1.2.1.0 | sed -E 's/"([0-9.]+) ?%"/\1/')"
 | 
						|
 | 
						|
  OUTPUT="CPU Load=$CPU%|CPU load=$CPU%;$strWarning;$strCritical;0;100"
 | 
						|
 | 
						|
  if (( $(echo "$CPU > $strCritical" | bc -l) )); then
 | 
						|
    echo "CRITICAL: $OUTPUT"
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif ((  $(echo "$CPU > $strWarning" | bc -l) )); then
 | 
						|
    echo "WARNING: $OUTPUT"
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    echo "OK: $OUTPUT"
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# CPUTEMP ----------------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "cputemp" ]; then
 | 
						|
  TEMP0="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.5.0 | sed -E 's/"([0-9.]+) ?C.*/\1/')"
 | 
						|
  OUTPUT="CPU Temperature: ${TEMP0}°C|NAS CPUtemperature=${TEMP0}C;$strWarning;$strCritical;;"
 | 
						|
 | 
						|
  if [ "$TEMP0" -ge "$strCritical" ]; then
 | 
						|
    echo "CRITICAL: $OUTPUT"
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif [ "$TEMP0" -ge "$strWarning" ]; then
 | 
						|
      echo "WARNING: $OUTPUT"
 | 
						|
      exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    echo "OK: $OUTPUT"
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# Free RAM---------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "usedram" ]; then
 | 
						|
  totalMemStr="$(_snmpgetval 1.3.6.1.4.1.24681.1.2.2.0)"
 | 
						|
  freeMemStr="$(_snmpgetval 1.3.6.1.4.1.24681.1.2.3.0)"
 | 
						|
 | 
						|
  totalMemSize="$(echo "$totalMemStr" | sed -E 's/"([0-9.]+) ?.?B"/\1/')"
 | 
						|
  freeMemSize="$(echo "$freeMemStr" | sed -E 's/"([0-9.]+) ?.?B"/\1/')"
 | 
						|
  totalMemUnit="$(echo "$totalMemStr" | sed -E 's/"[0-9.]+ ?(.?B)"/\1/')"
 | 
						|
  freeMemUnit="$(echo "$freeMemStr" | sed -E 's/"[0-9.]+ ?(.?B)"/\1/')"
 | 
						|
 | 
						|
  totalMemExp="$(_get_exp "$totalMemUnit")"
 | 
						|
  freeMemExp="$(_get_exp "$freeMemUnit")"
 | 
						|
 | 
						|
  totalMem="$(echo "scale=0; $totalMemSize*(2^$totalMemExp)" | bc -l)"
 | 
						|
  freeMem="$(echo "scale=0; $freeMemSize*(2^$freeMemExp)" | bc -l)"
 | 
						|
 | 
						|
  usedMem="$(echo "scale=0; $totalMem-$freeMem" | bc -l)"
 | 
						|
  percMem="$(echo "scale=0; $usedMem*100/$totalMem" | bc -l)"
 | 
						|
 | 
						|
  totalMemH="$(echo "scale=1; $totalMem/(2^$totalMemExp)" | bc -l)"
 | 
						|
  freeMemH="$(echo "scale=1; $freeMem/(2^$freeMemExp)" | bc -l)"
 | 
						|
  usedMemH="$(echo "scale=1; $usedMem/(2^$freeMemExp)" | bc -l)"
 | 
						|
 | 
						|
  if [ "${inhuman:-0}" -eq 1 ]; then
 | 
						|
    totalMemF="$totalMem"
 | 
						|
    freeMemF="$freeMem"
 | 
						|
    usedMemF="$usedMem"
 | 
						|
  else
 | 
						|
    totalMemF="$totalMemH$totalMemUnit"
 | 
						|
    freeMemF="$freeMemH$freeMemUnit"
 | 
						|
    usedMemF="$usedMemH$freeMemUnit"
 | 
						|
  fi
 | 
						|
 | 
						|
  OUTPUT="Total:$totalMemF - Used:$usedMemF - Free:$freeMemF|Memory usage=$percMem%;$strWarning;$strCritical;0;100"
 | 
						|
 | 
						|
  if [ $percMem -ge $strCritical ]; then
 | 
						|
    echo "CRITICAL: $OUTPUT"
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif [ $percMem -ge $strWarning ]; then
 | 
						|
    echo "WARNING: $OUTPUT"
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    echo "OK: $OUTPUT"
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# System Temperature---------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "temp" ]; then
 | 
						|
  TEMP0="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.6.0 | sed -E 's/"([0-9.]+) ?C.*/\1/')"
 | 
						|
  OUTPUT="Temperature: ${TEMP0}°C|NAS temperature=${TEMP0}C;$strWarning;$strCritical;;"
 | 
						|
 | 
						|
  if [ "$TEMP0" -ge "$strCritical" ]; then
 | 
						|
    echo "CRITICAL: $OUTPUT"
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif [ "$TEMP0" -ge "$strWarning" ]; then
 | 
						|
    echo "WARNING: $OUTPUT"
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    echo "OK: $OUTPUT"
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# Disk IOPS ----------------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "iops" ]; then
 | 
						|
 IOPS=$(_snmpgetval 1.3.6.1.4.1.24681.1.4.1.11.5.6.2.1.3.1 | sed -E 's/"|\s%//g')
 | 
						|
 | 
						|
 OUTPUT="IOPS="$IOPS"|IOPS="$IOPS";$strWarning;$strCritical;0;100"
 | 
						|
 | 
						|
 if (( $(echo "$IOPS > $strCritical" | bc -l) )); then
 | 
						|
   echo "CRITICAL: $OUTPUT"
 | 
						|
   exit $EXIT_CRITICAL
 | 
						|
 elif ((  $(echo "$IOPS > $strWarning" | bc -l) )); then
 | 
						|
   echo "WARNING: $OUTPUT"
 | 
						|
   exit $EXIT_WARNING
 | 
						|
 else
 | 
						|
   echo "OK: $OUTPUT"
 | 
						|
   exit $EXIT_OK
 | 
						|
 fi
 | 
						|
 | 
						|
# Disk Latency ----------------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "latency" ]; then
 | 
						|
  LATENCY=$(_snmpgetval 1.3.6.1.4.1.24681.1.4.1.11.5.6.2.1.4.1 | sed -E 's/"|\s%//g')
 | 
						|
 | 
						|
  OUTPUT="Latency="$LATENCY"|Latency="$LATENCY";$strWarning;$strCritical;0;100"
 | 
						|
 | 
						|
  if (( $(echo "$LATENCY > $strCritical" | bc -l) )); then
 | 
						|
    echo "CRITICAL: $OUTPUT"
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif ((  $(echo "$LATENCY > $strWarning" | bc -l) )); then
 | 
						|
    echo "WARNING: $OUTPUT"
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    echo "OK: $OUTPUT"
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# HD# Temperature---------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [[ "$strPart" == hdtemp ]]; then
 | 
						|
  PERFOUTPUT=""
 | 
						|
  UnknownStr=""
 | 
						|
  CriticalStr=""
 | 
						|
  WarningStr=""
 | 
						|
  EXIT=0
 | 
						|
 | 
						|
  hdnum="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.10.0)"
 | 
						|
  for (( c=1; c<=$hdnum; c++ ))
 | 
						|
  do
 | 
						|
    TEMPHD="$(_snmpgetval "1.3.6.1.4.1.24681.1.2.11.1.3.$c" | sed -E 's/"([0-9.]+) ?C.*/\1/')"
 | 
						|
    if [[ ! $TEMPHD =~ ^-?[0-9]+$ ]]; then
 | 
						|
      if [ -n "$UnknownStr" ]; then
 | 
						|
        UnknownStr="${UnknownStr},HDD${c}"
 | 
						|
      else
 | 
						|
        UnknownStr="UNKNOWN: HD${c}"
 | 
						|
      fi
 | 
						|
      continue
 | 
						|
    fi
 | 
						|
    if [ $TEMPHD -ge $strCritical ]; then
 | 
						|
      if [ -n "$CriticalStr" ]; then
 | 
						|
        CriticalStr="${CriticalStr}, HDD${c}: ${TEMPHD}°C"
 | 
						|
      else
 | 
						|
        CriticalStr="CRITICAL: HDD${c}: ${TEMPHD}°C"
 | 
						|
      fi
 | 
						|
    elif [ $TEMPHD -ge $strWarning -a $TEMPHD -lt $strCritical ]; then
 | 
						|
      if [ -n "$WarningStr" ]; then
 | 
						|
        WarningStr="${WarningStr}, HDD${c}: ${TEMPHD}°C"
 | 
						|
      else
 | 
						|
        WarningStr="WARNING: HDD${c}: ${TEMPHD}°C"
 | 
						|
      fi
 | 
						|
    fi
 | 
						|
    if [ -n "$PERFOUTPUT" ]; then
 | 
						|
      PERFOUTPUT="${PERFOUTPUT} HDD${c}_temperature=${TEMPHD};$strWarning;$strCritical;;"
 | 
						|
    else
 | 
						|
      PERFOUTPUT="HDD${c}_temperature=${TEMPHD};$strWarning;$strCritical;;"
 | 
						|
    fi
 | 
						|
  done
 | 
						|
 | 
						|
  if [ -z "$CriticalStr" -a -z "$WarningStr" -a -z "$UnknownStr" ]; then
 | 
						|
    OUTPUT="OK: All HDD are fine."
 | 
						|
  else
 | 
						|
    if [ -n "$CriticalStr" ]; then
 | 
						|
      EXIT=$EXIT_CRITICAL
 | 
						|
      OUTPUT="$CriticalStr"
 | 
						|
    fi
 | 
						|
    if [ -n "$WarningStr" ]; then
 | 
						|
      if [ ! $EXIT -eq 2 ]; then
 | 
						|
        EXIT=$EXIT_WARNING
 | 
						|
      fi
 | 
						|
      OUTPUT="$OUTPUT $WarningStr"
 | 
						|
    fi
 | 
						|
    if [ -n "$UnknownStr" ];then
 | 
						|
      if [ ! $EXIT -eq 1 -a ! $EXIT -eq 2 ];then
 | 
						|
        EXIT=$EXIT_UNKNOWN
 | 
						|
      fi
 | 
						|
      OUTPUT="$OUTPUT $UnknownStr"
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
  echo "$(_trim "$OUTPUT")|$PERFOUTPUT"
 | 
						|
  exit $EXIT
 | 
						|
 | 
						|
# HD Status----------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "hdstatus" ]; then
 | 
						|
  hdnum="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.10.0)"
 | 
						|
  hdok=0
 | 
						|
  hdnok=0
 | 
						|
  hdnop=0
 | 
						|
  output_crit=""
 | 
						|
 | 
						|
  for (( c=1; c<=$hdnum; c++ ))
 | 
						|
  do
 | 
						|
    HD="$(_snmpgetval "1.3.6.1.4.1.24681.1.2.11.1.7.$c" | sed 's/^"\(.*\).$/\1/')"
 | 
						|
 | 
						|
    if [ "$HD" == "GOOD" ]; then
 | 
						|
      ((hdok+=1))
 | 
						|
    elif [ "$HD" == "--" ]; then
 | 
						|
      ((hdnop+=1))
 | 
						|
    else
 | 
						|
      output_crit="${output_crit} Disk ${c}"
 | 
						|
      ((hdnok+=1))
 | 
						|
    fi
 | 
						|
  done
 | 
						|
 | 
						|
  PERFDATA="|hdok=$hdok;;;; hdnok=$hdnok;;;; unused=$hdnop;;;;"
 | 
						|
 | 
						|
  if [ -n "$output_crit" ]
 | 
						|
  then
 | 
						|
    echo "CRITICAL: $(_trim "${output_crit}")$PERFDATA"
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  else
 | 
						|
    echo "OK: Online Disk $hdok, Free Slot ${hdnop}$PERFDATA"
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# LUN Status----------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "lunstatus" ]; then
 | 
						|
  ALLOUTPUT=""
 | 
						|
  PERFOUTPUT=""
 | 
						|
  WARNING=0
 | 
						|
  CRITICAL=0
 | 
						|
  lun=1
 | 
						|
  lunCOUNT="$(_snmpwalk .1.3.6.1.4.1.24681.1.4.1.1.2.1.10.2.1.2 | wc -l)"
 | 
						|
 | 
						|
  #if [ "$strWarning" -lt "$strCritical" ]; then
 | 
						|
  #  echo "Warning threshold ($strWarning) is less than critical threshold ($strCritical) ! -- Are you sure ?"
 | 
						|
  #fi
 | 
						|
  while [ "$lun" -le "$lunCOUNT" ]; do
 | 
						|
    lun_Status="$(_snmpgetval ".1.3.6.1.4.1.24681.1.4.1.1.2.1.10.2.1.5.$lun" | sed 's/^"\(.*\).$/\1/')"
 | 
						|
    lun_name="$(_snmpgetval ".1.3.6.1.4.1.24681.1.4.1.1.2.1.10.2.1.6.$lun" | sed 's/^"\(.*\).$/\1/')"
 | 
						|
    if [ "$lun_Status" == "Enabled" ]; then
 | 
						|
      lunSTAT="OK($lun_Status)"
 | 
						|
    else
 | 
						|
      lunSTAT="CRITICAL($lun_Status)"
 | 
						|
      CRITICAL=1
 | 
						|
    fi
 | 
						|
 | 
						|
    lunCpctStr="$(_snmpgetval ".1.3.6.1.4.1.24681.1.4.1.1.2.1.10.2.1.3.$lun")"
 | 
						|
    lunUsedPct="$(_snmpgetval ".1.3.6.1.4.1.24681.1.4.1.1.2.1.10.2.1.4.$lun")"
 | 
						|
 | 
						|
    lunCpct="$(echo "scale=0; $lunCpctStr*(2^0)" | bc -l)"
 | 
						|
    lunUsedCpct="$(echo "scale=0; $lunCpct/100*$lunUsedPct" | bc -l)"
 | 
						|
    lunUsedWarn="$(echo "scale=0; $lunCpct/100*$strWarning" | bc -l)"
 | 
						|
    lunusedCrit="$(echo "scale=0; $lunCpct/100*$strCritical" | bc -l)"
 | 
						|
 | 
						|
    if [ "$lunUsedPct" -ge "$strCritical" ]; then
 | 
						|
      lunUsedPctStr="CRITICAL($lunUsedPct)"
 | 
						|
      CRITICAL=1
 | 
						|
    elif [ "$lunUsedPct" -ge "$strWarning" -a "$lunUsedPct" -lt "$strCritical" ]; then
 | 
						|
      lunUsedPctStr="WARNING($lunUsedPct)"
 | 
						|
      WARNING=1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -n "$ALLOUTPUT" ] ; then
 | 
						|
      ALLOUTPUT="${ALLOUTPUT} :: "
 | 
						|
    fi
 | 
						|
    if [ "$lunUsedPctStr" != "" ]; then
 | 
						|
      ALLOUTPUT="${ALLOUTPUT}$lun_name: $lunSTAT, used: ${lunUsedPctStr}%"
 | 
						|
    fi
 | 
						|
 | 
						|
    #Performance Data
 | 
						|
    if [ $lun -gt 1 ]; then
 | 
						|
      PERFOUTPUT="$PERFOUTPUT "
 | 
						|
    fi
 | 
						|
    PERFOUTPUT="${PERFOUTPUT}usedpct_$lun_name=${lunUsedPct}%;$strWarning;$strCritical;0;100 used_$lun_name=${lunUsedCpct}b;$lunUsedWarn;$lunusedCrit;0;$lunCpct"
 | 
						|
 | 
						|
    lun="`expr $lun + 1`"
 | 
						|
    unset lunUsedPctStr
 | 
						|
  done
 | 
						|
 | 
						|
  if [ -z "$ALLOUTPUT" ]; then
 | 
						|
    ALLOUTPUT="OK: All luns are fine."
 | 
						|
  fi
 | 
						|
  echo "$ALLOUTPUT| $PERFOUTPUT"
 | 
						|
 | 
						|
  if [ $CRITICAL -eq 1 ]; then
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif [ $WARNING -eq 1 ]; then
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
# Volume Status----------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "volstatus" ]; then
 | 
						|
  ALLOUTPUT=""
 | 
						|
  PERFOUTPUT=""
 | 
						|
  WARNING=0
 | 
						|
  CRITICAL=0
 | 
						|
  VOL=1
 | 
						|
  VOLCOUNT="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.16.0)"
 | 
						|
 | 
						|
  if [ "$strWarning" -lt "$strCritical" ]; then
 | 
						|
    echo "Warning threshold ($strWarning) is less than critical threshold ($strCritical) ! -- Are you sure ?"
 | 
						|
  fi
 | 
						|
 | 
						|
  while [ "$VOL" -le "$VOLCOUNT" ]; do
 | 
						|
    Vol_Status="$(_snmpgetval ".1.3.6.1.4.1.24681.1.2.17.1.6.$VOL" | sed 's/^"\(.*\).$/\1/')"
 | 
						|
 | 
						|
    if [ "$Vol_Status" == "Ready" ]; then
 | 
						|
      VOLSTAT="OK: $Vol_Status"
 | 
						|
    elif [ "$Vol_Status" == "Rebuilding..." ]; then
 | 
						|
      VOLSTAT="WARNING: $Vol_Status"
 | 
						|
      WARNING=1
 | 
						|
    else
 | 
						|
      VOLSTAT="CRITICAL: $Vol_Status"
 | 
						|
      CRITICAL=1
 | 
						|
    fi
 | 
						|
 | 
						|
    volCpctStr="$(_snmpget ".1.3.6.1.4.1.24681.1.2.17.1.4.$VOL")"
 | 
						|
    volFreeStr="$(_snmpget ".1.3.6.1.4.1.24681.1.2.17.1.5.$VOL")"
 | 
						|
 | 
						|
    volCpctSize="$(echo "$volCpctStr" | awk '{print $4}' | sed 's/.\(.*\)/\1/')"
 | 
						|
    volFreeSize="$(echo "$volFreeStr" | awk '{print $4}' | sed 's/.\(.*\)/\1/')"
 | 
						|
    volCpctUnit="$(echo "$volCpctStr" | awk '{print $5}' | sed 's/.*\(.B\).*/\1/')"
 | 
						|
    volFreeUnit="$(echo "$volFreeStr" | awk '{print $5}' | sed 's/.*\(.B\).*/\1/')"
 | 
						|
 | 
						|
    volCpctExp="$(_get_exp "$volCpctUnit")"
 | 
						|
    volFreeExp="$(_get_exp "$volFreeUnit")"
 | 
						|
 | 
						|
    volCpct="$(echo "scale=0; $volCpctSize*(2^$volCpctExp)" | bc -l)"
 | 
						|
    volFree="$(echo "scale=0; $volFreeSize*(2^$volFreeExp)" | bc -l)"
 | 
						|
    volUsed="$(echo "scale=0; $volCpct-$volFree" | bc -l)"
 | 
						|
 | 
						|
    volFreePct="$(echo "scale=0; $volFree*100/$volCpct" | bc -l)"
 | 
						|
    volUsedPct="$(echo "scale=0; $volUsed*100/$volCpct" | bc -l)"
 | 
						|
 | 
						|
    volCpctH="$(echo "scale=2; $volCpct/(2^$volCpctExp)" | bc -l)"
 | 
						|
    volFreeH="$(echo "scale=2; $volFree/(2^$volFreeExp)" | bc -l)"
 | 
						|
    volUsedH="$(echo "scale=2; $volUsed/(2^$volFreeExp)" | bc -l)"
 | 
						|
 | 
						|
    if [ "${inhuman:-0}" -eq 1 ]; then
 | 
						|
      volCpctF="$volCpct"
 | 
						|
      volFreeF="$volFree"
 | 
						|
      volUsedF="$volUsed"
 | 
						|
    else
 | 
						|
      volCpctF="$volCpctH $volCpctUnit"
 | 
						|
      volFreeF="$volFreeH $volFreeUnit"
 | 
						|
      volUsedF="$volUsedH $volFreeUnit"
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ "$volFreePct" -le "$strCritical" ]; then
 | 
						|
      volFreePct="CRITICAL: $volFreePct"
 | 
						|
      CRITICAL=1
 | 
						|
    elif [ "$volFreePct" -le "$strWarning" ]; then
 | 
						|
      volFreePct="WARNING: $volFreePct"
 | 
						|
      WARNING=1
 | 
						|
    fi
 | 
						|
 | 
						|
    ALLOUTPUT="${ALLOUTPUT}Volume #$VOL: $VOLSTAT, Total Size (bytes): $volCpctF, Free: $volFreeF (${volFreePct}%)"
 | 
						|
    if [ "$VOL" -lt "$VOLCOUNT" ]; then
 | 
						|
      ALLOUTPUT="${ALLOUTPUT}, "
 | 
						|
    fi
 | 
						|
 | 
						|
    #Performance Data
 | 
						|
    if [ $VOL -gt 1 ]; then
 | 
						|
      PERFOUTPUT="$PERFOUTPUT "
 | 
						|
    fi
 | 
						|
    PERFOUTPUT="${PERFOUTPUT}FreeSize_Volume-$VOL=${volFreePct}%;$strWarning;$strCritical;0;100"
 | 
						|
 | 
						|
    VOL="`expr $VOL + 1`"
 | 
						|
  done
 | 
						|
 | 
						|
  echo "$ALLOUTPUT|$PERFOUTPUT"
 | 
						|
 | 
						|
  if [ $CRITICAL -eq 1 ]; then
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif [ $WARNING -eq 1 ]; then
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# Power Supply Status  ----------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "powerstatus" ]; then
 | 
						|
  ALLOUTPUT=""
 | 
						|
  WARNING=0
 | 
						|
  CRITICAL=0
 | 
						|
  PS=1
 | 
						|
  COUNT="$(_snmpgetval .1.3.6.1.4.1.24681.1.4.1.1.1.1.3.1.0)"
 | 
						|
 | 
						|
  if [[ "$COUNT" == 'No Such Object'* ]]; then
 | 
						|
    echo "UNKOWN: Could not get information about powersupplies"
 | 
						|
    exit $EXIT_UNKNOWN
 | 
						|
  fi
 | 
						|
 | 
						|
  while [ "$PS" -le "$COUNT" ]; do
 | 
						|
    STATUS="$(_snmpgetval ".1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.4.$PS")"
 | 
						|
    if [ "$STATUS" -eq 0 ]; then
 | 
						|
      PSSTATUS="OK: GOOD"
 | 
						|
    else
 | 
						|
      PSSTATUS="CRITICAL: ERROR"
 | 
						|
      CRITICAL=1
 | 
						|
    fi
 | 
						|
    ALLOUTPUT="${ALLOUTPUT}Power Supply #$PS - $PSSTATUS"
 | 
						|
    if [ "$PS" -lt "$COUNT" ]; then
 | 
						|
      ALLOUTPUT="$ALLOUTPUT\n"
 | 
						|
    fi
 | 
						|
    PS="`expr $PS + 1`"
 | 
						|
  done
 | 
						|
 | 
						|
  echo "$ALLOUTPUT"
 | 
						|
 | 
						|
  if [ $CRITICAL -eq 1 ]; then
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif [ $WARNING -eq 1 ]; then
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# Fan Status----------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "fans" ]; then
 | 
						|
  ALLOUTPUT=""
 | 
						|
  PERFOUTPUT=""
 | 
						|
  WARNING=0
 | 
						|
  CRITICAL=0
 | 
						|
  FAN=1
 | 
						|
  FANCOUNT="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.14.0)"
 | 
						|
 | 
						|
  if [ "$strWarning" -lt "$strCritical" ]; then
 | 
						|
    echo "Warning threshold ($strWarning) is less than critical threshold ($strCritical) ! -- Are you sure ?"
 | 
						|
  fi
 | 
						|
 | 
						|
  while [ "$FAN" -le "$FANCOUNT" ]; do
 | 
						|
    FANSPEED="$(_snmpgetval ".1.3.6.1.4.1.24681.1.2.15.1.3.$FAN" | sed -E 's/"([0-9]+) ?RPM"/\1/')"
 | 
						|
 | 
						|
    #Performance data
 | 
						|
    if [ $FAN -gt 1 ]; then
 | 
						|
      PERFOUTPUT="$PERFOUTPUT "
 | 
						|
    fi
 | 
						|
    PERFOUTPUT="${PERFOUTPUT}Fan-$FAN=$FANSPEED;$strWarning;$strCritical;;"
 | 
						|
 | 
						|
    if [ "$FANSPEED" == "" ]; then
 | 
						|
      FANSTAT="CRITICAL: $FANSPEED RPM"
 | 
						|
      CRITICAL=1
 | 
						|
    elif [ "$FANSPEED" -le "$strCritical" ]; then
 | 
						|
      FANSTAT="CRITICAL: $FANSPEED RPM"
 | 
						|
      CRITICAL=1
 | 
						|
    elif [ "$FANSPEED" -le "$strWarning" ]; then
 | 
						|
      FANSTAT="WARNING: $FANSPEED RPM"
 | 
						|
      WARNING=1
 | 
						|
    else
 | 
						|
      FANSTAT="OK: $FANSPEED RPM"
 | 
						|
    fi
 | 
						|
 | 
						|
    ALLOUTPUT="${ALLOUTPUT}Fan #${FAN}: $FANSTAT"
 | 
						|
    if [ "$FAN" -lt "$FANCOUNT" ]; then
 | 
						|
      ALLOUTPUT="${ALLOUTPUT}, "
 | 
						|
    fi
 | 
						|
    FAN="`expr $FAN + 1`"
 | 
						|
  done
 | 
						|
 | 
						|
  echo "$ALLOUTPUT|$PERFOUTPUT"
 | 
						|
 | 
						|
  if [ $CRITICAL -eq 1 ]; then
 | 
						|
    exit $EXIT_CRITICAL
 | 
						|
  elif [ $WARNING -eq 1 ]; then
 | 
						|
    exit $EXIT_WARNING
 | 
						|
  else
 | 
						|
    exit $EXIT_OK
 | 
						|
  fi
 | 
						|
 | 
						|
# System Uptime----------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "systemuptime" ]; then
 | 
						|
  EXIT=0
 | 
						|
  netuptime="$(echo "scale=0; $(_snmpget .1.3.6.1.2.1.1.3.0 | sed -r 's/.*\(([0-9]+)\).*/\1/g')/100" | bc -l)"
 | 
						|
  sysuptime="$(echo "scale=0; $(_snmpget .1.3.6.1.2.1.25.1.1.0 | sed -r 's/.*\(([0-9]+)\).*/\1/g')/100" | bc -l)"
 | 
						|
 | 
						|
  if [ -z $sysuptime -o -z $netuptime ]; then
 | 
						|
    OUTPUT="UNKOWN: Could not get uptime information!"
 | 
						|
    EXIT=$EXIT_UNKNOWN
 | 
						|
  fi
 | 
						|
  if [ "$sysuptime" -le "$strCritical" ]; then
 | 
						|
    OUTPUT="CRITICAL: System up since $(date -d @$(( $(date +%s) - $sysuptime )))"
 | 
						|
    EXIT=$EXIT_CRITICAL
 | 
						|
  elif [ "$sysuptime" -le "$strWarning" ]; then
 | 
						|
    OUTPUT="WARNING: System up since $(date -d @$(( $(date +%s) - $sysuptime )))"
 | 
						|
    EXIT=$EXIT_WARNING
 | 
						|
  elif [ "$netuptime" -le "$strCritical" ]; then
 | 
						|
    OUTPUT="$OUTPUT CRITICAL: Network up since $(date -d @$(( $(date +%s) - $netuptime )))"
 | 
						|
    EXIT=$EXIT_CRITICAL
 | 
						|
  elif [ "$netuptime" -le "$strWarning" ]; then
 | 
						|
    OUTPUT="$OUTPUT WARNING: Network up since $(date -d @$(( $(date +%s) - $netuptime )))"
 | 
						|
    if [ ! $EXIT -eq 2 ];then
 | 
						|
      EXIT=$EXIT_WARNING
 | 
						|
    fi
 | 
						|
  else
 | 
						|
    OUTPUT="OK: System up since $(date -d @$(( $(date +%s) - $sysuptime ))) - Network up since $(date -d @$(( $(date +%s) - $netuptime )))"
 | 
						|
  fi
 | 
						|
 | 
						|
  PERFDATA="| system_uptime=${sysuptime}s;$strWarning;$strCritical;; network_uptime=${netuptime}s;$strWarning;$strCritical;;"
 | 
						|
 | 
						|
  echo "$(_trim "$OUTPUT $PERFDATA")"
 | 
						|
  exit $EXIT
 | 
						|
 | 
						|
# System Info------------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
elif [ "$strPart" == "sysinfo" ]; then
 | 
						|
  model="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.12.0 | sed 's/^"\(.*\).$/\1/')"
 | 
						|
  hdnum="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.10.0)"
 | 
						|
  VOLCOUNT="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.16.0)"
 | 
						|
  lunCOUNT="$(_snmpwalk .1.3.6.1.4.1.24681.1.4.1.1.2.1.10.2.1.2 | wc -l)"
 | 
						|
  name="$(_snmpgetval .1.3.6.1.4.1.24681.1.2.13.0 | sed 's/^"\(.*\)$/\1/')"
 | 
						|
  firmware="$(_snmpgetval .1.3.6.1.2.1.47.1.1.1.1.9.1 | sed 's/^"\(.*\)$/\1/')"
 | 
						|
 | 
						|
  echo "NAS $name, Model $model, Firmware $firmware, Max HD number $hdnum, No. Volume $VOLCOUNT, No. iSCSI LUNs $lunCOUNT"
 | 
						|
  exit $EXIT_OK
 | 
						|
 | 
						|
#----------------------------------------------------------------------------------------------------------------------------------------------------
 | 
						|
else
 | 
						|
  echo "Unknown Part!" && exit $EXIT_UNKNOWN
 | 
						|
fi
 | 
						|
exit $EXIT_OK
 |