1package App::Netdisco::Web::Plugin::Report::SubnetUtilization; 2 3use Dancer ':syntax'; 4use Dancer::Plugin::DBIC; 5use Dancer::Plugin::Auth::Extensible; 6 7use App::Netdisco::Web::Plugin; 8use POSIX qw/strftime/; 9 10register_report({ 11 category => 'IP', 12 tag => 'subnets', 13 label => 'Subnet Utilization', 14 provides_csv => 1, 15 api_endpoint => 1, 16 api_parameters => [ 17 subnet => { 18 description => 'IP Prefix to search', 19 default => '0.0.0.0/32', 20 }, 21 daterange => { 22 description => 'Date range to search', 23 default => ('1970-01-01 to '. strftime('%Y-%m-%d', gmtime)), 24 }, 25 age_invert => { 26 description => 'Results should NOT be within daterange', 27 type => 'boolean', 28 default => 'false', 29 }, 30 ], 31}); 32 33get '/ajax/content/report/subnets' => require_login sub { 34 my $subnet = param('subnet') || '0.0.0.0/32'; 35 my $agenot = param('age_invert') || '0'; 36 37 my $daterange = param('daterange') 38 || ('1970-01-01 to '. strftime('%Y-%m-%d', gmtime)); 39 my ( $start, $end ) = $daterange =~ /(\d+-\d+-\d+)/gmx; 40 $start = $start . ' 00:00:00'; 41 $end = $end . ' 23:59:59'; 42 43 my @results = schema('netdisco')->resultset('Virtual::SubnetUtilization') 44 ->search(undef,{ 45 bind => [ $subnet, $start, $end, $start, $subnet, $start, $start ], 46 })->hri->all; 47 48 return unless scalar @results; 49 50 if ( request->is_ajax ) { 51 template 'ajax/report/subnets.tt', { results => \@results }; 52 } 53 else { 54 header( 'Content-Type' => 'text/comma-separated-values' ); 55 template 'ajax/report/subnets_csv.tt', { results => \@results }; 56 } 57}; 58 591; 60