fix IP Inventory report to work without daterange
This commit is contained in:
@@ -10,6 +10,7 @@ use Socket6 (); # to ensure dependency is met
|
||||
use HTML::Entities (); # to ensure dependency is met
|
||||
use URI::QueryParam (); # part of URI, to add helper methods
|
||||
use Path::Class 'dir';
|
||||
use App::Netdisco::Util::Web 'interval_to_daterange';
|
||||
|
||||
use App::Netdisco::Web::AuthN;
|
||||
use App::Netdisco::Web::Static;
|
||||
@@ -62,6 +63,9 @@ hook 'before_template' => sub {
|
||||
# access to logged in user's roles
|
||||
$tokens->{user_has_role} = sub { user_has_role(@_) };
|
||||
|
||||
# create date ranges from within templates
|
||||
$tokens->{to_daterange} = sub { interval_to_daterange(@_) };
|
||||
|
||||
# fix Plugin Template Variables to be only path+query
|
||||
$tokens->{$_} = $tokens->{$_}->path_query
|
||||
for qw/search_node search_device device_ports/;
|
||||
|
||||
@@ -15,24 +15,6 @@ register_report(
|
||||
}
|
||||
);
|
||||
|
||||
# Following two Perl Core 5.10+
|
||||
use Time::Piece;
|
||||
use Time::Seconds;
|
||||
|
||||
hook 'before' => sub {
|
||||
|
||||
return
|
||||
unless ( request->path eq uri_for('/report/ipinventory')->path
|
||||
or index( request->path, uri_for('/ajax/content/report/ipinventory')->path )
|
||||
== 0 );
|
||||
|
||||
my $start = Time::Piece->new - ONE_DAY * 29;
|
||||
|
||||
params->{'limit'} ||= 256;
|
||||
params->{'daterange'}
|
||||
||= $start->ymd . " to " . Time::Piece->new->ymd;
|
||||
};
|
||||
|
||||
get '/ajax/content/report/ipinventory' => require_login sub {
|
||||
|
||||
# Default to something simple with no results to prevent
|
||||
@@ -53,7 +35,7 @@ get '/ajax/content/report/ipinventory' => require_login sub {
|
||||
# 'never' is true. TODO: Need better input validation, both JS and
|
||||
# server-side to provide user feedback
|
||||
$limit = 8192 if $limit > 8192;
|
||||
$order = $order eq 'IP' ? \'ip ASC' : \'age DESC';
|
||||
$order = $order eq 'IP' ? {-asc => 'ip'} : [{-desc => 'age'}, {-asc => 'ip'}];
|
||||
|
||||
my $rs1 = schema('netdisco')->resultset('DeviceIp')->search(
|
||||
undef,
|
||||
@@ -114,8 +96,7 @@ get '/ajax/content/report/ipinventory' => require_login sub {
|
||||
|
||||
my $rs_sub = $rs_union->search(
|
||||
{ ip => { '<<' => $subnet->cidr } },
|
||||
{ order_by => [qw( ip time_last )],
|
||||
select => [
|
||||
{ select => [
|
||||
\'DISTINCT ON (ip) ip',
|
||||
'dns',
|
||||
\qq/date_trunc('second', time_last) AS time_last/,
|
||||
@@ -148,10 +129,16 @@ get '/ajax/content/report/ipinventory' => require_login sub {
|
||||
}
|
||||
else {
|
||||
$rs = $rs_union->search(
|
||||
{ -and => [
|
||||
time_last => { '>=', $start },
|
||||
time_last => { '<=', $end },
|
||||
]
|
||||
{ -or => [
|
||||
-and => [
|
||||
time_first => undef,
|
||||
time_last => undef,
|
||||
],
|
||||
-and => [
|
||||
time_last => { '>=', $start },
|
||||
time_last => { '<=', $end },
|
||||
],
|
||||
],
|
||||
},
|
||||
{ from => { me => $rs_sub }, }
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user