1package App::Netdisco::Worker::Plugin::Show; 2 3use Dancer ':syntax'; 4use App::Netdisco::Worker::Plugin; 5use aliased 'App::Netdisco::Worker::Status'; 6 7use Data::Printer (); 8use App::Netdisco::Transport::SNMP; 9 10register_worker({ phase => 'check' }, sub { 11 return Status->error('Missing device (-d).') 12 unless defined shift->device; 13 return Status->done('Show is able to run'); 14}); 15 16register_worker({ phase => 'main', driver => 'snmp' }, sub { 17 my ($job, $workerconf) = @_; 18 my ($device, $port, $extra) = map {$job->$_} qw/device port extra/; 19 20 $extra ||= 'interfaces'; my $class = undef; 21 my @values = split /::/, $extra; 22 $extra = pop @values; 23 if (scalar(@values)) { 24 $class = "SNMP::Info"; 25 foreach my $v (@values) { 26 last if ($v eq ''); 27 $class = $class.'::'.$v; 28 } 29 } 30 31 my $i = App::Netdisco::Transport::SNMP->reader_for($device, $class); 32 my $result = sub { eval { $i->$extra($port) } || undef }; 33 Data::Printer::p( $result->() ); 34 35 return Status->done( 36 sprintf "Showed %s response from %s", $extra, $device->ip); 37}); 38 39true; 40