git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
path: root/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer
diff options
context:
space:
mode:
authorHarald Pfeiffer <coding _ lirion.de> 2019-04-17 19:07:19 +0200
committerHarald Pfeiffer <coding _ lirion.de> 2019-04-17 19:07:19 +0200
commit1e2387474a449452b78520b9ad96a8b4b5e99722 (patch)
tree836889471eec7d2aac177405068e2a8f1e2b1978 /nagios-plugins-contrib-24.20190301~bpo9+1/check_printer
downloadnagios-plugins-contrib-1e2387474a449452b78520b9ad96a8b4b5e99722.tar.bz2
initial commit of source fetch
Diffstat (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_printer')
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/Makefile1
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/check_printer375
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/control7
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/copyright27
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/printer.cfg5
5 files changed, 415 insertions, 0 deletions
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/Makefile b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/Makefile
new file mode 100644
index 0000000..23f8a8f
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/Makefile
@@ -0,0 +1 @@
+include ../common.mk
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/check_printer b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/check_printer
new file mode 100644
index 0000000..6d801de
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/check_printer
@@ -0,0 +1,375 @@
+#!/usr/bin/perl
+#
+# Copyright (c) 2007,2011 Eric F Crist
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or
+# without modification, are permitted provided that the following
+# conditions are met:
+#
+# Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $Id: check_printer 363 2014-07-23 14:37:59Z ecrist $
+# $HeadURL: trunk/nagios/check_printer $
+
+use strict;
+use warnings;
+
+my $OS = `uname`;
+if ($OS =~ m/^\wBSD/){
+ use lib "/usr/local/libexec/nagios";
+} elsif ($OS =~ m/Linux/){
+ use lib "/usr/local/nagios/libexec";
+}
+
+use Data::Dumper;
+use Getopt::Long;
+use Pod::Usage;
+
+'$Revision: 363 $' =~ m/Revision: (\d+)/;
+my $revision = $1;
+'$HeadURL: trunk/nagios/check_printer $' =~ m/HeadURL: ([\w\:\/\-\.\_]+) /;
+my $src_url = $1;
+my $debug = 0;
+my ($host, $warning, $critical, @ignore);
+my $community = "public";
+
+our %getopts;
+Getopt::Long::Configure("bundling");
+GetOptions(
+ "h|host=s" => \$host,
+ "C|community=s" => \$community,
+ "w|warn=i" => \$warning,
+ "c|crit=i" => \$critical,
+ "i=i" => \@ignore,
+ 'V|version' => sub { print '$Id: check_printer 363 2014-07-23 14:37:59Z ecrist $' ."\n"; exit 0 },
+ "d|debug" => \$debug,
+ "man" => sub { pod2usage(-exitstatus => 0, -verbose => 2); exit 0 }
+) or pod2usage(2);
+
+
+pod2usage(2) unless (defined($host));
+
+my $base_oid = ".1.3.6.1.2.1.43.11.1.1";
+my $type_oid = "3.1";
+my $name_oid = "6.1";
+my $uom_oid = "7.1";
+my $max_oid = "8.1";
+my $curr_oid = "9.1";
+my $loop;
+
+
+
+my $comm = $ARGV[1];
+
+my @vars = ("snmpwalk -On -v 1 -c $community $host $base_oid.$name_oid",
+ "snmpwalk -On -v 1 -c $community $host $base_oid.$uom_oid",
+ "snmpwalk -On -v 1 -c $community $host $base_oid.$max_oid",
+ "snmpwalk -On -v 1 -c $community $host $base_oid.$curr_oid");
+
+my(@values, @names, @max, @min);
+
+our %uom = ( "4" => "µm",
+ "7" => "impressions",
+ "8" => "pages",
+ "11" => "hrs",
+ "12" => "oz/1000",
+ "13" => "gr/10",
+ "14" => "gr/100",
+ "15" => "mL",
+ "16" => "feet",
+ "17" => "meters",
+ "18" => "items",
+ "19" => "%");
+
+foreach(@vars){
+ @values = (@values, split /\n/, `$_`);
+ if ($? != 0){
+ print "Printer Supplies UNKNOWN";
+ exit 3;
+ }
+}
+
+if ($debug){
+ print Dumper(\@values);
+}
+my %finvalues;
+
+my $ignore = join('|', @ignore);
+
+foreach(@values){
+ # matching the following line
+ # $1 $2 $3
+ # .1.3.6.1.2.1.43.11.1.1.6.1.1 = STRING: "Black Cartridge"
+ $_ =~ m/^([\.\d]+) = ([\w-]+):[\s\"]+([\(\)\-\d\w\s,\/:]+)\"*$/ or next;
+ my $loid = $1;
+ my $ltype = $2;
+ my $string = $3;
+ if ($loid =~ m/\.(${ignore})$/){
+ next;
+ }
+ if ($ltype =~ m/HEX/i){
+ # hex string, convert to ascii
+ $string = join "", map {chr hex $_ } split m/ /, $string;
+ }
+ $finvalues{"$loid"} = $string;
+}
+
+my %status;
+# get OID field numbers for matching later
+while (my ($key, $value) = each(%finvalues)){
+ ## sort this array into an associative in the following format:
+ # $status['name'] : Supply Name
+ # $status['curr'] : Supply Status
+ # $status['max'] : Supply Level When New
+ my $search = quotemeta("$base_oid.$name_oid");
+ if ($key =~ /^$search\.([\d\.]+)$/){
+ ## we'll assume a name
+ $status{$value}{"sub"} = $1;
+ } else {
+ }
+}
+# get maximum values, matching on OID field number
+while (my ($key, $value) = each(%finvalues)){
+ my $search = quotemeta("$base_oid.$max_oid");
+ if ($key =~ /^$search\.([\d\.]+)$/){
+ ## assign it to the other variable
+ ## search the existing keys, find the one we want
+ foreach my $subvalue (values %status){
+ if ($subvalue->{"sub"} eq $1){
+ $subvalue->{"max"} = $value;
+ }
+ }
+ }
+}
+
+# get current value, matching on OID field number
+while (my ($key, $value) = each(%finvalues)){
+ my $search = quotemeta("$base_oid.$curr_oid");
+ if ($key =~ /^$search\.([\d\.]+)$/){
+ ## assign it to the other variable
+ ## search the existing keys, find the one we want
+ foreach my $subvalue (values %status){
+ if ($subvalue->{"sub"} eq $1){
+ $subvalue->{"curr"} = $value;
+ }
+ }
+ }
+}
+
+# get uom, add it to data
+while (my ($key, $value) = each(%finvalues)){
+ my $search = quotemeta("$base_oid.$uom_oid");
+ if ($key =~ /^$search\.([\d\.]+)$/){
+ ## assign it to the other variable
+ ## search the existing keys, find the one we want
+ foreach my $subvalue (values %status){
+ if ($subvalue->{"sub"} eq $1){
+ $subvalue->{"uom"} = $uom{$value};
+ }
+ }
+ }
+}
+
+## Assemble performance data and error string.
+my $perf_str = "";
+my $is_warn = 0;
+my $is_crit = 0;
+my $err_str = "";
+while (my($key, $value) = each(%status)){
+ my ($maximum, $current);
+ if (!exists($value->{"curr"}) || $value->{"curr"} == -3){
+ ## we can process as yes/no
+ $current = 100;
+ ## Override the critical/warning, since they're moot
+ $critical = 0;
+ $warning = 0;
+ } elsif (($value->{"max"} == -2) and ($value->{"uom"} ne '%')){
+ ## we don't know (-2 == unknown) the max and can't compute
+ next;
+ } else {
+ $maximum = $value->{"max"};
+ }
+
+ if (!exists($value->{"curr"}) || $value->{"curr"} < 0){
+ ## weird value, set to 0 for math reasons
+ $current = 0;
+ } else {
+ $current = round(($value->{"curr"} / $maximum) * 100);
+ }
+
+ my $lcurrent;
+ if (($key =~ m/waste/i) or ($key =~ m/Toneruppsamlare/i) or ($key =~ m/Restonner/i)){
+ # invert the $current as waste is calculated in reverse
+ if ($value->{"curr"} == -3){
+ $lcurrent = 0;
+ } else {
+ $lcurrent = $maximum - $current;
+ }
+ } else {
+ $lcurrent = $current;
+ }
+ if ($lcurrent < $critical){
+ $is_crit = $is_crit + 1;
+ if ($err_str eq ""){
+ $err_str = "$key";
+ } else {
+ $err_str = "$err_str, $key";
+ }
+ } elsif ($lcurrent < $warning){
+ $is_warn = $is_warn + 1;
+ if ($err_str eq ""){
+ $err_str = "$key";
+ } else {
+ $err_str = "$err_str, $key";
+ }
+ }
+ if ($debug){
+ print "Key: $key\nCur: $current\nWarn: $warning\nCrit: $critical\n";
+ }
+ $perf_str = "$perf_str '$key'=$current%;$warning;$critical;0;100 ";
+}
+
+if ($debug){
+ print Dumper(\%status);
+ print "\n\n############ ATTENTION ############\n";
+ print "You have debug enabled. If asked to enable debug by the developer,\n";
+ print "please send all of the output, including your command line to\n";
+ print "ecrist\@secure-computing.net with the subject line 'check_printer DEBUG' along\n";
+ print "with a description of the problem you're experiencing.\n###################################\n";
+ print '$Id: check_printer 363 2014-07-23 14:37:59Z ecrist $'."\n\n";
+}
+if ($is_crit){
+ print "$err_str CRITICAL. See http://$ARGV[0] | $perf_str\n";
+ exit 2;
+} elsif ($is_warn){
+ print "$err_str WARNING. See http://$ARGV[0] | $perf_str\n";
+ exit 1;
+} else {
+ print "Printer Supplies OK | $perf_str\n";
+ exit 0;
+}
+
+
+###
+### subroutines here
+###
+
+sub round {
+ my($number) = shift;
+ return int($number + .5 * ($number <=> 0));
+}
+
+__END__
+
+=head1 check_printer
+
+check_printer - Gather supply metrics from a printer via SNMP query
+
+=head1 SYNOPSIS
+
+check_printer [options]
+
+Options:
+
+ -h, --host Printer hostname or IP address.
+ -C, --community SNMP community string, defaults to "public"
+ -w, --warn Warning threshold
+ -c, --crit Critical threshold
+ -i, --ignore Supply ignore. See man page for more information (--man)
+ -V, --version Prints version string and exits
+ -d, --debug Prints debug output, useful when reporting a problem to the developer, or getting index numbers for --ignore
+ --man Prints man page
+
+=head1 DESCRIPTION
+
+B<check_printer> is a Perl script that retrieves supply metrics from printers using the snmpwalk command.
+
+=head1 OPTIONS
+
+=over
+
+=item -h, --host
+
+Defines the host or IP address passed to snmpwalk.
+
+=item -C, --community
+
+Identifies the SNMP community string. Requires read access only.
+
+=item -w, --warn
+
+Value at which a warning is generated. For example, if -w 10 is set, when
+supply levels fall to 10% or below, a warning will be sent as part of the
+performance data.
+
+=item -c, --crit
+
+Value at which a critical alert is generated. This number should be lower
+than --warn is set, but this is not enforced.
+
+=item -i, --ignore
+
+Supply index that should be ignore from the output. Multiple values are
+accepted, separately:
+
+=over
+
+check_printer -i 1 -i 2
+
+=back
+
+Will exclude supply indexes 1 and 2. To get the supply index list, run the
+check_printer utility with --debug defined and the top of the output will
+list available supply metrics as follows:
+
+=over
+
+$VAR1 = [
+ '.1.3.6.1.2.1.43.11.1.1.6.1.1 = STRING: "Black Toner"',
+ '.1.3.6.1.2.1.43.11.1.1.6.1.2 = STRING: "Drum Unit"',
+ '.1.3.6.1.2.1.43.11.1.1.7.1.1 = INTEGER: 13',
+ '.1.3.6.1.2.1.43.11.1.1.7.1.2 = INTEGER: 7',
+ '.1.3.6.1.2.1.43.11.1.1.8.1.1 = INTEGER: -2',
+ '.1.3.6.1.2.1.43.11.1.1.8.1.2 = INTEGER: -2',
+ '.1.3.6.1.2.1.43.11.1.1.9.1.1 = INTEGER: -3',
+ '.1.3.6.1.2.1.43.11.1.1.9.1.2 = INTEGER: 0'
+];
+
+=back
+
+In the above example, we are looking for the OID string starting with
+B<.1.3.6.1.2.1.43.11.1.1.6.1> and the index is the last number. To exclude the
+Drum Unit, pass I<-i 2> to check_printer
+
+=item -V, --version
+
+Print the check_printer version string and exits.
+
+=item -d, --debug
+
+Outputs debug information. If you are having problems with a printer or device,
+send the debug output to B<ecrist@secure-computing.net> and identify your printer
+model and manufacturer.
+
+=item --man
+
+Prints this man page. :)
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/control b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/control
new file mode 100644
index 0000000..baa0b25
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/control
@@ -0,0 +1,7 @@
+Homepage: https://www.secure-computing.net/trac/browser/SCN%20Open%20Source/trunk/nagios/
+Watch: https://www.secure-computing.net/trac/browser/SCN%20Open%20Source/trunk/nagios/check_printer?format=raw SHA1:d2b7d0f7ca09d2813aca9d0904f069337bb6fe53
+Uploaders: Bernd Zeimetz <bzed@debian.org>
+Description: plugin to check printer supply levels using SNMP
+ It outputs performance data for all supplies
+ found, for example toner and drum.
+Recommends: snmp, libmonitoring-plugin-perl | libnagios-plugin-perl
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/copyright b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/copyright
new file mode 100644
index 0000000..a80c5cb
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/copyright
@@ -0,0 +1,27 @@
+Copyright (c) 2007,2011 Eric F Crist
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/printer.cfg b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/printer.cfg
new file mode 100644
index 0000000..3ded7b3
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_printer/printer.cfg
@@ -0,0 +1,5 @@
+define command{
+ command_name check_printer
+ command_line /usr/lib/nagios/plugins/check_printer -h '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'
+ }
+