handle optional dns col in node_ip

This commit is contained in:
Oliver Gorwits
2012-01-08 16:34:58 +00:00
parent daea7243be
commit af7a74c316
2 changed files with 40 additions and 6 deletions

View File

@@ -30,8 +30,6 @@ __PACKAGE__->add_columns(
is_nullable => 1,
original => { default_value => \"now()" },
},
"dns",
{ data_type => "text", is_nullable => 1 },
);
__PACKAGE__->set_primary_key("mac", "ip");
@@ -39,6 +37,28 @@ __PACKAGE__->set_primary_key("mac", "ip");
# Created by DBIx::Class::Schema::Loader v0.07015 @ 2012-01-07 14:20:02
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9+CuvuVWH88WxAf6IBij8g
# some customize their node_ip table to have a dns column which
# is the cached record at the time of discovery
__PACKAGE__->add_column("dns" =>
{ data_type => "text", is_nullable => 1, accessor => undef });
sub dns {
my $row = shift;
return $row->get_column('dns')
if $row->result_source->has_column('dns');
use Net::DNS;
my $q = Net::DNS::Resolver->new->query($row->ip);
if ($q) {
foreach my $rr ($q->answer) {
next unless $rr->type eq 'PTR';
return $rr->ptrdname;
}
}
return undef;
}
__PACKAGE__->belongs_to( oui => 'Netdisco::DB::Result::Oui',
sub {
my $args = shift;
@@ -64,7 +84,8 @@ sub ip_aliases {
},
{
order_by => {'-desc' => 'time_last'},
columns => [qw/ mac ip dns active /],
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')",

View File

@@ -1,9 +1,16 @@
package Netdisco::DB::ResultSet::NodeIp;
use base 'DBIx::Class::ResultSet';
# some customize their node_ip table to have a dns column which
# is the cached record at the time of discovery
sub has_dns_col {
my $set = shift;
return $set->result_source->has_column('dns');
}
my $search_attr = {
order_by => {'-desc' => 'time_last'},
columns => [qw/ mac ip dns active oui.company /],
columns => [qw/ mac ip active oui.company /],
'+select' => [
\"to_char(time_first, 'YYYY-MM-DD HH24:MI')",
\"to_char(time_last, 'YYYY-MM-DD HH24:MI')",
@@ -27,7 +34,10 @@ sub by_ip {
ip => { $op => $ip },
($archive ? () : (active => 1)),
},
$search_attr,
{
%$search_attr,
( $set->has_dns_col ? ('+columns' => 'dns') : () ),
}
);
}
@@ -40,7 +50,10 @@ sub by_name {
dns => { '-ilike' => $name },
($archive ? () : (active => 1)),
},
$search_attr,
{
%$search_attr,
( $set->has_dns_col ? ('+columns' => 'dns') : () ),
}
);
}