Fixes
This commit is contained in:
		
							parent
							
								
									75bad78233
								
							
						
					
					
						commit
						d97b8623eb
					
				
					 1 changed files with 23 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue