From 50b90fd5da3a69c38d4a092781fb9764a7ccc0e7 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Sun, 5 Feb 2012 23:44:34 +0000 Subject: [PATCH] more tidying of Node/NodeIp searches --- Netdisco/lib/Netdisco/DB/Result/NodeIp.pm | 59 ++++++++++------------- Netdisco/lib/Netdisco/Web/Search.pm | 4 +- Netdisco/views/ajax/search/node_by_ip.tt | 4 +- 3 files changed, 29 insertions(+), 38 deletions(-) diff --git a/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm b/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm index 65d74366..a3707889 100644 --- a/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm +++ b/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm @@ -77,45 +77,38 @@ __PACKAGE__->has_many( node_ips => 'Netdisco::DB::Result::NodeIp', __PACKAGE__->has_many( nodes => 'Netdisco::DB::Result::Node', { 'foreign.mac' => 'self.mac' } ); -sub ip_aliases { - my ($row, $archive) = @_; +my $search_attr = { + order_by => {'-desc' => 'time_last'}, + '+select' => [ + \"to_char(time_first, 'YYYY-MM-DD HH24:MI')", + \"to_char(time_last, 'YYYY-MM-DD HH24:MI')", + ], + '+as' => [qw/ time_first_stamp time_last_stamp /], +}; - return $row->node_ips( - { - ip => { '!=' => $row->ip }, - ($archive ? () : (active => 1)), - }, - { - order_by => {'-desc' => 'time_last'}, - columns => [qw/ mac ip active /], - ( $row->result_source->has_column('dns') ? ('+columns' => 'dns') : () ), - '+select' => [ - \"to_char(time_first, 'YYYY-MM-DD HH24:MI')", - \"to_char(time_last, 'YYYY-MM-DD HH24:MI')", - ], - '+as' => [qw/ time_first time_last /], - }, - ); +sub ip_aliases { + my ($row, $cond) = @_; + my $rs = $row->node_ips({ip => { '!=' => $row->ip }}); + + $rs = $rs->search_rs({}, {'+columns' => 'dns'}) + if $rs->has_dns_col; + + return $rs->search($cond, $search_attr); } sub node_sightings { - my ($row, $archive) = @_; + my ($row, $cond) = @_; - return $row->nodes( - { - ($archive ? () : (active => 1)), - }, - { - order_by => {'-desc' => 'time_last'}, - columns => [qw/ mac switch port oui active device.dns /], - '+select' => [ - \"to_char(time_first, 'YYYY-MM-DD HH24:MI')", - \"to_char(time_last, 'YYYY-MM-DD HH24:MI')", - ], - '+as' => [qw/ time_first time_last /], + return $row + ->nodes({}, $search_attr) + ->search($cond, { + '+columns' => [qw/ device.dns /], join => 'device', - }, - ); + }); } +# accessors for custom formatted columns +sub time_first_stamp { return (shift)->get_column('time_first_stamp') } +sub time_last_stamp { return (shift)->get_column('time_last_stamp') } + 1; diff --git a/Netdisco/lib/Netdisco/Web/Search.pm b/Netdisco/lib/Netdisco/Web/Search.pm index 7adf3fe4..3d774c51 100644 --- a/Netdisco/lib/Netdisco/Web/Search.pm +++ b/Netdisco/lib/Netdisco/Web/Search.pm @@ -129,9 +129,7 @@ ajax '/ajax/content/search/node' => sub { template 'ajax/search/node_by_ip.tt', { macs => $set, - # a callback for the templates, which - # allows modification of the DB query before execution - archive_filter => sub { (shift)->search({@active}) }, + archive_filter => {@active}, }, { layout => undef }; } }; diff --git a/Netdisco/views/ajax/search/node_by_ip.tt b/Netdisco/views/ajax/search/node_by_ip.tt index f5e82295..2374cf54 100644 --- a/Netdisco/views/ajax/search/node_by_ip.tt +++ b/Netdisco/views/ajax/search/node_by_ip.tt @@ -31,7 +31,7 @@ [% row.time_last_stamp %] [% END %] - [% FOREACH node IN archive_filter(row.node_sightings) %] + [% FOREACH node IN row.node_sightings(archive_filter) %]   [% IF params.vendor %] @@ -48,7 +48,7 @@ [% END %] [% END %] - [% FOREACH nodeip IN archive_filter(row.ip_aliases) %] + [% FOREACH nodeip IN row.ip_aliases(archive_filter) %]   [% IF params.vendor %]