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>