Advertisement
flipje

check_areca_raid

Jan 26th, 2012
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.73 KB | None | 0 0
  1. #!/bin/bash
  2. # +-----------------------------------------------------------------------------------------+
  3. # |  Dit script checked de raid status van Areca RAID kaarten op Ubuntu/Debian              |
  4. # |  Nagios script                                                                          |
  5. # | Januari 2012 flip hess flip@nerdmetbril.nl                                              |
  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. ARG3="${3}"
  15.  
  16. STATE_OK="0"
  17. STATE_WARNING="1"
  18. STATE_CRITICAL="2"
  19. STATE_UNKNOWN="3"
  20.  
  21. # Functions:
  22.  
  23.   # exit function
  24.   function die()
  25.   {
  26.     # output
  27.     echo -e "Error in ${SCRIPT_PATH}:\n ${1}"
  28.  
  29.     # return state unknown
  30.     exit ${STATE_UNKNOWN}
  31.   }
  32.  
  33.   # Shows usage function.
  34.   function fShowUsage()
  35.   {
  36.     echo -e "Usage: ${SCRIPT_PATH} [status|event|help]\n
  37.    help     Show Usage
  38.    status    Check RAID status\n
  39.    event     Check RAID event\n
  40.    Install this plugin using the installer:\n
  41.    ./ipmi-raid-installer.sh YES\"\n
  42.    Check Areca on Linux - flip@nerdmetbril.nl\n\nVersie 1.0"
  43.  
  44.     exit ${STATE_UNKNOWN}
  45.   }
  46.  
  47.   # function status
  48.   function fRunStatus()
  49.   {
  50.    # get cli output
  51.    OUTPUT="$( sudo /usr/local/bin/cli vsf info vol=1 | grep -Ev '(===|GuiErrMsg|Volume Set Information)' )" || die "Failed to get CLI OUTPUT"
  52.  
  53.    # check state
  54.    if ( echo ${OUTPUT} | grep -qE 'Volume.+State.+Normal' ) ; then
  55.      local STATE="1"
  56.      local STMSG="Volume State is Normal"
  57.    else
  58.      local STATE="0"
  59.      local STMSG="$( echo "${OUTPUT}" | grep -E 'Volume.+State.+:' )"
  60.    fi
  61.  
  62.    # check members
  63.    if ( echo "${OUTPUT}" | grep -qE 'Member.Disks.+:.+2' ) ; then
  64.      local MEMBER="1"
  65.      local MBMSG="Member Disks is 2"
  66.    else
  67.      local MEMBER="0"
  68.      local MBMSG="$( echo "${OUTPUT}" | grep 'Member.+Disks.+:' )"
  69.    fi
  70.  
  71.    # make results
  72.    if [ ${STATE} = 1 ] && [ ${MEMBER} = 1 ] ; then
  73.       { echo -e "OKAY ${STMSG} and ${MBMSG}\n |\n${OUTPUT}" ; exit ${STATE_OK}; }
  74.    elif [ ${STATE} = 0 ] && [ ${MEMBER} = 0 ] ; then
  75.       { echo -e "CRITICAL - NOK: ${STMSG} - and NOK: ${MBMSG}\n |\n${OUTPUT}" ; exit ${STATE_CRITICAL}; }
  76.    elif [ ${STATE} = 1 ] && [ ${MEMBER} = 0 ] ; then
  77.       { echo -e "CRITICAL - Volume State is OKAY But Member Disks: ${MBMSG}\n |\n${OUTPUT}" ; exit ${STATE_CRITICAL}; }
  78.    elif [ ${STATE} = 0 ] && [ ${MEMBER} = 1 ] ; then
  79.       { echo -e "CRITICAL - Member Disks is OKAY but State: ${STMSG}\n |\n${OUTPUT}" ; exit ${STATE_CRITICAL}; }
  80.    else
  81.       { echo -e "WARNING - This Check is WONKY! BARK KRAK STUK!" ; exit ${STATE_WARNING}; }
  82.    fi
  83.  
  84.   }
  85.  
  86.   # function event
  87.   function fRunEvent()
  88.   {
  89.    #check state file
  90.    [ -f /tmp/raid-events ] || \
  91.    { fCheckReset && { echo "WARNING - check has been reset - a new /tmp/raid-events error state file is created" ; exit "${STATE_WARNING}"; };}
  92.  
  93.    # get info
  94.    local TEMP="$(mktemp)"
  95.    { sudo /usr/local/bin/cli event info | grep -Ev '(====|GuiErrMsg|Date-Time|Device)' > ${TEMP} ; } || die "Failed to Get event info!"
  96.  
  97.    local TOTAL="$( cat "${TEMP}" | wc -l )"
  98.    local OLDTOTAL="$( cat /tmp/raid-events | wc -l )"
  99.    local DELTA="$(( ${TOTAL} - ${OLDTOTAL} ))"
  100.    local LAST="$( cat "${TEMP}" | head -1 )"
  101.  
  102.    # diff
  103.    DIFFS="$( diff "${TEMP}" "/tmp/raid-events" |grep -E '(<|>)'  |sed -e 's/^>/missing event:/g;s/^</event:/g' )"
  104.  
  105.    # make results
  106.    if [ -z "${DIFFS}" ] ; then
  107.      rm ${TEMP}
  108.      echo -e "ALL OK: ${TOTAL} known RAID events are given \nLast event was: ${LAST}"
  109.      exit ${STATE_OK}
  110.   else
  111.      echo -e "CRITICAL: ${DELTA} new RAID events given!\nLast event was: ${LAST} - tmp: ${TEMP}"
  112.      echo "${DIFFS}"
  113.      exit ${STATE_CRITICAL}
  114.    fi
  115.  
  116.  
  117.   }
  118.  
  119.   # resets
  120.   function fCheckReset()
  121.   {
  122.     # Reset state old file
  123.     if [ ! -f /tmp/raid-events ] ; then
  124.        touch /tmp/raid-events
  125.        sudo cli event info | grep -Ev '(====|GuiErrMsg|Date-Time|Device)' > /tmp/raid-events
  126.     fi
  127.  
  128.     return 0
  129.   }
  130.  
  131.  
  132.  
  133.  
  134.   # The main function.
  135.   function fMain()
  136.   {
  137.     # script o depends on:
  138.     [ -x /usr/local/bin/cli ] || die "This script depends on CLI, please install it using the installer ipmi-raid-installer.sh"
  139.  
  140.     # check for arguments:
  141.     [ ${ARGS} = 1 ] || fShowUsage
  142.  
  143.     # Do the Magic:
  144.      #get options and set vars
  145.       case ${ARG1} in
  146.  
  147.         status)
  148.           fRunStatus
  149.           ;;
  150.         event)
  151.           fRunEvent
  152.           ;;
  153.         help)
  154.           fShowUsage
  155.           ;;
  156.         *)
  157.           fShowUsage
  158.           ;;
  159.       esac
  160.   }
  161.  
  162.  # Start the program:
  163.   fMain
  164.  
  165.  # Exit with previous return code:
  166.   exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement