summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Nagios/Plugin.pm3
-rw-r--r--lib/Nagios/Plugin/Base.pm131
-rw-r--r--lib/Nagios/Plugin/Getopt.pm7
-rw-r--r--lib/Nagios/Plugin/Threshold.pm20
4 files changed, 136 insertions, 25 deletions
diff --git a/lib/Nagios/Plugin.pm b/lib/Nagios/Plugin.pm
index 0915571..88c15c5 100644
--- a/lib/Nagios/Plugin.pm
+++ b/lib/Nagios/Plugin.pm
@@ -43,8 +43,7 @@ sub shortname { shift; @_ ? $shortname = shift : $shortname }
43 43
44sub die { 44sub die {
45 my $self = shift; 45 my $self = shift;
46 my %args = @_; 46 Nagios::Plugin::Base::die(@_, { plugin => $self });
47 Nagios::Plugin::Base->die(\%args, $self);
48} 47}
49 48
501; 491;
diff --git a/lib/Nagios/Plugin/Base.pm b/lib/Nagios/Plugin/Base.pm
index c2e9902..92651ed 100644
--- a/lib/Nagios/Plugin/Base.pm
+++ b/lib/Nagios/Plugin/Base.pm
@@ -4,24 +4,139 @@ package Nagios::Plugin::Base;
4 4
5use strict; 5use strict;
6use warnings; 6use warnings;
7use File::Basename;
7 8
8our $VERSION = "0.13"; 9our $VERSION = "0.13";
9 10
10use Exporter; 11our @STATUS_CODES = qw(OK WARNING CRITICAL UNKNOWN DEPENDENT);
11our @ISA = qw(Exporter);
12our @EXPORT = qw(%ERRORS);
13 12
14our %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); 13require Exporter;
14our @ISA = qw(Exporter);
15our @EXPORT = (@STATUS_CODES, qw(nagios_exit %ERRORS));
16our @EXPORT_OK = qw(nagios_die %STATUS_TEXT);
17our %EXPORT_TAGS = (
18 all => [ @EXPORT, @EXPORT_OK ],
19 codes => [ @STATUS_CODES ],
20 functions => [ qw(nagios_exit nagios_die) ],
21);
22
23use constant OK => 0;
24use constant WARNING => 1;
25use constant CRITICAL => 2;
26use constant UNKNOWN => 3;
27use constant DEPENDENT => 4;
28
29our %ERRORS = (
30 'OK' => OK,
31 'WARNING' => WARNING,
32 'CRITICAL' => CRITICAL,
33 'UNKNOWN' => UNKNOWN,
34 'DEPENDENT' => DEPENDENT,
35);
15 36
16our %STATUS_TEXT = reverse %ERRORS; 37our %STATUS_TEXT = reverse %ERRORS;
17 38
39# _fake_exit flag and accessor/mutator, for testing
40my $_fake_exit = 0;
41sub _fake_exit { @_ ? $_fake_exit = shift : $_fake_exit };
42
43sub get_shortname {
44 my %arg = @_;
45
46 return $arg{plugin}->shortname if $arg{plugin};
47
48 my $shortname = uc basename($ENV{NAGIOS_PLUGIN} || $0);
49 $shortname =~ s/^CHECK_//;
50 return $shortname;
51}
52
53# nagios_exit( $code, $message )
54sub nagios_exit {
55 my ($code, $message, $arg) = @_;
56
57 # Handle named parameters
58 if (defined $code && ($code eq 'return_code' || $code eq 'message')) {
59 # Remove last argument if odd no and last is ref
60 if (int(@_ / 2) != @_ / 2 && ref $_[$#_]) {
61 $arg = pop @_;
62 } else {
63 undef $arg;
64 }
65 my %arg = @_;
66 $code = $arg{return_code};
67 $message = $arg{message};
68 }
69 $arg ||= {};
70
71 # Handle string codes
72 $code = $ERRORS{$code} if defined $code && exists $ERRORS{$code};
73
74 # Set defaults
75 $code = UNKNOWN unless defined $code && exists $STATUS_TEXT{$code};
76 $message = '' unless defined $message;
77 $message = join(' ', @$message) if ref $message eq 'ARRAY';
78
79 # Setup output
80 my $output = "$STATUS_TEXT{$code}";
81 $output .= " - $message" if defined $message && $message ne '';
82 my $shortname = get_shortname(plugin => $arg->{plugin});
83 $output = "$shortname $output" if $shortname;
84 if ($arg->{plugin}) {
85 my $plugin = $arg->{plugin};
86 $output .= " | ". $plugin->all_perfoutput if $plugin->perfdata;
87 }
88 $output .= "\n";
89
90 # Don't actually exit if _fake_exit set
91 if ($_fake_exit) {
92 require Nagios::Plugin::ExitResult;
93 return Nagios::Plugin::ExitResult->new($code, $output);
94 }
95
96 # Print output and exit
97 print $output;
98 exit $code;
99}
100
101# nagios_die( $message, [ $code ]) OR nagios_die( $code, $message )
102# Default $code: UNKNOWN
103sub nagios_die {
104 my ($arg1, $arg2, $rest) = @_;
105
106 # Named parameters
107 if (defined $arg1 && ($arg1 eq 'return_code' || $arg1 eq 'message')) {
108 return nagios_exit(@_);
109 }
110
111 # ($code, $message)
112 elsif (defined $arg1 && (exists $ERRORS{$arg1} || exists $STATUS_TEXT{$arg1})) {
113 return nagios_exit(@_);
114 }
115
116 # ($message, $code)
117 elsif (defined $arg2 && (exists $ERRORS{$arg2} || exists $STATUS_TEXT{$arg2})) {
118 return nagios_exit($arg2, $arg1, $rest);
119 }
120
121 # Else just assume $arg1 is the message and hope for the best
122 else {
123 return nagios_exit( UNKNOWN, $arg1, $rest );
124 }
125}
126
127# For backwards compatibility
128sub die { nagios_die(@_); }
129
130
131=pod old
18 132
19my $exit_on_die = 1; 133my $exit_on_die = 1;
20sub exit_on_die { shift; @_ ? $exit_on_die = shift : $exit_on_die }; 134sub exit_on_die { shift; @_ ? $exit_on_die = shift : $exit_on_die };
21my $print_on_die = 1; 135my $print_on_die = 1;
22sub print_on_die { shift; @_ ? $print_on_die = shift : $print_on_die }; 136sub print_on_die { shift; @_ ? $print_on_die = shift : $print_on_die };
23 137
24sub die { 138# Old version - TODO: remove
139sub old_die {
25 my ($class, $args, $plugin) = @_; 140 my ($class, $args, $plugin) = @_;
26 my $return_code; 141 my $return_code;
27 142
@@ -49,7 +164,12 @@ sub die {
49 } 164 }
50} 165}
51 166
167=cut
168
521; 1691;
170
171# vim:sw=4:sm:et
172
53__END__ 173__END__
54 174
55=head1 NAME 175=head1 NAME
@@ -73,5 +193,4 @@ This library is free software; you can redistribute it and/or modify
73it under the same terms as Perl itself, either Perl version 5.8.4 or, 193it under the same terms as Perl itself, either Perl version 5.8.4 or,
74at your option, any later version of Perl 5 you may have available. 194at your option, any later version of Perl 5 you may have available.
75 195
76
77=cut 196=cut
diff --git a/lib/Nagios/Plugin/Getopt.pm b/lib/Nagios/Plugin/Getopt.pm
index d38dced..7f32c3b 100644
--- a/lib/Nagios/Plugin/Getopt.pm
+++ b/lib/Nagios/Plugin/Getopt.pm
@@ -5,7 +5,6 @@
5 5
6package Nagios::Plugin::Getopt; 6package Nagios::Plugin::Getopt;
7 7
8use 5.005003;
9use strict; 8use strict;
10use File::Basename; 9use File::Basename;
11use Getopt::Long qw(:config no_ignore_case bundling); 10use Getopt::Long qw(:config no_ignore_case bundling);
@@ -21,7 +20,7 @@ $VERSION = $Nagios::Plugin::Base::VERSION;
21my %DEFAULT = ( 20my %DEFAULT = (
22 timeout => 15, 21 timeout => 15,
23 verbose => 0, 22 verbose => 0,
24 licence => 23 license =>
25"This nagios plugin is free software, and comes with ABSOLUTELY NO WARRANTY. 24"This nagios plugin is free software, and comes with ABSOLUTELY NO WARRANTY.
26It may be used, redistributed and/or modified under the terms of the GNU 25It may be used, redistributed and/or modified under the terms of the GNU
27General Public Licence (see http://www.fsf.org/licensing/licenses/gpl.txt).", 26General Public Licence (see http://www.fsf.org/licensing/licenses/gpl.txt).",
@@ -265,7 +264,7 @@ sub _init
265 plugin => { default => $plugin }, 264 plugin => { default => $plugin },
266 blurb => 0, 265 blurb => 0,
267 extra => 0, 266 extra => 0,
268 license => { default => $DEFAULT{licence} }, 267 license => { default => $DEFAULT{license} },
269 timeout => { default => $DEFAULT{timeout} }, 268 timeout => { default => $DEFAULT{timeout} },
270 }); 269 });
271 270
@@ -400,7 +399,7 @@ Short plugin description, included in the longer --help output
400 399
401License text, included in the longer --help output (see below for an 400License text, included in the longer --help output (see below for an
402example). By default, this is set to the standard nagios plugins 401example). By default, this is set to the standard nagios plugins
403GPL licence text: 402GPL license text:
404 403
405 This nagios plugin is free software, and comes with ABSOLUTELY NO WARRANTY. 404 This nagios plugin is free software, and comes with ABSOLUTELY NO WARRANTY.
406 It may be used, redistributed and/or modified under the terms of the GNU 405 It may be used, redistributed and/or modified under the terms of the GNU
diff --git a/lib/Nagios/Plugin/Threshold.pm b/lib/Nagios/Plugin/Threshold.pm
index 9e7b938..d7a8177 100644
--- a/lib/Nagios/Plugin/Threshold.pm
+++ b/lib/Nagios/Plugin/Threshold.pm
@@ -6,7 +6,7 @@ use strict;
6use warnings; 6use warnings;
7 7
8use Nagios::Plugin::Range; 8use Nagios::Plugin::Range;
9use Nagios::Plugin::Base; 9use Nagios::Plugin::Base qw(:codes nagios_die);
10our ($VERSION) = $Nagios::Plugin::Base::VERSION; 10our ($VERSION) = $Nagios::Plugin::Base::VERSION;
11 11
12use Class::Struct; 12use Class::Struct;
@@ -23,10 +23,7 @@ sub set_thresholds {
23 if (defined $r) { 23 if (defined $r) {
24 $t->warning($r); 24 $t->warning($r);
25 } else { 25 } else {
26 Nagios::Plugin::Base->die( { 26 nagios_die( "Warning range incorrect: '$args{warning}'" );
27 return_code => $ERRORS{UNKNOWN},
28 message => "Warning range incorrect: '$args{warning}'"
29 } );
30 } 27 }
31 } 28 }
32 if (defined $args{critical}) { 29 if (defined $args{critical}) {
@@ -34,10 +31,7 @@ sub set_thresholds {
34 if (defined $r) { 31 if (defined $r) {
35 $t->critical($r); 32 $t->critical($r);
36 } else { 33 } else {
37 Nagios::Plugin::Base->die( { 34 nagios_die( "Critical range incorrect: '$args{critical}'" );
38 return_code => $ERRORS{UNKNOWN},
39 message => "Critical range incorrect: '$args{critical}'"
40 } );
41 } 35 }
42 } 36 }
43 return $t; 37 return $t;
@@ -48,15 +42,15 @@ sub get_status {
48 42
49 if ($self->critical->is_set) { 43 if ($self->critical->is_set) {
50 if ($self->critical->check_range($value) == 1) { 44 if ($self->critical->check_range($value) == 1) {
51 return $ERRORS{CRITICAL}; 45 return CRITICAL;
52 } 46 }
53 } 47 }
54 if ($self->warning->is_set) { 48 if ($self->warning->is_set) {
55 if ($self->warning->check_range($value) == 1) { 49 if ($self->warning->check_range($value) == 1) {
56 return $ERRORS{WARNING}; 50 return WARNING;
57 } 51 }
58 } 52 }
59 return $ERRORS{OK}; 53 return OK;
60} 54}
61 55
621; 561;
@@ -81,7 +75,7 @@ Returns the warning or critical range as a Nagios::Plugin::Range object.
81 75
82=item get_status($value) 76=item get_status($value)
83 77
84Given a value, will see if the value breeches the critical or the warning range. Returns the status code. 78Given a value, will see if the value breaches the critical or the warning range. Returns the status code.
85 79
86=back 80=back
87 81