- Repository
- Munin (2.0)
- Last change
- 2020-09-16
- Graph Categories
- Family
- snmpauto
- Capabilities
- Language
- Perl
- License
- GPL-2.0-only
- Authors
snmp__print_supplies
Name
snmp__print_supplies - SNMP plugin to monitor supplies levels on printers adhering to RFC1759
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.
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.
Magic Markers
#%# family=snmpauto
#%# capabilities=snmpconf
Version
$Id: $
Bugs
None known.
Author
Copyright (C) 2006-2009 Rune Nordbøe Skillingstad, Sveinung Marvik.
License
GPLv2
#!@@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 (sort(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;
}
}
}