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