From 68275e6986e89e157b471e152c5ec652c95d135b Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 3 Feb 2014 23:12:17 +0000 Subject: [PATCH] Node search by date (but not time) --- Netdisco/Changes | 1 + .../App/Netdisco/Web/Plugin/Search/Node.pm | 31 ++++++++++++++++--- .../javascripts}/daterangepicker.js | 0 .../js => public/javascripts}/moment.min.js | 0 Netdisco/share/public/javascripts/netdisco.js | 21 +++++++++++++ Netdisco/share/views/js/search.js | 7 +++++ Netdisco/share/views/layouts/main.tt | 2 ++ .../share/views/sidebar/report/ipinventory.tt | 25 +-------------- Netdisco/share/views/sidebar/search/node.tt | 15 +++++++++ 9 files changed, 73 insertions(+), 29 deletions(-) rename Netdisco/share/{views/js => public/javascripts}/daterangepicker.js (100%) rename Netdisco/share/{views/js => public/javascripts}/moment.min.js (100%) diff --git a/Netdisco/Changes b/Netdisco/Changes index 92893843..3807d514 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -4,6 +4,7 @@ * [#86] Use Vendor abbrevs to enhance node display in device port view * [#74] Device Name / DNS mismatches report + * [#71] Node search by date (but not time) [ENHANCEMENTS] diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Search/Node.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Search/Node.pm index 55af43a1..33fcd2a6 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/Search/Node.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Search/Node.pm @@ -18,15 +18,36 @@ ajax '/ajax/content/search/node' => require_login sub { send_error('Missing node', 400) unless $node; content_type('text/html'); + my $agenot = param('age_invert') || '0'; + my ( $start, $end ) = param('daterange') =~ /(\d+-\d+-\d+)/gmx; + my $mac = Net::MAC->new(mac => $node, 'die' => 0, verbose => 0); my @active = (param('archived') ? () : (-bool => 'active')); + my @times = (); + if ($start and $end) { + $start = $start . ' 00:00:00'; + $end = $end . ' 23:59:59'; + if ($agenot) { + @times = (-or => [ + time_first => [ { '<', $start }, undef ], + time_last => { '>', $end }, + ]); + } + else { + @times = (-and => [ + time_first => { '>=', $start }, + time_last => { '<=', $end }, + ]); + } + } + if (! $mac->get_error) { my $sightings = schema('netdisco')->resultset('Node') - ->search_by_mac({mac => $mac->as_IEEE, @active}); + ->search_by_mac({mac => $mac->as_IEEE, @active, @times}); my $ips = schema('netdisco')->resultset('NodeIp') - ->search_by_mac({mac => $mac->as_IEEE, @active}); + ->search_by_mac({mac => $mac->as_IEEE, @active, @times}); my $ports = schema('netdisco')->resultset('DevicePort') ->search({mac => $mac->as_IEEE}); @@ -58,7 +79,7 @@ ajax '/ajax/content/search/node' => require_login sub { if (my $ip = NetAddr::IP::Lite->new($node)) { # search_by_ip() will extract cidr notation if necessary $set = schema('netdisco')->resultset('NodeIp') - ->search_by_ip({ip => $ip, @active}); + ->search_by_ip({ip => $ip, @active, @times}); } else { if (param('partial')) { @@ -69,7 +90,7 @@ ajax '/ajax/content/search/node' => require_login sub { if index($node, setting('domain_suffix')) == -1; } $set = schema('netdisco')->resultset('NodeIp') - ->search_by_dns({dns => $node, @active}); + ->search_by_dns({dns => $node, @active, @times}); # if the user selects Vendor search opt, then # we'll try the OUI company name as a fallback @@ -78,7 +99,7 @@ ajax '/ajax/content/search/node' => require_login sub { $set = schema('netdisco')->resultset('NodeIp') ->with_times ->search( - {'oui.company' => { -ilike => "\%$node\%"}}, + {'oui.company' => { -ilike => "\%$node\%"}, @times}, {'prefetch' => 'oui'}, ); } diff --git a/Netdisco/share/views/js/daterangepicker.js b/Netdisco/share/public/javascripts/daterangepicker.js similarity index 100% rename from Netdisco/share/views/js/daterangepicker.js rename to Netdisco/share/public/javascripts/daterangepicker.js diff --git a/Netdisco/share/views/js/moment.min.js b/Netdisco/share/public/javascripts/moment.min.js similarity index 100% rename from Netdisco/share/views/js/moment.min.js rename to Netdisco/share/public/javascripts/moment.min.js diff --git a/Netdisco/share/public/javascripts/netdisco.js b/Netdisco/share/public/javascripts/netdisco.js index 2bfcb63f..ad3d8188 100644 --- a/Netdisco/share/public/javascripts/netdisco.js +++ b/Netdisco/share/public/javascripts/netdisco.js @@ -271,4 +271,25 @@ $(document).ready(function() { $('.tab-pane').on('hidden', '.nd_modal', function () { $(this).toggleClass('nd_deep-horizon'); }); + + // activate daterange plugin + $('#daterange').daterangepicker({ + ranges: { + 'Today': [moment(), moment()] + ,'Yesterday': [moment().subtract('days', 1), moment().subtract('days', 1)] + ,'Last 7 Days': [moment().subtract('days', 6), moment()] + ,'Last 30 Days': [moment().subtract('days', 29), moment()] + ,'This Month': [moment().startOf('month'), moment().endOf('month')] + ,'Last Month': [moment().subtract('month', 1).startOf('month'), moment().subtract('month', 1).endOf('month')] + } + ,minDate: '2004-01-01' + ,showDropdowns: true + ,timePicker: false + ,opens: 'left' + ,format: 'YYYY-MM-DD' + ,separator: ' to ' + } + ,function(start, end) { + $('#daterange').parent('.clearfix').addClass('success'); + }); }); diff --git a/Netdisco/share/views/js/search.js b/Netdisco/share/views/js/search.js index 9dcd1681..3583649a 100644 --- a/Netdisco/share/views/js/search.js +++ b/Netdisco/share/views/js/search.js @@ -21,6 +21,13 @@ form_inputs.each(function() {device_form_state($(this))}); form_inputs.change(function() {device_form_state($(this))}); + // special case for datepicker in node sidebar + $('.nd_sidebar').on('input', '#daterange', function() { + if ($(this).prop('value') == '') { + $('#daterange').parent('.clearfix').removeClass('success'); + } + }); + // handler for copy icon in search option $('.nd_field-copy-icon').click(function() { var name = $(this).data('btn-for'); diff --git a/Netdisco/share/views/layouts/main.tt b/Netdisco/share/views/layouts/main.tt index 0279bce4..e633f352 100644 --- a/Netdisco/share/views/layouts/main.tt +++ b/Netdisco/share/views/layouts/main.tt @@ -23,6 +23,8 @@ + + diff --git a/Netdisco/share/views/sidebar/search/node.tt b/Netdisco/share/views/sidebar/search/node.tt index 3dac0b8d..7434023a 100644 --- a/Netdisco/share/views/sidebar/search/node.tt +++ b/Netdisco/share/views/sidebar/search/node.tt @@ -38,6 +38,20 @@ Partial Name +
+ Date Range:
+
+ + +
+ +
MAC address format: