Changeset 6906447522cf87b345c787f46883eb3c1503cd83

Show
Ignore:
Timestamp:
03/24/09 15:11:27 (9 years ago)
Author:
Mark Harrison <mark@omniti.com>
git-committer:
Mark Harrison <mark@omniti.com> 1237907487 +0000
git-parent:

[f3a80d52b14c61ed1caf268e2a22ea6a9b90a2e4]

git-author:
Mark Harrison <mark@omniti.com> 1237907487 +0000
Message:

Treat a zpool that needs an upgrade as WARNING or OK (configurable

git-svn-id: https://labs.omniti.com/resmon/trunk@164 8c0face9-b7db-6ec6-c4b3-d5f7145c7d55

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lib/Resmon/Module/ZPOOLERRS.pm

    rae22e3b r6906447  
    1111# Sample configuration: 
    1212# ZPOOLERRS { 
     13#   zpools : warn_on_upgrade => yes 
     14# } 
     15 
     16# Another sample configuration, which ignores zpool upgrade requests 
     17# ZPOOLERRS { 
    1318#   zpools : noop 
    1419# } 
     
    1722    my $arg = shift; 
    1823    my $unit = $arg->{'object'}; 
     24    # Do we warn on 'zpool needs an upgrade', or just leave it OK? 
     25    my $warn_on_upgrade = $arg->{'warn_on_upgrade'} || "no"; 
    1926    my $output = cache_command( 
    2027        "zpool status -x", 600); 
    2128    if($output) { 
    22             my $errstring = ""
     29            my %errs = ()
    2330            my $currpool = ""; 
     31            my $status = "OK"; 
    2432            foreach my $line (split(/\n/, $output)) { 
    2533                if ($line =~ /(all pools are healthy)/) { 
     34                    # If everything is OK, we don't need to go any further 
    2635                    return "OK", $1; 
    2736                } 
     
    3140                } elsif ($line =~ /state: (.+)$/) { 
    3241                    # Pool state 
    33                     $errstring .= "$currpool:$1 "; 
     42                    $errs->{$currpool} .= "$1 "; 
     43                    if ($1 ne 'ONLINE') { 
     44                        $status = "BAD"; 
     45                    } 
     46                } elsif ($line =~ 
     47                    /The pool is formatted using an older on-disk format/) { 
     48                    # Detect if the error is just that a pool needs upgrading. 
     49                    $errs->{$currpool} .= "- needs upgrade "; 
     50                    if ($warn_on_upgrade eq "yes" && $status != "BAD") { 
     51                        $status = "WARNING"; 
     52                    } 
    3453                } elsif ($line =~ 
    3554                    /([a-z0-9]+)\s+([A-Z]+)\s+(\d+)\s+(\d+)\s+(\d+)/) { 
    3655                    # Pool errors 
    3756                    if ($3 != 0 || $4 != 0 || $5 != 0) { 
    38                         $errstring .= "- $1:$2 w/Errs: R:$3 W:$4 Chk:$5 "; 
     57                        $errs->{$currpool} .= 
     58                            "- $1:$2 w/Errs: R:$3 W:$4 Chk:$5 "; 
     59                        $status = "BAD"; 
    3960                    } 
    4061                } 
    4162            } 
     63            # Generate the status 
     64            my $errstring = ""; 
     65            while (my ($k, $v) = each %$errs) { 
     66                # $v should always contain a trailing space 
     67                chop($v); 
     68                $errstring .= "$k: $v"; 
     69                $errstring .= ", "; 
     70            } 
     71            # Remove the trailing comma and space 
    4272            chop($errstring); 
    43             return "BAD", $errstring; 
     73            chop($errstring); 
     74            return $status, $errstring; 
    4475    } 
    4576    return "BAD", "no data"