flipje

check_hw_ipmi_linux

Jan 26th, 2012
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.28 KB | None | 0 0
  1. #!/bin/bash
  2. # +-----------------------------------------------------------------------------------------+
  3. # |  Dit nrpe script checked de IPMI console voor fans en temp status                       |
  4. # |  Geschreven voor SuperMicro, Prolly Universeel                                          |
  5. # | Januari 2012 flip hess [email protected]                                              |
  6. # +-----------------------------------------------------------------------------------------+
  7.  
  8. # Global variables:
  9.  
  10. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  11. SCRIPT_PATH="${0}"
  12. ARGS="${#}"
  13. ARG1="${1}"
  14. ARG2="${2}"
  15. ARG3="${3}"
  16.  
  17. STATE_OK="0"
  18. STATE_WARNING="1"
  19. STATE_CRITICAL="2"
  20. STATE_UNKNOWN="3"
  21.  
  22. # Functions:
  23.  
  24.   # exit function
  25.   function die()
  26.   {
  27.     # output
  28.     echo -e "Error in ${SCRIPT_PATH}:\n${1}"
  29.  
  30.     # return state unknown
  31.     exit ${STATE_UNKNOWN}
  32.   }
  33.  
  34.   # Shows usage function.
  35.   function fShowUsage()
  36.   {
  37.     echo -e "Usage: ${SCRIPT_PATH} [fans|temp <warn> <crit> ]\n
  38.    help     Show Usage
  39.    fans     Check IPMI FAN status
  40.    temp     Check IPMI TEMP status\n
  41.    this plugin is using the installer
  42.    Check IPMI on Linux - [email protected]\n\nVersie 1.0"
  43.  
  44.     exit ${STATE_UNKNOWN}
  45.   }
  46.  
  47.   # function FANS
  48.   function fRunFans()
  49.   {
  50.      #check state file
  51.      [ -s /tmp/ipmi-fans ] || \
  52.    { fCheckReset && { echo "WARNING - check has been reset - a new /tmp/ipmi-fans error state file is created" ; exit "${STATE_WARNING}"; };}
  53.  
  54.      # get info
  55.      local TEMP="$(mktemp)"
  56.      { sudo /usr/bin/ipmitool sdr list all | grep -E '(FAN\ [0-9]\ )'  | sed -e 's/|\ [ 0-9 ]\+.\+RPM//g' -e 's/\ \+//g'  > ${TEMP} ; } || \
  57.       die "Failed to Get IPMI Fans info!"
  58.  
  59.      local TOTAL="$( cat "${TEMP}" |grep '|ok' | wc -l )"
  60.      local OLDTOTAL="$( cat /tmp/ipmi-fans | grep '|ok' | wc -l )"
  61.  
  62.      local DELTA="$( echo "$(( ${TOTAL} - ${OLDTOTAL} ))" | tr -d '-')"
  63.  
  64.     # diff
  65.     DIFFS="$( diff "${TEMP}" "/tmp/ipmi-fans" | grep -E '(<|>)' | sed -e 's/^>/Old:/g' -e 's/^</New:/g' -e 's/\n/ /g' | paste -s -d ' ' )"
  66.  
  67.     # make results
  68.     if [ -z "${DIFFS}" ] ; then
  69.       rm ${TEMP}
  70.       echo -e "ALL OK: FAN Status did not change - Total fans: ${TOTAL}"
  71.       exit ${STATE_OK}
  72.     else
  73.       echo -e "CRITICAL: Fan Status has changed: ${DELTA} Fan(s) changed!  Total fans OK: ${TOTAL}"
  74.       echo "${DIFFS}"
  75.       exit ${STATE_CRITICAL}
  76.     fi
  77.  
  78.     return 0
  79.  }
  80.  
  81.  
  82.  # function TEMP
  83.  function fRunTemp()
  84.  {
  85.   local WARN="${ARG2}"
  86.   local CRIT="${ARG3}"
  87.   # get systemp
  88.   HEAT="$( /usr/bin/ipmitool sdr list all | grep 'System Temp' | awk -F'|' '{print $2}' | tr -d "a-zA-Z " )"
  89.  
  90.   # make results
  91.   if [ ${HEAT} -lt ${WARN} ] ; then
  92.      { echo -e "OKAY - System  Temperture is ${HEAT} degrees Celsius" ; exit ${STATE_OK}; }
  93.   elif [ ${HEAT} -gt ${WARN} ] && [ ${HEAT} -lt ${CRIT} ] ; then
  94.      { echo -e "WARNING - System Temperture is higher than ${WARN} degrees Celsius: Temperture is now ${HEAT} degrees Celsuis!\n${HEAT}" ; exit ${STATE_WARNING}; }
  95.   elif [ ${HEAT} -gt ${WARN} ] && [ ${HEAT} -gt ${CRIT} ] ; then
  96.      { echo -e "CRITICAL - System Temperture is higher than ${CRIT} degrees Celsius: Temperture is now ${HEAT} degrees Celsius!\n${HEAT}" ; exit ${STATE_CRITICAL}; }
  97.   else
  98.      { echo -e "UNKNOWN! - This plugin SUCKS! - Please check the code for debugging..." ; exit ${STATE_UNKNOWN}; }
  99.   fi
  100.  
  101.  }
  102.  
  103.  # resets
  104.  function fCheckReset()
  105.  {
  106.    # Reset state old file
  107.    if [ ! -f /tmp/ipmi-fans ] ; then
  108.       touch /tmp/ipmi-fans
  109.       sudo /usr/bin/ipmitool sdr list all | grep -E '(FAN\ [0-9]\ )'  | sed -e 's/|\ [ 0-9 ]\+.\+RPM//g' -e 's/\ \+//g'  > /tmp/ipmi-fans
  110.    fi
  111.  
  112.    return 0
  113.  }
  114.  
  115.  # The main function.
  116.  function fMain()
  117.  {
  118.    # script o depends on:
  119.    [ -x /usr/bin/ipmitool ] || die "This script depends on IPMITOOL, please install it: \"apt-get install ipmitool\""
  120.  
  121.    # check if accessible
  122.    if ( ipmitool | grep -qE '(Unable|Could not open device)' ) ;  then
  123.     { echo -e "UNKNOWN! - Unable to open BMC Sensors for reading!" ; exit ${STATE_UNKNOWN}; }
  124.    fi
  125.  
  126.     #get options dmv case
  127.      case ${ARG1} in
  128.        # check fannekes
  129.        fans)
  130.          # check arguments
  131.          [ ${ARGS} = 1 ] || fShowUsage
  132.          # run check
  133.          fRunFans
  134.          ;;
  135.        # check temperture
  136.        temp)
  137.          # check arguments
  138.          [ ${ARGS} = 3 ] || fShowUsage
  139.          { CHECK1="$( echo ${ARG2} | tr -d "[:digit:] ")" && [ -z ${CHECK1} ]; } || die "Please supply only numbers as a warning or critical value!"
  140.          { CHECK2="$( echo ${ARG3} | tr -d "[:digit:] ")" && [ -z ${CHECK2} ]; } || die "Please supply only numbers as a warning or critical value!"
  141.          { [ ${ARG2} -gt 0 ] && [ ${ARG2} -lt 100 ]; }       || die "You Suck! Please supply \"reasonable\" values for temperture!"
  142.          { [ ${ARG3} -gt 0 ] && [ ${ARG3} -lt 100 ]; }       || die "You Suck! Please supply \"reasonable\" values for temperture!"
  143.          # run check
  144.          fRunTemp
  145.          ;;
  146.        # de rest van de meuk
  147.        help)
  148.          fShowUsage
  149.          ;;
  150.        *)
  151.          fShowUsage
  152.          ;;
  153.      esac
  154.  
  155.    return 0
  156.  }
  157.  
  158. # Start the program:
  159.  fMain
  160.  
  161. # Exit with previous return code:
  162.  exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment