#!/bin/sh
# Script to parse and rewrite the hpacucli output so we can feed it to Zabbix.
# sven@timegate.de - 2010-05-13

#set -x
VERSION=0.5

cleanup() {
    if [ -e $clog ]; then
        rm $clog
    fi
}

check_ok() {
    if [ $rawv -eq 1 ]; then
        echo 0
    else
        echo 1
    fi
}

controllerstat() {
    sudo hpacucli ctrl all show status > $clog

    #Check if another hpacucli has been active, sleep and try again
    if [ $(grep -c '^Another' $clog) -eq 1 ]; then
        sleep 10
        controllerstat
        cleanup
        exit
    fi

    constat=1
    chachestat=1
    battstat=1

    #Check Controller overall status
    rawv=$(grep Controller $clog|awk '{print $3}'|grep -c OK)
    constat=$(check_ok)

    #Check Cache Status
    rawv=$(grep Cache $clog|awk '{print $3}'|grep -c OK)
    cachestat=$(check_ok)

    #Check for a battery and it's status if available
    if [ $(grep -c Battery $clog) -eq 0 ]; then
        battstat=0
    else
        rawv=$(grep Battery $clog|awk '{print $3}'|grep -c OK)
        battstat=$(check_ok)
    fi

    #Calculate overall status and return it
    allstat=$(( $constat + $cachestat + $battstat ))
    if [ $allstat -eq '0' ]; then
        echo 0
    else
        echo 1
    fi
}

diskstat() {
    sudo hpacucli ctrl slot=0 pd all show > $clog

    #Check if another hpacucli has been active, sleep and try again
    if [ $(grep -c '^Another' $clog) -eq 1 ]; then
        sleep 10
        diskstat
        cleanup
        exit
    fi

    drivecount=$(grep -c physicaldrive $clog)
    driveok=$(grep -c OK $clog)

    if [ $driveok -eq $drivecount ]; then
        echo 0
    else
        echo 1
    fi
}


### Main script ###
while getopts ":cdh" opt; do
    case $opt in
        c)
        #Create a save tempfile with mktemp
        clog=$(mktemp /var/tmp/clog.XXXXXXXXXXXX)
        controllerstat
        cleanup
        ;;
        d)
        #Create a save tempfile with mktemp
        clog=$(mktemp /var/tmp/clog.XXXXXXXXXXXX)
        diskstat
        cleanup
        ;;
        h)
        echo "HP disk and controller check version $VERSION"
        echo "Usage:"
        echo "-c Outputs controler overall status as 0 or 1"
        echo "-d Outputs disk overall status as 0 or 1"
        echo "-h Print this help"
        echo "Output legend: 0 equals OK, 1 indicates something went wrong"
        exit 1
        ;;
        \?)
        echo "Unknown option: -$OPTARG"
        echo "Try -h to get help"
        exit 1
        ;;
    esac
done
