Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: What did I miss in my test condition?

by hbm (Hermit)
on Aug 10, 2012 at 23:15 UTC ( #986836=note: print w/ replies, xml ) Need Help??


in reply to What did I miss in my test condition?

I believe your if-else is flawed:

if ($score > $warnrate) { print "OK, rf is $score. \|Mbps=$score\n"; exit 0 # $score is necessarily <= $warnrate at this point #} elsif (($score <= $warnrate) && ($score > $critrate)) { } elsif ($score > $critrate) { print "WARNING, rf is $score. \|Mbps=$score\n"; exit 1 # $score is necessarily <= $critrate at this point #} elsif ($score <= $critrate) { } else { print "CRITICAL, rf is $score. \|Mbps=$score\n"; exit 2 # should never reach this point } else { print "UNKNOWN, rf is $score and something is wrong.\n"; exit 3 }

Also, your open DATA; while(<DATA>); close DATA seems odd. I haven't used snmpwalk before, and just tried without success; but I wonder if you can't just:

my $line = `/usr/bin/snmpwalk -v1 -c public $radio .1.3.6.1.4.1.5 +454.1.40.2.4.0`; my @values = split(' ', $line); my $score = $values[3]; if ...


Comment on Re: What did I miss in my test condition?
Select or Download Code
Re^2: What did I miss in my test condition?
by jimbass (Novice) on Aug 11, 2012 at 05:42 UTC
    My hope with the test conditions was that if $score was null/undefined (say from a timeout), it would fail the numeric tests, and trigger the undefined answer. Obviously that isn't the case. In the general sense $score should be a number and come up with an exit code of 0, 1, or 2, but I don't test to be certain the $score is numeric. Maybe that would be the preferred case, if $score is undefined, immeidately exit with exit code 3. Seems that is a good way to handle it, thanks for your insight! If you're ever in the NYC area, I owe you a beer! This code exits as I had hoped:
    #!/usr/bin/perl -w use strict; my $radio = $ARGV[0]; my $warnrate = $ARGV[1]; my $critrate = $ARGV[2]; my $line = `/usr/bin/snmpwalk -v1 -c PTsnmp $radio .1.3.6.1.4.1.5454.1 +.40.2.4.0`; if ($line eq '') { print "snmpwalk returned nothing, timeout likely occurred.\n"; exit 3 } if ($critrate > $warnrate) { print "Make sure your critical value is less than or equal to your war +ning value.\n"; exit 5 } if ($critrate <= $warnrate) { my @values = split(' ', $line); my $score = $values[3]; if ($score > $warnrate) { print "OK, rf is $score. \|Mbps=$score\n"; exit 0 } elsif (($score <= $warnrate) && ($score > $critrate)) { print "WARNING, rf is $score. \|Mbps=$score\n"; exit 1 } elsif ($score <= $critrate) { print "CRITICAL, rf is $score. \|Mbps=$score\n"; exit 2 } }

      I don't think $line will every be empty - you probably ought to chomp it, or test for non-whitespace.

      And you still have unnecessary tests in your if-elsif. For example, if $score is NOT greater-than $warnrate, it IS NECESSARILY less-than-or-equal-to $warnrate.

      Consider:

      use strict; my $radio = $ARGV[0]; my $warnrate = $ARGV[1]; my $critrate = $ARGV[2]; chomp(my $line = `/usr/bin/snmpwalk -v1 -c PTsnmp $radio .1.3.6.1.4.1. +5454.1.40.2.4.0`; if ($line !~ /\S/) { print "snmpwalk returned nothing, timeout likely occurred.\n"; exit 3; } elsif ($critrate > $warnrate) { print "Make sure your critical value is less than or equal to your +warning value.\n"; exit 5; } else { my $score = (split(' ', $line))[3]; my ($msg,$status) = $score > $warnrate ? ('OK',0) : ( $score > $critrate ? ('WARNING',1) : ('CRITICAL',2)); print "$msg, rf is $score. |Mbps=$score\n"; exit $status; }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://986836]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (9)
As of 2015-07-01 22:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (24 votes), past polls