6 use Data::Dump qw(dump);
8 my $community = 'public';
29 @printers = @ARGV if @ARGV;
32 model .1.3.6.1.2.1.25.3.2.1.3.1
33 serial .1.3.6.1.2.1.43.5.1.1.17
34 pages .1.3.6.1.2.1.43.10.2.1.4.1.1
35 @message .1.3.6.1.2.1.43.18.1.1.8
36 @message .1.3.6.1.2.1.43.16
37 @consumable_name .1.3.6.1.2.1.43.11.1.1.6.1
38 @consumable_max .1.3.6.1.2.1.43.11.1.1.8.1
39 @consumable_curr .1.3.6.1.2.1.43.11.1.1.9.1
42 my @oids = sort { length $a <=> length $b } values %vars;
44 $oid2name->{ $vars{$_} } = $_ foreach keys %vars;
46 my $sm = SNMP::Multi->new(
48 Community => $community,
49 Requests => SNMP::Multi::VarReq->new(
50 hosts => [ @printers ],
51 vars => [ map { [ $_ ] } values %vars ],
55 ) or die $SNMP::Multi::error;
57 warn "# working on: ", join(' ', @printers),$/;
59 my $resp = $sm->execute() or die $sm->error();
61 foreach my $host ( $resp->hosts ) {
64 foreach my $result ( $host->results ) {
65 if ( $result->error ) {
66 warn "ERROR: $host ", $result->error;
70 foreach my $v ( $result->varlists ) {
71 foreach my $i ( @$v ) {
72 my ( $oid, undef, $val, $fmt ) = @$i;
74 if ( my $name = $oid2name->{$oid} ) {
75 $status->{$name} = $val;
79 my $oid_part = substr($oid,0,length($_));
80 if ( $oid_part eq $_ ) {
81 $oid_base = $oid_part;
86 my $name = $oid2name->{$oid_base} || die "no name for $oid_base in ",dump( $oid2name );
87 if ( $name =~ s/^\@// ) {
88 push @{ $status->{$name} }, $val;
90 $status->{$name} = $val;
98 foreach my $group ( grep { /\w+_\w+/ } keys %$status ) {
99 my ( $prefix,$name ) = split(/_/,$group,2);
100 foreach my $i ( 0 .. $#{ $status->{$group} } ) {
101 $status->{$prefix}->[$i]->{$name} = $status->{$group}->[$i];
103 delete $status->{$group};
106 print "$host = ",dump($status);