/usr/share/munin/plugins/snmp__print_supplies is in munin-plugins-core 2.0.37-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | #!/usr/bin/perl -w
# -*- cperl -*-
# vim: ft=perl
=head1 NAME
snmp__print_supplies - SNMP plugin to monitor supplies levels on
printers adhering to RFC1759
=head1 APPLICABLE SYSTEMS
Any SNMP capable printer adhering to RFC1759. Using a command such
as "munin-node-configure --snmp xerox.skillingstad.no --snmpversion 2c
--snmpcommunity public | sh -x" should auto-detect all applicable
interfaces.
=head1 CONFIGURATION
As a rule SNMP plugins need site specific configuration. The default
configuration (shown here) will only work on insecure sites/devices:
[snmp_*]
env.warning 10
env.critical 5
env.version 2
env.community public
Warning and critical limits are in percentages, and default values are
10% for warnings and 5% for critical.
In general SNMP is not very secure at all unless you use SNMP version
3 which supports authentication and privacy (encryption). But in any
case the community string for your devices should not be "public".
Please see 'perldoc Munin::Plugin::SNMP' for further configuration
information.
=head1 MAGIC MARKERS
#%# family=snmpauto
#%# capabilities=snmpconf
=head1 VERSION
$Id: $
=head1 BUGS
None known.
=head1 AUTHOR
Copyright (C) 2006-2009 Rune Nordbøe Skillingstad, Sveinung Marvik.
=head1 LICENSE
GPLv2
=cut
use strict;
use Munin::Plugin;
use Munin::Plugin::SNMP;
my $MAXLABEL = 24;
my $warning = $ENV{warning} || 10;
my $critical = $ENV{critical} || 5;
my %supplies;
if(defined $ARGV[0] and $ARGV[0] eq "snmpconf") {
print "require 1.3.6.1.2.1.43.11.1.1.6.1.1\n";
print "require 1.3.6.1.2.1.43.11.1.1.8.1.1 ^\\d\n";
print "require 1.3.6.1.2.1.43.11.1.1.9.1.1 ^\\d\n";
exit 0;
}
my ($session, $error);
# SNMP needed for both config and fetch.
$session = Munin::Plugin::SNMP->session();
if(!defined ($session)) {
die "Croaking: $error";
}
&get_multiple ($session, "1.3.6.1.2.1.43.11.1.1.6", "desc");
&get_multiple ($session, "1.3.6.1.2.1.43.11.1.1.8", "max");
&get_multiple ($session, "1.3.6.1.2.1.43.11.1.1.9", "level");
&wash_data;
# Configure
if(defined $ARGV[0] and $ARGV[0] eq "config") {
my ($host,undef,$version) = Munin::Plugin::SNMP->config_session();
print "host_name $host\n" unless $host eq 'localhost';
print "graph_title Supply Level\n";
print "graph_args --base 1000 -l 0 --upper-limit 100\n";
print "graph_vlabel %\n";
print "graph_scale no\n";
print "graph_category print\n";
print "graph_info This graph represents supplies level\n";
foreach my $supply (keys(%supplies)) {
print "supply$supply.label ".(length($supplies{$supply}{desc})<=$MAXLABEL ?
$supplies{$supply}{desc} : substr($supplies{$supply}{desc},0,($MAXLABEL-3))."...");
print "\n";
print "supply$supply.draw LINE1\n";
print "supply$supply.info ".$supplies{$supply}{desc}."\n";
print "supply$supply.warning $warning:100\n";
print "supply$supply.critical $critical:100\n";
}
exit 0;
}
# Values
if (keys(%supplies) > 0) {
foreach my $supply (keys(%supplies)) {
printf "supply%s.value %.2f\n",$supply,
($supplies{$supply}{level}/$supplies{$supply}{max})*100;
}
}
sub get_multiple {
my $session = shift;
my $oid = shift;
my $type = shift;
print "# Getting table $oid...\n" if $Munin::Plugin::SNMP::DEBUG;
my $response = $session->get_table($oid);
if(!defined($response)) {
return "";
} else {
foreach my $key (keys(%{$response})) {
$supplies{&keyname($key)}{$type} = $response->{$key};
print "$key -> ".$response->{$key}."\n" if $Munin::Plugin::SNMP::DEBUG;
}
}
}
sub keyname {
my $key = shift;
$key =~ s/.*(\d+\.\d+)$/$1/;
$key =~ s/\./_/;
return $key;
}
sub wash_data {
# Get rid of supply-levels reporting negative values
foreach my $supply (keys (%supplies)) {
if ($supplies{$supply}{level} < 0) {
delete $supplies{$supply};
print "# Deleting entry $supply: supply level unknown.\n" if $Munin::Plugin::SNMP::DEBUG;
}
}
}
|