1package App::Netdisco::Web::Plugin::AdminTask::UndiscoveredNeighbors; 2 3use strict; 4use warnings; 5use Dancer ':syntax'; 6use Dancer::Plugin::DBIC; 7use Dancer::Plugin::Auth::Extensible; 8use App::Netdisco::Util::Device qw/is_discoverable/; 9 10use App::Netdisco::Web::Plugin; 11 12register_admin_task( 13 { tag => 'undiscoveredneighbors', 14 label => 'Undiscovered Neighbors', 15 provides_csv => 1, 16 } 17); 18 19get '/ajax/content/admin/undiscoveredneighbors' => require_role admin => sub { 20 my @results 21 = schema('netdisco')->resultset('Virtual::UndiscoveredNeighbors')->hri->all; 22 return unless scalar @results; 23 24 # Don't include devices excluded from discovery by config 25 my @discoverable_results = (); 26 foreach my $r (@results) { 27 # create a new row object to avoid hitting the DB in get_device() 28 my $dev = schema('netdisco')->resultset('Device')->new({ip => $r->{remote_ip}}); 29 next unless is_discoverable( $dev, $r->{remote_type} ); 30 next if (not setting('discover_waps')) and $r->{remote_is_wap}; 31 next if (not setting('discover_phones')) and $r->{remote_is_phone}; 32 push @discoverable_results, $r; 33 } 34 return unless scalar @discoverable_results; 35 36 if ( request->is_ajax ) { 37 template 'ajax/admintask/undiscoveredneighbors.tt', 38 { results => \@discoverable_results, }, 39 { layout => undef }; 40 } 41 else { 42 header( 'Content-Type' => 'text/comma-separated-values' ); 43 template 'ajax/admintask/undiscoveredneighbors_csv.tt', 44 { results => \@discoverable_results, }, 45 { layout => undef }; 46 } 47}; 48 491; 50