From af7a74c316491862a18432d52c29d10c86c3976f Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Sun, 8 Jan 2012 16:34:58 +0000 Subject: [PATCH] handle optional dns col in node_ip --- Netdisco/lib/Netdisco/DB/Result/NodeIp.pm | 27 +++++++++++++++++--- Netdisco/lib/Netdisco/DB/ResultSet/NodeIp.pm | 19 +++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm b/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm index afd5fe64..dbaefaf4 100644 --- a/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm +++ b/Netdisco/lib/Netdisco/DB/Result/NodeIp.pm @@ -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')", diff --git a/Netdisco/lib/Netdisco/DB/ResultSet/NodeIp.pm b/Netdisco/lib/Netdisco/DB/ResultSet/NodeIp.pm index 7d48ba8f..cbab1019 100644 --- a/Netdisco/lib/Netdisco/DB/ResultSet/NodeIp.pm +++ b/Netdisco/lib/Netdisco/DB/ResultSet/NodeIp.pm @@ -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') : () ), + } ); }