From: Dobrica Pavlinusic Date: Mon, 29 Nov 2010 19:38:25 +0000 (+0100) Subject: first version of callback based on Net::SNMP X-Git-Url: http://git.rot13.org/?p=snmp-json.git;a=commitdiff_plain;h=1b5651a953a30d912a7ba1552a3e1cefd3d42190 first version of callback based on Net::SNMP --- diff --git a/printer-callbacks.pl b/printer-callbacks.pl new file mode 100755 index 0000000..43816dc --- /dev/null +++ b/printer-callbacks.pl @@ -0,0 +1,91 @@ +#!/usr/bin/perl +use warnings; +use strict; + +use Net::SNMP; +use Data::Dump qw(dump); + +my $community = 'public'; +my @printers = qw( +10.60.0.20 + +10.60.0.40 + +10.60.3.15 +10.60.3.17 +); + +@printers = @ARGV if @ARGV; + +my %vars = qw[ +info iso.3.6.1.2.1.1.1.0 +hostname iso.3.6.1.2.1.43.5.1.1.16.1 +serial iso.3.6.1.2.1.43.5.1.1.17.1 +pages iso.3.6.1.2.1.43.10.2.1.4.1 +@message iso.3.6.1.2.1.43.18.1.1.8 +@consumable_name iso.3.6.1.2.1.43.11.1.1.6.1.1 +@consumable_max iso.3.6.1.2.1.43.11.1.1.8.1 +@consumable_curr iso.3.6.1.2.1.43.11.1.1.9.1 +@tray_dim_x iso.3.6.1.2.1.43.8.2.1.4.1 +@tray_dim_y iso.3.6.1.2.1.43.8.2.1.5.1 +@tray_max iso.3.6.1.2.1.43.8.2.1.9.1 +@tray_capacity iso.3.6.1.2.1.43.8.2.1.10.1 +@tray_name iso.3.6.1.2.1.43.8.2.1.13.1 +]; + +our $response; + +sub columns_cb { + my ( $session, $oid, $name ) = @_; + + if ( ! defined $session->var_bind_list ) { + warn "ERROR: ",$session->hostname, " $oid $name ", $session->error, "\n"; + warn dump($session); + return; + } + + + warn "# $oid $name var_bind_list ", dump( $session->var_bind_list ); + my $results = $session->var_bind_list; + while ( my ($r_oid,$val) = each %$results ) { + if ( $name =~ m{^\@} ) { + my $offset = $1 - 1 if $r_oid =~ m{^\Q$oid\E\.?(\d+)}; + $response->{ $session->hostname }->{ $name }->[ $offset ] = $results->{$r_oid}; + } else { + $response->{ $session->hostname }->{ $name } = $results->{$r_oid}; + } + } +} + +foreach my $host ( @printers ) { + + my ( $snmp, $err ) = Net::SNMP->session( + -hostname => $host, + -version => 1, + -community => $community, + -timeout => 2, + -retries => 0, + -nonblocking => 1, + ); + + if ( ! $snmp ) { + warn "ERROR: $host $err\n"; + next; + } + + while ( my ($name,$oid) = each %vars ) { + warn "# $name $oid\n"; + $oid =~ s{^iso}{.1}; + if ( $name =~ m/^\@/ ) { + $snmp->get_entries( -columns => [ $oid ], -callback => [ \&columns_cb, $oid, $name ] ); + } else { + $snmp->get_request( -varbindlist => [ $oid ], -callback => [ \&columns_cb, $oid, $name ] ); + } + } + +} + +warn "# dispatch requests for ",dump(@printers); +snmp_dispatcher; + +print dump($response);