diff options
Diffstat (limited to 'lib/Nagios')
-rw-r--r-- | lib/Nagios/Plugin.pm | 128 | ||||
-rw-r--r-- | lib/Nagios/Plugin/ExitResult.pm | 2 | ||||
-rw-r--r-- | lib/Nagios/Plugin/Functions.pm | 2 | ||||
-rw-r--r-- | lib/Nagios/Plugin/Getopt.pm | 4 |
4 files changed, 106 insertions, 30 deletions
diff --git a/lib/Nagios/Plugin.pm b/lib/Nagios/Plugin.pm index 71d12ed..1fcd28a 100644 --- a/lib/Nagios/Plugin.pm +++ b/lib/Nagios/Plugin.pm | |||
@@ -1,30 +1,67 @@ | |||
1 | # This is only because Class::Struct doesn't allow subclasses | ||
2 | # Trick stolen from Class::DBI | ||
3 | ###package Nagios::__::Plugin; | ||
4 | |||
5 | use Class::Struct; | ||
6 | struct "Nagios::__::Plugin" => { | ||
7 | perfdata => '@', | ||
8 | shortname => '$', | ||
9 | messages => '%', | ||
10 | }; | ||
11 | 1 | ||
12 | package Nagios::Plugin; | 2 | package Nagios::Plugin; |
13 | 3 | ||
14 | use Nagios::Plugin::Functions qw(:codes %ERRORS %STATUS_TEXT @STATUS_CODES); | 4 | use Nagios::Plugin::Functions qw(:codes %ERRORS %STATUS_TEXT @STATUS_CODES); |
5 | use Nagios::Plugin::Getopt; | ||
6 | use Nagios::Plugin::Threshold; | ||
7 | use Params::Validate qw(:all); | ||
15 | 8 | ||
16 | use strict; | 9 | use strict; |
17 | use warnings; | 10 | use warnings; |
18 | 11 | ||
19 | use Carp; | 12 | use Carp; |
13 | use base qw(Class::Accessor::Fast); | ||
14 | |||
15 | # do we need all of these to be accessible? | ||
16 | Nagios::Plugin->mk_accessors(qw( | ||
17 | perfdata | ||
18 | messages | ||
19 | opts | ||
20 | threshold | ||
21 | )); | ||
20 | 22 | ||
21 | use Exporter; | 23 | use Exporter; |
22 | our @ISA = qw(Exporter Nagios::__::Plugin); | 24 | our @ISA = qw(Exporter); |
23 | our @EXPORT = (@STATUS_CODES); | 25 | our @EXPORT = (@STATUS_CODES); |
24 | our @EXPORT_OK = qw(%ERRORS); | 26 | our @EXPORT_OK = qw(%ERRORS); |
25 | 27 | ||
26 | # Remember to update Nagios::Plugin::Functions as well! | 28 | # Remember to update Nagios::Plugin::Functions as well! |
27 | our $VERSION = "0.14"; | 29 | our $VERSION = "0.15"; |
30 | |||
31 | sub new { | ||
32 | my $class = shift; | ||
33 | # my %args = @_; | ||
34 | |||
35 | my %args = validate( @_, { | ||
36 | shortname => 0, | ||
37 | usage => 1, | ||
38 | version => 0, | ||
39 | url => 0, | ||
40 | plugin => 0, | ||
41 | blurb => 0, | ||
42 | extra => 0, | ||
43 | license => 0, | ||
44 | timeout => 0 }, | ||
45 | ); | ||
46 | my $shortname = undef; | ||
47 | if (exists $args{shortname}) { | ||
48 | $shortname = $args{shortname}; | ||
49 | delete $args{shortname}; | ||
50 | } | ||
51 | my $self = { | ||
52 | shortname => $shortname, | ||
53 | perfdata => [], # to be added later | ||
54 | messages => { | ||
55 | warning => [], | ||
56 | critical => [], | ||
57 | ok => [] | ||
58 | }, | ||
59 | opts => new Nagios::Plugin::Getopt(%args), | ||
60 | threshold => undef, # defined later | ||
61 | }; | ||
62 | bless $self, $class; | ||
63 | return $self; | ||
64 | } | ||
28 | 65 | ||
29 | sub add_perfdata { | 66 | sub add_perfdata { |
30 | my ($self, %args) = @_; | 67 | my ($self, %args) = @_; |
@@ -38,9 +75,9 @@ sub all_perfoutput { | |||
38 | } | 75 | } |
39 | 76 | ||
40 | sub set_thresholds { | 77 | sub set_thresholds { |
41 | shift; | 78 | my $self = shift; |
42 | require Nagios::Plugin::Threshold; | 79 | require Nagios::Plugin::Threshold; |
43 | Nagios::Plugin::Threshold->set_thresholds(@_); | 80 | return $self->threshold( Nagios::Plugin::Threshold->set_thresholds(@_)); |
44 | } | 81 | } |
45 | 82 | ||
46 | # NP::Functions wrappers | 83 | # NP::Functions wrappers |
@@ -56,14 +93,54 @@ sub die { | |||
56 | my $self = shift; | 93 | my $self = shift; |
57 | Nagios::Plugin::Functions::nagios_die(@_, { plugin => $self }); | 94 | Nagios::Plugin::Functions::nagios_die(@_, { plugin => $self }); |
58 | } | 95 | } |
96 | |||
59 | # Override default shortname accessor to add default | 97 | # Override default shortname accessor to add default |
60 | sub shortname { | 98 | sub shortname { |
61 | my $self = shift; | 99 | my $self = shift; |
62 | $self->{'Nagios::__::Plugin::shortname'} = shift if @_; | 100 | $self->{shortname} = shift if @_; |
63 | return $self->{'Nagios::__::Plugin::shortname'} || | 101 | return $self->{shortname} || |
64 | Nagios::Plugin::Functions::get_shortname(); | 102 | Nagios::Plugin::Functions::get_shortname(); |
65 | } | 103 | } |
66 | 104 | ||
105 | # top level interface to Nagios::Plugin::Threshold | ||
106 | sub check_threshold { | ||
107 | my $self = shift; | ||
108 | |||
109 | my %args; | ||
110 | |||
111 | if ( $#_ == 0 && ! ref $_[0]) { # one positional param | ||
112 | %args = (check => shift); | ||
113 | } | ||
114 | else { | ||
115 | %args = validate ( @_, { # named params | ||
116 | check => 1, | ||
117 | warning => 0, | ||
118 | critical => 0, | ||
119 | } ); | ||
120 | } | ||
121 | |||
122 | if (! $self->threshold || exists $args{warning} || exists $args{critical}) { | ||
123 | $self->set_thresholds( | ||
124 | warning => $args{warning} || $self->opts->warning , | ||
125 | critical => $args{critical} || $self->opts->critical , | ||
126 | ); | ||
127 | } | ||
128 | |||
129 | |||
130 | return $self->threshold->get_status($args{check}); | ||
131 | } | ||
132 | |||
133 | # top level interface to my Nagios::Plugin::Getopt object | ||
134 | sub arg { | ||
135 | my $self = shift; | ||
136 | $self->opts->arg(@_); | ||
137 | } | ||
138 | sub getopts { | ||
139 | my $self = shift; | ||
140 | $self->opts->getopts(@_); | ||
141 | } | ||
142 | |||
143 | |||
67 | # ------------------------------------------------------------------------- | 144 | # ------------------------------------------------------------------------- |
68 | # NP::Functions::check_messages helpers and wrappers | 145 | # NP::Functions::check_messages helpers and wrappers |
69 | 146 | ||
@@ -80,8 +157,8 @@ sub add_message { | |||
80 | croak "Error code '$code' not supported by add_message" | 157 | croak "Error code '$code' not supported by add_message" |
81 | if $code eq 'unknown' || $code eq 'dependent'; | 158 | if $code eq 'unknown' || $code eq 'dependent'; |
82 | 159 | ||
83 | $self->messages($code, []) unless $self->messages($code); | 160 | $self->messages($code, []) unless $self->messages->{$code}; |
84 | push @{$self->messages($code)}, @messages; | 161 | push @{$self->messages->{$code}}, @messages; |
85 | } | 162 | } |
86 | 163 | ||
87 | sub check_messages { | 164 | sub check_messages { |
@@ -90,7 +167,7 @@ sub check_messages { | |||
90 | 167 | ||
91 | # Add object messages to any passed in as args | 168 | # Add object messages to any passed in as args |
92 | for my $code (qw(critical warning ok)) { | 169 | for my $code (qw(critical warning ok)) { |
93 | my $messages = $self->messages($code) || []; | 170 | my $messages = $self->messages->{$code} || []; |
94 | if ($args{$code}) { | 171 | if ($args{$code}) { |
95 | unless (ref $args{$code} eq 'ARRAY') { | 172 | unless (ref $args{$code} eq 'ARRAY') { |
96 | if ($code eq 'ok') { | 173 | if ($code eq 'ok') { |
@@ -123,9 +200,10 @@ __END__ | |||
123 | Nagios::Plugin - a family of perl modules to streamline writing Nagios | 200 | Nagios::Plugin - a family of perl modules to streamline writing Nagios |
124 | plugins | 201 | plugins |
125 | 202 | ||
126 | |||
127 | =head1 SYNOPSIS | 203 | =head1 SYNOPSIS |
128 | 204 | ||
205 | # TODO NJV -- make this more like check_stuff. | ||
206 | |||
129 | # Constants OK, WARNING, CRITICAL, and UNKNOWN are exported by default | 207 | # Constants OK, WARNING, CRITICAL, and UNKNOWN are exported by default |
130 | # See also Nagios::Plugin::Functions for a functional interface | 208 | # See also Nagios::Plugin::Functions for a functional interface |
131 | use Nagios::Plugin; | 209 | use Nagios::Plugin; |
@@ -188,9 +266,7 @@ plugins | |||
188 | # | size=36kB;10:25;25: time=... | 266 | # | size=36kB;10:25;25: time=... |
189 | 267 | ||
190 | # Option handling methods (NOT YET IMPLEMENTED - use | 268 | # Option handling methods (NOT YET IMPLEMENTED - use |
191 | # Nagios::Plugin::Getopt for now) | 269 | # Nagios::Plugin::Getopt for |
192 | |||
193 | |||
194 | 270 | ||
195 | =head1 DESCRIPTION | 271 | =head1 DESCRIPTION |
196 | 272 | ||
@@ -280,6 +356,7 @@ NOT YET IMPLEMENTED - use Nagios::Plugin::Threshold directly for now. | |||
280 | 356 | ||
281 | =over 4 | 357 | =over 4 |
282 | 358 | ||
359 | =item check_threshold( $value ) | ||
283 | =item check_threshold( check => $value, warning => $warn, critical => $crit ) | 360 | =item check_threshold( check => $value, warning => $warn, critical => $crit ) |
284 | 361 | ||
285 | =back | 362 | =back |
@@ -382,6 +459,8 @@ section of the Nagios Plugin guidelines | |||
382 | 459 | ||
383 | =head2 OPTION HANDLING METHODS | 460 | =head2 OPTION HANDLING METHODS |
384 | 461 | ||
462 | TODO | ||
463 | |||
385 | NOT YET IMPLEMENTED - use Nagios::Plugin::Getopt directly for now. | 464 | NOT YET IMPLEMENTED - use Nagios::Plugin::Getopt directly for now. |
386 | 465 | ||
387 | 466 | ||
@@ -426,9 +505,6 @@ http://nagiosplug.sourceforge.net. | |||
426 | 505 | ||
427 | Originally by Ton Voon, E<lt>ton.voon@altinity.comE<gt>. | 506 | Originally by Ton Voon, E<lt>ton.voon@altinity.comE<gt>. |
428 | 507 | ||
429 | Nathan Vonnahme added extra tests and subsequent fixes. | ||
430 | |||
431 | |||
432 | =head1 COPYRIGHT AND LICENSE | 508 | =head1 COPYRIGHT AND LICENSE |
433 | 509 | ||
434 | Copyright (C) 2006 by Nagios Plugin Development Team | 510 | Copyright (C) 2006 by Nagios Plugin Development Team |
diff --git a/lib/Nagios/Plugin/ExitResult.pm b/lib/Nagios/Plugin/ExitResult.pm index 191c92a..b161e9e 100644 --- a/lib/Nagios/Plugin/ExitResult.pm +++ b/lib/Nagios/Plugin/ExitResult.pm | |||
@@ -39,7 +39,7 @@ return codes when testing. | |||
39 | $e = nagios_exit( CRITICAL, 'aiiii ...' ); | 39 | $e = nagios_exit( CRITICAL, 'aiiii ...' ); |
40 | print $e->message; | 40 | print $e->message; |
41 | print $e->return_code; | 41 | print $e->return_code; |
42 | 42 | ||
43 | # NP::ExitResult also stringifies to the message output | 43 | # NP::ExitResult also stringifies to the message output |
44 | like(nagios_exit( WARNING, 'foobar'), qr/^foo/, 'matches!'); | 44 | like(nagios_exit( WARNING, 'foobar'), qr/^foo/, 'matches!'); |
45 | 45 | ||
diff --git a/lib/Nagios/Plugin/Functions.pm b/lib/Nagios/Plugin/Functions.pm index 5772c97..41ec27a 100644 --- a/lib/Nagios/Plugin/Functions.pm +++ b/lib/Nagios/Plugin/Functions.pm | |||
@@ -11,7 +11,7 @@ use File::Basename; | |||
11 | use Params::Validate qw(validate :types); | 11 | use Params::Validate qw(validate :types); |
12 | 12 | ||
13 | # Remember to update Nagios::Plugins as well | 13 | # Remember to update Nagios::Plugins as well |
14 | our $VERSION = "0.14"; | 14 | our $VERSION = "0.15"; |
15 | 15 | ||
16 | our @STATUS_CODES = qw(OK WARNING CRITICAL UNKNOWN DEPENDENT); | 16 | our @STATUS_CODES = qw(OK WARNING CRITICAL UNKNOWN DEPENDENT); |
17 | 17 | ||
diff --git a/lib/Nagios/Plugin/Getopt.pm b/lib/Nagios/Plugin/Getopt.pm index 8a9fc1c..bbf1fc9 100644 --- a/lib/Nagios/Plugin/Getopt.pm +++ b/lib/Nagios/Plugin/Getopt.pm | |||
@@ -306,7 +306,7 @@ This documentation applies to version 0.01 of Nagios::Plugin::Getopt. | |||
306 | 306 | ||
307 | use Nagios::Plugin::Getopt; | 307 | use Nagios::Plugin::Getopt; |
308 | 308 | ||
309 | # Instantiate object (usage and version are mandatory) | 309 | # Instantiate object (usage is mandatory) |
310 | $ng = Nagios::Plugin::Getopt->new( | 310 | $ng = Nagios::Plugin::Getopt->new( |
311 | usage => "Usage: %s -H <host> -w <warning_threshold> | 311 | usage => "Usage: %s -H <host> -w <warning_threshold> |
312 | -c <critical threshold>", | 312 | -c <critical threshold>", |
@@ -352,7 +352,7 @@ additional arguments to be easily defined. | |||
352 | 352 | ||
353 | =head2 CONSTRUCTOR | 353 | =head2 CONSTRUCTOR |
354 | 354 | ||
355 | # Instantiate object (usage and version are mandatory) | 355 | # Instantiate object (usage is mandatory) |
356 | $ng = Nagios::Plugin::Getopt->new( | 356 | $ng = Nagios::Plugin::Getopt->new( |
357 | usage => 'Usage: %s --hello', | 357 | usage => 'Usage: %s --hello', |
358 | version => '0.01', | 358 | version => '0.01', |