Hi Betsy<br><br>Thanks very much for that. <br>Looking at it, I think you knew a lot more perl then than I know now :-)<br>Even if it was the worst script you ever wrote, it's better than what I have now, which is nothing. <br>
<br>Thanks again.<br><br>Cheers<br>    Vernon<br><br><div class="gmail_quote">On 20 September 2012 23:48, Betsy Schwartz <span dir="ltr"><<a href="mailto:betsy.schwartz@gmail.com" target="_blank">betsy.schwartz@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">There's this rather crude script<br>
I learned much more perl since I wrote it and looking at it now<br>
there's a bunch of stuff I want to fix, but you can play with it<br>
(I am going to clean it up, and add custom per-device storage levels,<br>
ask me in a while if I've done that :-)<br>
<br>
Assumes youv'e set up sshkey access for xymon user -> "nasadmin" on your devices<br>
<br>
#!/usr/bin/perl<br>
#<br>
# Script to test EMC storage devices in xymon<br>
#<br>
#  2011/11/08  1.0   - betsys - initial install<br>
#<br>
#<br>
use strict;<br>
use warnings;<br>
use DBI;<br>
use Time::Local;<br>
<br>
#use Net::SSH::Perl;<br>
<br>
use constant false => 0;<br>
use constant true  => 1;<br>
<br>
my $REDLEVEL    = 95;<br>
my $YELLOWLEVEL = 90;<br>
<br>
my $REDDOT    = '<IMG SRC="/xymon/gifs/red-recent.gif">';<br>
my $YELLOWDOT = '<IMG SRC="/xymon/gifs/yellow-recent.gif">';<br>
<br>
#-------- Configure<br>
my $BBHOME    = ENV{BBHOME};     # Path to the BBServer software.<br>
my $BBTMP     = "$BBHOME/tmp";<br>
my $BB         = $ENV{'BB'};<br>
my $BBDISP     = $ENV{'BBDISP'};<br>
my $BBDISPLAYS = $ENV{'BBDISPLAYS'};<br>
my $TESTNAME  = "temp";                        # Test name as<br>
displayed on the main page (bb.html).<br>
<br>
#-------- End Configure<br>
<br>
my $COLOR     = "clear";<br>
my $BBTMPLOG  = "$BBHOME/tmp/TESTNAME.tmp";<br>
my $BBSTATLOG = "$BBHOME/tmp/TESTNAME";<br>
my $epoch     = time();<br>
my $date      = localtime($epoch);<br>
my $status    = "clear";<br>
my $gored     = false;<br>
my $goyellow  = false;<br>
my $nasadmin   = "nasadmin";<br>
<br>
my $server = "";    # we're using strict<br>
my @serverlist = ( "<a href="http://server1.example.com" target="_blank">server1.example.com</a>", "<a href="http://server2.example.com" target="_blank">server2.example.com</a>",<br>
"<a href="http://server3.example.com" target="_blank">server3.example.com</a>" );<br>
<br>
foreach $server (@serverlist)<br>
{<br>
    test_uptime($server);<br>
    test_storage($server);<br>
    test_replication($server);<br>
<br>
}<br>
<br>
sub test_replication {<br>
    my ($serv) = @_;<br>
    $COLOR    = "green";<br>
    $gored    = false;<br>
    $goyellow = false;<br>
    my @warnings = ("\n");<br>
<br>
    my $TESTNAME = "nas_rep";    # Test name as displayed on the main<br>
page (bb.html).<br>
    my $nascmd = "export NAS_DB=/nas;/nas/bin/nas_replicate -list";<br>
    my $sshcmd = "ssh $nasadmin\@$serv \"$nascmd\"";<br>
<br>
    my @output   = `$sshcmd  >/tmp/$serv.nas_replicate.out `;<br>
    my @dataline = `cat /tmp/$serv.nas_replicate.out`;<br>
<br>
    open( FH, "< /tmp/$serv.nas_replicate.out" );<br>
    while (<FH>)<br>
    {<br>
        my @line = (split);<br>
        next if ( @line == 0 );    # skip blanks<br>
        next unless ( $line[1] =~ /filesystem/ );<br>
        if ( $line[5] ne "OK" )<br>
        {<br>
            $goyellow = true;<br>
            push( @warnings, "Problem with replication @line \n" );<br>
        }<br>
    }<br>
    if    ( $gored == true )    { $COLOR = "red"; }<br>
    elsif ( $goyellow == true ) { $COLOR = "yellow"; }<br>
    else<br>
    {<br>
        $COLOR = "green";<br>
        push( @warnings, "Replication looks OK on $serv\n\n" );<br>
    }<br>
<br>
    my $bbcmd = "$BB $BBDISPLAY 'status+2h $serv.$TESTNAME $COLOR<br>
$date \n @warnings \n @dataline' ";<br>
<br>
    #    print "command is";<br>
    #    print $bbcmd;<br>
    #    print "\n";<br>
<br>
    system("$bbcmd");<br>
<br>
}<br>
<br>
sub test_uptime {<br>
    my ($serv) = @_;<br>
    $COLOR = "green";<br>
    my $TESTNAME = "uptime";                                        #<br>
Test name as displayed on the main page (bb.html).<br>
    my $nascmd   = "export NAS_DB=/nas;/nas/bin/server_uptime ALL";<br>
    my $sshcmd   = "ssh nasadmin\@$serv \"$nascmd\"";<br>
<br>
    #   my @output = `$sshcmd  >/tmp/$serv.uptime.out 2 >& /dev/null`;<br>
    my @output = `$sshcmd  >/tmp/$serv.uptime.out `;<br>
<br>
    #   print "$server uptime output is  @output \n";<br>
    open( FH, "< /tmp/$serv.uptime.out" );<br>
    while (<FH>)<br>
    {<br>
        $COLOR = "red" if /fault/;<br>
    }<br>
<br>
    my @dataline = `cat /tmp/$serv.uptime.out`;<br>
    my $bbcmd    = "$BB $BBDISPLAY 'status+2h $serv.$TESTNAME $COLOR<br>
$date \n @dataline' ";<br>
<br>
    #    print "command is";<br>
    #    print $bbcmd;<br>
    #    print "\n";<br>
    system("$bbcmd");<br>
}<br>
<br>
sub test_storage {<br>
    my ($serv) = @_;<br>
    $COLOR    = "green";<br>
    $gored    = false;<br>
    $goyellow = false;<br>
    my @warnings = ("\n");<br>
    my $TESTNAME = "storage";    # Test name as displayed on the main<br>
page (bb.html).<br>
    my $scratch  = "";<br>
    my ( $fs, $kb, $used, $avail, $cap, $mount );<br>
<br>
    my $nascmd =<br>
      "export NAS_DB=/nas;/nas/bin/server_df ALL |grep -v iscsi| grep<br>
-v root_ | grep -v ckpt | grep -v automaticND";<br>
    my $sshcmd   = "ssh nasadmin\@$serv \"$nascmd\"";<br>
    my @output   = `$sshcmd  >/tmp/$serv.storage.out `;<br>
    my @dataline = `cat /tmp/$serv.storage.out`;<br>
<br>
    #       print "$serv storage output is  @dataline \n";<br>
    open( FH, "< /tmp/$serv.storage.out" );<br>
<br>
    while (<FH>)<br>
    {<br>
        next if /server_/;<br>
        next if /Filesystem/;<br>
        my @line = (split);<br>
        if ( @line == 0 ) { next }    # skip blanks<br>
        if ( @line == 1 )<br>
        {                             # we might be on the first line<br>
of a wrapped line<br>
            $scratch = $line[0];      # but some one-word lines are<br>
ckpts followed by real lines<br>
            next;<br>
        }<br>
        elsif ( ( @line >= 5 ) && ( $line[4] =~ /\%/ ) )<br>
        {                             # we have a filesystem data line<br>
            ( $fs, $kb, $used, $avail, $cap, $mount ) = @line;<br>
        }<br>
        elsif ( ( $scratch ne '' ) && ( $line[3] =~ /\%/ ) )<br>
        {                             # we have the second line of a wrap<br>
            $fs = $scratch;<br>
            ( $kb, $used, $avail, $cap, $mount ) = @line;<br>
        }<br>
        else<br>
        {<br>
            $scratch = "";<br>
            next;<br>
        }    #at the moment, not interested in non-data lines<br>
<br>
        my $full = $cap;    # number with pesky "%" appended<br>
        $full =~ s/%//;     # is there a more elegant way to do this?<br>
<br>
        #               print "used space is $full % \n";<br>
        if ( $full >= $REDLEVEL )<br>
        {<br>
            $gored = true;<br>
            push( @warnings,<br>
                "$REDDOT  filesystem $fs ($cap used) has reached the<br>
PANIC level ($REDLEVEL%) on mountpoint $mount \n"<br>
            );<br>
        }<br>
        elsif ( $full >= $YELLOWLEVEL )<br>
        {<br>
            $goyellow = true;<br>
            push( @warnings,<br>
"$YELLOWDOT  filesystem $fs ($cap used) has reached the WARNING level<br>
($YELLOWLEVEL%) on mountpoint $mount \n"<br>
            );<br>
        }<br>
<br>
        #               my $i=0;<br>
        #               for ( $i=0; $i<@line; $i++){<br>
        #                       print "element #$i is $line[$i]\n";<br>
        #               }<br>
    }<br>
<br>
    #!#     print "$serv output is  @output";<br>
    if    ( $gored == true )    { $COLOR = "red"; }<br>
    elsif ( $goyellow == true ) { $COLOR = "yellow"; }<br>
    else                        { $COLOR = "green"; }<br>
    my $bbcmd = "$BB $BBDISPLAY 'status+2h $serv.$TESTNAME $COLOR<br>
$date \n @warnings \n @dataline' ";<br>
<br>
    #    print "command is";<br>
    #    print $bbcmd;<br>
    #    print "\n";<br>
<br>
    system("$bbcmd");<br>
<br>
}<br>
</blockquote></div><br><br clear="all"><br>-- <br><span>"Accept the challenges so that you can feel the exhilaration of victory"</span><div><span>- General George Patton</span></div><br>