This file is indexed.

/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;
	}
    }
}