From d97b8623ebe89ac099a3ec982bac3429f516dba7 Mon Sep 17 00:00:00 2001 From: Jonny007-MKD Date: Sat, 8 Feb 2020 17:36:27 +0000 Subject: [PATCH] Fixes --- check_mdstat.sh | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/check_mdstat.sh b/check_mdstat.sh index 9050cf6..597661a 100755 --- a/check_mdstat.sh +++ b/check_mdstat.sh @@ -13,12 +13,19 @@ if [ $# -lt 1 -o -z "$1" ]; then echo "ERROR: pass raid name as argument" exit 1; fi + +INPUT="/proc/mdstat" +DEBUG=false while [[ $# -gt 0 ]]; do case $1 in -r|--raid) TARGET_RAID_NAME="$2";; + -i|--input) INPUT="$2";; + -d|--debug) DEBUG=true;; -?|--help) echo "Check /proc/mdstat. Arguments:" echo "--raid NAME: Raid name, e.g. md0" + echo "--input FILE: Read from this file. Default: /proc/mdstat" + exit 0 ;; esac shift @@ -30,8 +37,14 @@ if [ -z "$TARGET_RAID_NAME" ]; then fi function log { - local x= - #echo " > $@" + if $DEBUG; then + echo " > $@" + fi +} +function logLine { + if $DEBUG; then + echo " : $@" + fi } CURRENT_RAID= # string @@ -82,7 +95,7 @@ function parseConfigStatusLine { # This function is called for 1st line after the raid definition line # It parses the SIZE_IN_BLOCKS local line="$1" - line="${line:6}" # trim left + line=$(echo $line) # trim left SIZE_IN_BLOCKS=${line%% *} local lastWord=${line##* } # Get the last word @@ -141,7 +154,7 @@ function printOutputAndExit { if [ -n "$RECOVERY_PROGRESS" ]; then result="WARNING" if [ -n "$info" ]; then info="$info. "; fi - info="${info}Recovering: $RECOVERY_PROGRESS $RECOVERY_INFO" + info="${info}Recovering: progress=$RECOVERY_PROGRESS% $RECOVERY_INFO" fi if [ "$STATE" != "active" -a "$STATE" != "started" ]; then @@ -153,7 +166,7 @@ function printOutputAndExit { if [ $BAD_DEVICES -gt 0 ]; then result="CRITICAL" if [ -n "$info" ]; then info="$info. "; fi - info="${info}Missing $NUM_DEVICES devices" + info="${info}Missing $BAD_DEVICES of $NUM_DEVICES devices" fi echo -n "$result" @@ -167,7 +180,7 @@ function printOutputAndExit { echo -n " 'num devices'=$NUM_DEVICES" echo -n " 'num bad devices'=$BAD_DEVICES;;1;0;$NUM_DEVICES" if [ -n "$RECOVERY_PROGRESS" ]; then - echo -n " 'recovery progress'=$RECOVERY_PROGRESS%;0.1;;0;100" + echo -n " 'recovery progress'=$RECOVERY_PROGRESS%;0;;0;100" fi echo @@ -182,7 +195,7 @@ function printOutputAndExit { HAD_TARGET_RAID=0 while IFS= read -r line; do - #echo " : $line" + logLine "$line" setCurrentRaid "$line" @@ -190,15 +203,14 @@ while IFS= read -r line; do case $HAD_TARGET_RAID in 0) setStateAndDevicesAndLevel "$line";; 1) parseConfigStatusLine "$line";; - 2) parseBitmapOrRecoveryLine "$line";; - 3) parseRecoveryLine "$line";; + *) parseBitmapOrRecoveryLine "$line";; esac HAD_TARGET_RAID=$(($HAD_TARGET_RAID+1)) elif [ $HAD_TARGET_RAID -gt 0 ]; then printOutputAndExit fi -done < /proc/mdstat +done < $INPUT -echo "CRITICAL: RAID $TARGET_RAID_NAME not found in mdstat" +echo "CRITICAL: RAID $TARGET_RAID_NAME not found in $(basename $INPUT)" exit 2