6 use Data::Dump qw(dump);
8 my $debug = $ENV{DEBUG} || 0;
10 my $community = 'public';
31 @printers = @ARGV if @ARGV;
33 # remove final .1 since we are using bulkwalk to get values!
35 info iso.3.6.1.2.1.1.1.0
36 name iso.3.6.1.2.1.43.5.1.1.16.1
37 serial iso.3.6.1.2.1.43.5.1.1.17.1
38 pages iso.3.6.1.2.1.43.10.2.1.4.1
39 @message iso.3.6.1.2.1.43.18.1.1.8
40 @consumable_name iso.3.6.1.2.1.43.11.1.1.6.1
41 @consumable_max iso.3.6.1.2.1.43.11.1.1.8.1
42 @consumable_curr iso.3.6.1.2.1.43.11.1.1.9.1
47 while ( my ($name,$oid) = each %vars ) {
48 $oid =~ s/\.[0-1]$// if $name !~ /^\@/;
50 $oid2name->{$oid} = $name;
52 my @oids = sort { length $a <=> length $b } keys %$oid2name;
53 warn "# vars = ",dump(@vars) if $debug;
55 my $sm = SNMP::Multi->new(
57 Community => $community,
58 Requests => SNMP::Multi::VarReq->new(
59 hosts => [ @printers ],
64 ) or die $SNMP::Multi::error;
66 warn "# working on: ", join(' ', @printers),$/;
68 my $resp = $sm->execute() or die $sm->error();
70 foreach my $host ( $resp->hosts ) {
73 foreach my $result ( $host->results ) {
74 if ( $result->error ) {
75 warn "ERROR: $host ", $result->error;
79 warn "## result = ", dump($result) if $debug;
81 foreach my $v ( $result->varlists ) {
82 foreach my $i ( @$v ) {
83 my ( $oid, undef, $val, $fmt ) = @$i;
84 if ( my $name = $oid2name->{$oid} ) {
85 $status->{$name} = $val;
89 my $oid_part = substr($oid,0,length($_));
90 if ( $oid_part eq $_ ) {
91 $oid_base = $oid_part;
96 my $name = $oid2name->{$oid_base} || die "no name for $oid in ",dump( $oid2name );
97 if ( $name =~ s/^\@// ) {
98 push @{ $status->{$name} }, $val;
100 $status->{$name} = $val;
108 foreach my $group ( grep { /\w+_\w+/ } keys %$status ) {
109 my ( $prefix,$name ) = split(/_/,$group,2);
110 foreach my $i ( 0 .. $#{ $status->{$group} } ) {
111 $status->{$prefix}->[$i]->{$name} = $status->{$group}->[$i];
113 delete $status->{$group};
116 print "$host = ",dump($status);