#!/usr/bin/perl

use strict;
use warnings;

use FindBin;
use lib "$FindBin::Bin/../../lib";
use Wigo::Probe qw/:all/;

###
# DEFAULT CONFIG
###

my $conf = {
    'lsiutil'       => '/usr/bin/lsiutil',
    'volumes'       => [ 1 ],
};

init( config => $conf );

if ( ! ( config->{'volumes'} and ref(config->{'volumes'}) eq 'ARRAY' and scalar @{ config->{'volumes'} } > 0 ) )
{
    message "no lsi volume to check";
    output 13;
}

my $lsiutil = config->{'lsiutil'};
if( ! -x $lsiutil )
{
    raise 500;
    message "lsiutil $lsiutil is not executable";
    output 13;
}

my @messages;
foreach my $volume ( @{config->{'volumes'}} )
{
    debug "Check raid volume $volume";
    my $msg;
    my @status = `$lsiutil -p$volume -a21,1,0,0,0`;
    foreach my $line ( @status )
    {
        debug $line;

        if ( my ($state) = $line =~ /Volume State:\s+(.*)$/ )
        {
            detail->{"volume$volume"}->{'state'} = $state;
            $msg = "Volume $volume state is $state";
            if( $state ne 'optimal, enabled' )
            {
                if ( $state =~ /resync in progress/ )
                {
                    raise 200;
                }
                else
                {
                    raise 300;
                }
            }
        }

        if ( my ($resyncPct) = $line =~ /Resync Progress:.*,\s+(\d+)%/ )
        {
            detail->{"volume$volume"}->{'resync'} = "$resyncPct%";
            $msg .= " $resyncPct%"
        }
    }

    if ( ! $msg )
    {
        raise 500;
        $msg = "Volume $volume state is unknown";
    }

    push @messages, $msg;
}

message join ' , ', @messages;
output 0;