summaryrefslogtreecommitdiffstats
path: root/lib/Nagios/Plugin/Base.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Nagios/Plugin/Base.pm')
-rw-r--r--lib/Nagios/Plugin/Base.pm131
1 files changed, 125 insertions, 6 deletions
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