contrib-munin/plugins/printer/snmp__hpclj

225 lines
4.9 KiB
Perl
Executable File

#!/usr/bin/perl -w
=head1 NAME
Monitor Consumables of HP Color LaserJet Printers.
Should also work on non-Color LaserJet Printers though.
=head1 AUTHOR
Kai Boenke
=head1 LICENSE
Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
=back
#####
# Enable SNMP-Discovery
###
=head1 MAGIC MARKERS
#%# family=snmpauto
#%# capabilities=snmpconf
=cut
if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") {
print "require 1.3.6.1.2.1.43.11.1.1.9.1.1\n";
exit 0;
}
#####
# Initialize
###
use strict;
use Munin::Plugin::SNMP;
my $session = Munin::Plugin::SNMP->session();
#####
# Declare OIDs
###
use constant oid_black_max => ".1.3.6.1.2.1.43.11.1.1.8.1.1";
use constant oid_black_cur => ".1.3.6.1.2.1.43.11.1.1.9.1.1";
use constant oid_cyan_max => ".1.3.6.1.2.1.43.11.1.1.8.1.2";
use constant oid_cyan_cur => ".1.3.6.1.2.1.43.11.1.1.9.1.2";
use constant oid_magenta_max => ".1.3.6.1.2.1.43.11.1.1.8.1.3";
use constant oid_magenta_cur => ".1.3.6.1.2.1.43.11.1.1.9.1.3";
use constant oid_yellow_max => ".1.3.6.1.2.1.43.11.1.1.8.1.4";
use constant oid_yellow_cur => ".1.3.6.1.2.1.43.11.1.1.9.1.4";
use constant oid_tray1_max => ".1.3.6.1.2.1.43.8.2.1.9.1.1";
use constant oid_tray1_cur => ".1.3.6.1.2.1.43.8.2.1.10.1.1";
use constant oid_tray2_max => ".1.3.6.1.2.1.43.8.2.1.9.1.2";
use constant oid_tray2_cur => ".1.3.6.1.2.1.43.8.2.1.10.1.2";
use constant oid_tray3_max => ".1.3.6.1.2.1.43.8.2.1.9.1.3";
use constant oid_tray3_cur => ".1.3.6.1.2.1.43.8.2.1.10.1.3";
use constant oid_pagecount_total => ".1.3.6.1.2.1.43.10.2.1.4.1.1";
#####
# Config
###
if (defined $ARGV[0] and $ARGV[0] eq "config") {
my ($host) = Munin::Plugin::SNMP->config_session();
print "host_name $host\n" unless $host eq 'localhost';
print "multigraph hpclj
graph_category printing
graph_title HP Printer Consumption Levels
graph_info This graph shows Consumption-Levels on HP Printers.
graph_vlabel %
graph_args --upper-limit 100 -l 0
graph_scale no
";
print "black.label Black Toner Level
black.draw LINE2
black.type GAUGE
black.colour 000000
black.warning 10:
black.critical 3:
black.min 0
black.max 100
";
if(oidExists(oid_cyan_max)){
print "cyan.label Cyan Toner Level
cyan.draw LINE2
cyan.type GAUGE
cyan.colour 00FFFF
cyan.warning 5:
cyan.critical 1:
cyan.min 0
cyan.max 100
";
}
if(oidExists(oid_magenta_max)){
print "magenta.label Magenta Toner Level
magenta.draw LINE2
magenta.type GAUGE
magenta.colour FF00FF
magenta.warning 5:
magenta.critical 1:
magenta.min 0
magenta.max 100
";
}
if(oidExists(oid_yellow_max)){
print "yellow.label Yellow Toner Level
yellow.draw LINE2
yellow.type GAUGE
yellow.colour FFFF00
yellow.warning 5:
yellow.critical 1:
yellow.min 0
yellow.max 100
";
}
if(oidExists(oid_tray1_max)){
print "tray1.label Tray1 Fill Level
tray1.draw LINE1
tray1.type GAUGE
tray1.colour 333333
tray1.min 0
tray1.max 100
";
}
if(oidExists(oid_tray2_max)){
print "tray2.label Tray2 Fill Level
tray2.draw LINE1
tray2.type GAUGE
tray2.colour 666666
tray2.min 0
tray2.max 100
";
}
if(oidExists(oid_tray3_max)){
print "tray3.label Tray3 Fill Level
tray3.draw LINE1
tray3.type GAUGE
tray3.colour 999999
tray3.min 0
tray3.max 100
";
}
print "multigraph hpclj_pagecount
graph_category printing
graph_title HP Printer Page Counters
graph_info This graph shows Page-Counters for HP Printers.
graph_vlabel Pages
graph_args --base 1000 -l 0
";
print "pagecount.label Printouts
pagecount.draw AREA
pagecount.colour 000000
";
exit 0;
}
#####
# Get Values
###
print "multigraph hpclj\n";
printPercentageValue("black", oid_black_cur, oid_black_max);
printPercentageValue("cyan", oid_cyan_cur, oid_cyan_max);
printPercentageValue("magenta", oid_magenta_cur, oid_magenta_max);
printPercentageValue("yellow", oid_yellow_cur, oid_yellow_max);
printPercentageValue("tray1", oid_tray1_cur, oid_tray1_max);
printPercentageValue("tray2", oid_tray2_cur, oid_tray2_max);
printPercentageValue("tray3", oid_tray3_cur, oid_tray3_max);
print "multigraph hpclj_pagecount\n";
printValue("pagecount", oid_pagecount_total);
#####
# Subroutines
###
sub printPercentageValue {
if(not defined $_[0] || not defined $_[1] || not defined $_[2]) {
exit 0;
}
my $field = $_[0];
my $oid_cur = $_[1];
my $oid_max = $_[2];
if(not oidExists($oid_cur) || not oidExists($oid_max)){
return(0);
}
my $val_max = $session->get_single($oid_max) || 'U';
my $val_cur = $session->get_single($oid_cur);
if ($val_max ne 'U') {
print $field, ".value ", ($val_cur * 100 / $val_max), "\n";
}
}
sub printValue {
if(not defined $_[0] || not defined $_[1]) {
exit 0;
}
my $field = $_[0];
my $oid = $_[1];
if(not oidExists($oid)){
return(0);
}
my $val_cur = $session->get_single($oid) || 'U';
if ($val_cur ne 'U') {
print $field, ".value ", $val_cur, "\n";
}
}
sub oidExists {
if(not defined $_[0]) {
exit 0;
}
my $oid = $_[0];
my $val = $session->get_single($oid);
if(!length $val || $val eq 'noSuchInstance' || $val eq 'U'){
return(0);
}else{
return(1);
}
}