more tidying of Node/NodeIp searches

This commit is contained in:
Oliver Gorwits
2012-02-05 23:44:34 +00:00
parent 6a2f3fdf3a
commit 50b90fd5da
3 changed files with 29 additions and 38 deletions

View File

@@ -77,45 +77,38 @@ __PACKAGE__->has_many( node_ips => 'Netdisco::DB::Result::NodeIp',
__PACKAGE__->has_many( nodes => 'Netdisco::DB::Result::Node', __PACKAGE__->has_many( nodes => 'Netdisco::DB::Result::Node',
{ 'foreign.mac' => 'self.mac' } ); { 'foreign.mac' => 'self.mac' } );
sub ip_aliases { my $search_attr = {
my ($row, $archive) = @_; 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( sub ip_aliases {
{ my ($row, $cond) = @_;
ip => { '!=' => $row->ip }, my $rs = $row->node_ips({ip => { '!=' => $row->ip }});
($archive ? () : (active => 1)),
}, $rs = $rs->search_rs({}, {'+columns' => 'dns'})
{ if $rs->has_dns_col;
order_by => {'-desc' => 'time_last'},
columns => [qw/ mac ip active /], return $rs->search($cond, $search_attr);
( $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 node_sightings { sub node_sightings {
my ($row, $archive) = @_; my ($row, $cond) = @_;
return $row->nodes( return $row
{ ->nodes({}, $search_attr)
($archive ? () : (active => 1)), ->search($cond, {
}, '+columns' => [qw/ device.dns /],
{
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 /],
join => 'device', 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; 1;

View File

@@ -129,9 +129,7 @@ ajax '/ajax/content/search/node' => sub {
template 'ajax/search/node_by_ip.tt', { template 'ajax/search/node_by_ip.tt', {
macs => $set, macs => $set,
# a callback for the templates, which archive_filter => {@active},
# allows modification of the DB query before execution
archive_filter => sub { (shift)->search({@active}) },
}, { layout => undef }; }, { layout => undef };
} }
}; };

View File

@@ -31,7 +31,7 @@
<td>[% row.time_last_stamp %]</td> <td>[% row.time_last_stamp %]</td>
[% END %] [% END %]
</tr> </tr>
[% FOREACH node IN archive_filter(row.node_sightings) %] [% FOREACH node IN row.node_sightings(archive_filter) %]
<tr> <tr>
<td>&nbsp;</td> <td>&nbsp;</td>
[% IF params.vendor %] [% IF params.vendor %]
@@ -48,7 +48,7 @@
[% END %] [% END %]
</tr> </tr>
[% END %] [% END %]
[% FOREACH nodeip IN archive_filter(row.ip_aliases) %] [% FOREACH nodeip IN row.ip_aliases(archive_filter) %]
<tr> <tr>
<td>&nbsp;</td> <td>&nbsp;</td>
[% IF params.vendor %] [% IF params.vendor %]