From 13e41723ba0c8e26d269f56e487c6c09367786a2 Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Thu, 10 Aug 2006 11:23:50 +0000 Subject: Add snmp* things git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@171 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede --- munin/snmp__pages | 111 +++++++++++++++++++++++++++++++++++++ munin/snmp__supplies | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 265 insertions(+) create mode 100755 munin/snmp__pages create mode 100755 munin/snmp__supplies diff --git a/munin/snmp__pages b/munin/snmp__pages new file mode 100755 index 0000000..23babf9 --- /dev/null +++ b/munin/snmp__pages @@ -0,0 +1,111 @@ +#!/usr/bin/perl -w +# +# Copyright (C) Rune Nordbøe Skillingstad +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; version 2 dated June, +# 1991. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# +# +# Graphs pagers per minute of HP printers +# +# downloaded by Peter Palfrader from http://munin.projects.linpro.no/wiki/plugin-snmp__pages +# Wed, 9 Aug 2006 16:48:17 +0200 +# +# Peter Palfrader: +# - set a minimum of 0 for pages. +# - fix graph labels +# +#%# family=snmpauto +#%# capabilities=snmpconf + +use strict; +use Net::SNMP; + +my $DEBUG = $ENV{'DEBUG'} || 0; + +my $host = $ENV{host} || undef; +my $port = $ENV{port} || 161; +my $community = $ENV{community} || "public"; +my $timeout = $ENV{timeout} || 1; + +my $response; + +if(defined $ARGV[0] and $ARGV[0] eq "snmpconf") { + print "require 1.3.6.1.2.1.43.10.2.1.4.1.1\n"; + exit 0; +} + +if($0 =~ /^(?:|.*\/)snmp_([^_]+)_pages$/) { + $host = $1; + if($host =~ /^([^:]+):(\d+)$/) { + $host = $1; + $port = $2; + } +} +elsif(!defined($host)) { + print "# Debug: $0 -- $1\n" if $DEBUG; + die "# Error: couldn't understand what I'm supposed to monitor."; +} + +my ($session, $error) = Net::SNMP->session( + -hostname => $host, + -community => $community, + -port => $port, + -timeout => $timeout +); + +if(!defined ($session)) { + die "Croaking: $error"; +} + +if(defined $ARGV[0] and $ARGV[0] eq "config") { + print "host_name $host\n"; + print "graph_title Pages +graph_args --base 1000 -l 0 +graph_vlabel Printed pages pr minute +graph_scale no +graph_category other +graph_info This graph numer of printed pages +graph_total Total +pages.label pages +pages.min 0 +pages.draw AREA +pages.type DERIVE +pages.cdef pages,60,* +pages.info pages printed per minute +"; + +exit 0; +} + +print "pages.value ", &get_single ($session, "1.3.6.1.2.1.43.10.2.1.4.1.1"), "\n"; + +sub get_single { + my $handle = shift; + my $oid = shift; + + print "# Getting single $oid...\n" if $DEBUG; + + $response = $handle->get_request ($oid); + + if(!defined $response->{$oid}) { + print "# No response\n" if $DEBUG; + return ""; + } else { + print "# Got response \"".$response->{$oid}."\"\n" if $DEBUG; + return $response->{$oid}; + } +} + diff --git a/munin/snmp__supplies b/munin/snmp__supplies new file mode 100755 index 0000000..9bfab87 --- /dev/null +++ b/munin/snmp__supplies @@ -0,0 +1,154 @@ +#!/usr/bin/perl -w +# +# Copyright (C) Rune Nordboe Skillingstad, Sveinung Marvik +# Reports supplies (ie. toner level) on printers adhering to RFC1759 +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; version 2 dated June, +# 1991. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# +# +# Graphs supplies of HP printers (toner/ink) +# +# downloaded by Peter Palfrader from http://munin.projects.linpro.no/wiki/plugin-snmp__supplies +# Wed, 9 Aug 2006 16:48:17 +0200 +# +#%# family=snmpauto +#%# capabilities=snmpconf + +use strict; +use Net::SNMP; + +my $DEBUG = $ENV{'DEBUG'} || 0; +my $MAXLABEL = 20; + +my $host = $ENV{host} || undef; +my $port = $ENV{port} || 161; +my $community = $ENV{community} || "public"; +my $iface = $ENV{interface} || undef; +my $timeout = $ENV{timeout} || 1; +my $warning = $ENV{warning} || 10; +my $critical = $ENV{critical} || 5; + +my %cache; +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; +} + +if($0 =~ /^(?:|.*\/)snmp_([^_]+)_supplies$/) { + $host = $1; + if($host =~ /^([^:]+):(\d+)$/) { + $host = $1; + $port = $2; + } +} +elsif(!defined($host)) { + print "# Debug: $0 -- $1\n" if $DEBUG; + die "# Error: couldn't understand what I'm supposed to monitor."; +} + +my ($session, $error) = Net::SNMP->session( + -hostname => $host, + -community => $community, + -port => $port, + -timeout => $timeout +); + +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") { + print "host_name $host\n"; + 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"; + print "graph_category other\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 $handle = shift; + my $oid = shift; + my $type = shift; + + print "# Getting table $oid...\n" if $DEBUG; + + my $response = $handle->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 $DEBUG; + } + } +} + +sub keyname { + my $key = shift; + if (defined $cache{$key}) { + return $cache{$key}; + } + + my $tkey = $key; + + $tkey =~ s/.*(\d+\.\d+)$/$1/; + $tkey =~ s/\./_/; + $cache{$key} = $tkey; + + return $tkey; +} + +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 $DEBUG; + } + } +} -- cgit v1.2.3