This commit is contained in:
Jonny007-MKD 2020-02-08 17:36:27 +00:00
parent 75bad78233
commit d97b8623eb
1 changed files with 23 additions and 11 deletions

View File

@ -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