-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCollector.pl.in
executable file
·148 lines (115 loc) · 3.63 KB
/
Collector.pl.in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/perl -w
# vim: set fileencoding=utf-8 sw=4 ts=4 et :
# nagios: +epn
################################################################################
## $Id$
##
## Collector : Nagios script which collects informations from hosts
# in one pass
## Copyright (C) 2005-2020 CS GROUP - France
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## as published by the Free Software Foundation; either version 2
## of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
################################################################################
=head1 Collector
=head2 Overview
This is a Nagios Plugin intended to monitor hosts using SNMP.
This collector is compliant with ePN, which produces less overhead than
if it was a fork'ed plugin. So enable ePN in your Nagios configuration
to have a maximum benefit of this plugin.
Collector is supposed to be run once for each host and to retrieve
all supervision data in a one-shot process.
=cut
package collector;
use POSIX;
use strict;
use Nagios::Plugin qw(%ERRORS);
use Getopt::Long;
&Getopt::Long::config('bundling');
############
my $confdir = "@CONFDIR@";
my $PROGNAME = "Collector";
my $debug = 0;
my ($opt_V, $opt_h, $opt_H, $opt_d, $conf);
our ($lib, $path, $timeout, $nagios_cmd_file, $connector_socket, $tmppath);
############
=head2 print_help()
=head3 Overview
Display a command line arguments help
=head3 Arguments
None
=head3 Returns
Nothing
=cut
sub print_help()
{
printf "Nagios script which collects informations from hosts in one pass\n";
printf "\nUsage:\n";
printf " -V (--version) Plugin version\n";
printf " -H (--hostname) Hostname\n";
printf " -C (--conf) Config file (defaults to $confdir/general.conf)\n";
printf " -h (--help) usage help \n\n";
printf " -d (--debug) debug \n\n";
}
sub process_arguments()
{
my $status;
$status = GetOptions(
"V" => \$opt_V, "version" => \$opt_V,
"h" => \$opt_h, "help" => \$opt_h,
"d" => \$opt_d, "debug" => \$opt_d,
"H=s" => \$opt_H, "hostname=s" => \$opt_H,
"C=s" => \$conf, "conf=s" => \$conf,
);
if ($status == 0) {
print_help();
exit $ERRORS{'OK'};
}
if ($opt_V) {
print_revision($PROGNAME,'$Revision$ ');
exit $ERRORS{'OK'};
}
if ($opt_h) {
print_help();
exit $ERRORS{'OK'};
}
if ($opt_d) {
$debug = 1;
}
if (! $opt_H) {
# FIXME : Verify the hostname structure
print "Provide a hostname\n";
exit $ERRORS{'UNKNOWN'};
}
unless (defined $conf) {
$conf = "$confdir/general.conf";
}
}
### Validate Arguments
process_arguments();
## Load the main configuration file
do $conf;
if (! $lib) {
print "Provide a pathname for the library directory\n";
exit $ERRORS{'UNKNOWN'};
} elsif (! -x $lib) {
print "Provide an existing library path: $lib\n";
exit $ERRORS{'UNKNOWN'};
}
require "$lib/collector.pm";
check_conf();
load_libs($debug);
my ($state, $answer) = collect_host($opt_H);
print "$answer\n";
exit $ERRORS{$state};