#!/bin/bash
usage() {
        cat << EOF
Usage:  check_disk_status
        [-N] ZFS Pool name (required)
EOF
        exit 0
}
getdev() {
i=0
j=1
DEVICES=$((zpool status $POOL_NAME | grep - | grep -v raid | awk '{print $1}' | wc -l) 2>/dev/null)
while [ $i -lt $DEVICES ];do
	DEVICE[$i]=$(zpool status $POOL_NAME | grep - | grep -v raid | awk -v j=$j 'NR==j{print $1}')
	let i=i+1
	let j=j+1
done
}
getstate() {
i=0
j=1
while [ $i -lt $DEVICES ];do
	STATE[$i]=$(zpool status $POOL_NAME | grep - | grep -v raid | awk -v j=$j 'NR==j{print $2}')
	let i=i+1
	let j=j+1
done
}
getoffline() {
i=0
j=0
for state in ${STATE[*]};do
	if [ $state == "OFFLINE" ];then
		offlinedev[$j]="${DEVICE[$i]}: OFFLINE"
		let j=j+1
	fi
	let i=i+1
done
}
getunavailable() {
i=0
j=0
for state in ${STATE[*]};do
	if [ $state == "UNAVAIL" ];then
		unavaildev[$j]="${DEVICE[$i]}: UNAVAIL"
		let j=j+1
	fi
	let i=i+1
done
}
getfaulted() {
i=0
j=0
for state in ${STATE[*]};do
	if [ $state == "FAULTED" ];then
		faulteddev[$j]="${DEVICE[$i]}: FAULTED"
		let j=j+1
	fi
	let i=i+1
done
}

while getopts 'N:h' OPTION; do
        case ${OPTION} in
        N)
                POOL_NAME=${OPTARG}
        ;;
        h)
                usage
        ;;
        esac
done

if [ $# -eq 0 ];then
        usage
fi

getdev
getstate
getoffline
getunavailable
getfaulted

if [ ${#DEVICE[@]} -eq 0 ];then
        echo "UNKNOWN: Unable to get drives, $POOL_NAME is not present in system"
        exit 3
elif [ ${#offlinedev[@]} -eq 0 ] && [ ${#unavaildev[@]} -eq 0 ] && [ ${#faulteddev[@]} -eq 0 ];then
        echo "OK: All drives ONLINE"
        exit 0
elif [ ${#offlinedev[@]} -gt 0 ];then
        echo "WARNING:$(zpool status -x $POOL_NAME | grep status | awk NR==1 | cut -d ":" -f2)"
        printf '%s\n' "${offlinedev[@]}"
        exit 1
elif [ ${#getunavailable[@]} -gt 0 ] || [ ${#getfaulted[@]} -gt 0 ];then
        echo "CRITICAL:$(zpool status -x $POOL_NAME | grep status | awk NR==1 | cut -d ":" -f2)"
        printf '%s\n' "${unavaildev[@]}"
        exit 2
else
        echo "UNKNOWN: sumpins up"
        exit 3
fi