[#237] Show IPv4 and/or IPv6 nodes separately in Device Ports table
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
2.033000 - 2015-08
|
2.033000 - 2015-08
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* [#237] Show IPv4 and/or IPv6 nodes separately in Device Ports table
|
||||||
|
|
||||||
[ENHANCEMENTS]
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
* Expose the created, last login and note fields for User managment
|
* Expose the created, last login and note fields for User managment
|
||||||
|
|||||||
@@ -112,6 +112,24 @@ the current Node's.
|
|||||||
__PACKAGE__->has_many( ips => 'App::Netdisco::DB::Result::NodeIp',
|
__PACKAGE__->has_many( ips => 'App::Netdisco::DB::Result::NodeIp',
|
||||||
{ 'foreign.mac' => 'self.mac', 'foreign.active' => 'self.active' } );
|
{ 'foreign.mac' => 'self.mac', 'foreign.active' => 'self.active' } );
|
||||||
|
|
||||||
|
=head2 ip4s
|
||||||
|
|
||||||
|
Same as C<ips> but for IPv4 only.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->has_many( ip4s => 'App::Netdisco::DB::Result::Virtual::NodeIp4',
|
||||||
|
{ 'foreign.mac' => 'self.mac', 'foreign.active' => 'self.active' } );
|
||||||
|
|
||||||
|
=head2 ip6s
|
||||||
|
|
||||||
|
Same as C<ips> but for IPv6 only.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->has_many( ip6s => 'App::Netdisco::DB::Result::Virtual::NodeIp6',
|
||||||
|
{ 'foreign.mac' => 'self.mac', 'foreign.active' => 'self.active' } );
|
||||||
|
|
||||||
=head2 netbios
|
=head2 netbios
|
||||||
|
|
||||||
Returns the C<node_nbt> entry associated with this Node if one exists. That
|
Returns the C<node_nbt> entry associated with this Node if one exists. That
|
||||||
|
|||||||
19
Netdisco/lib/App/Netdisco/DB/Result/Virtual/NodeIp4.pm
Normal file
19
Netdisco/lib/App/Netdisco/DB/Result/Virtual/NodeIp4.pm
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
use utf8;
|
||||||
|
package App::Netdisco::DB::Result::Virtual::NodeIp4;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use base 'App::Netdisco::DB::Result::NodeIp';
|
||||||
|
|
||||||
|
__PACKAGE__->load_components('Helper::Row::SubClass');
|
||||||
|
__PACKAGE__->subclass;
|
||||||
|
|
||||||
|
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
|
||||||
|
__PACKAGE__->table("node_ip4");
|
||||||
|
__PACKAGE__->result_source_instance->is_virtual(1);
|
||||||
|
__PACKAGE__->result_source_instance->view_definition(q{
|
||||||
|
SELECT * FROM node_ip WHERE family(ip) = 4
|
||||||
|
});
|
||||||
|
|
||||||
|
1;
|
||||||
19
Netdisco/lib/App/Netdisco/DB/Result/Virtual/NodeIp6.pm
Normal file
19
Netdisco/lib/App/Netdisco/DB/Result/Virtual/NodeIp6.pm
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
use utf8;
|
||||||
|
package App::Netdisco::DB::Result::Virtual::NodeIp6;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use base 'App::Netdisco::DB::Result::NodeIp';
|
||||||
|
|
||||||
|
__PACKAGE__->load_components('Helper::Row::SubClass');
|
||||||
|
__PACKAGE__->subclass;
|
||||||
|
|
||||||
|
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
|
||||||
|
__PACKAGE__->table("node_ip6");
|
||||||
|
__PACKAGE__->result_source_instance->is_virtual(1);
|
||||||
|
__PACKAGE__->result_source_instance->view_definition(q{
|
||||||
|
SELECT * FROM node_ip WHERE family(ip) = 6
|
||||||
|
});
|
||||||
|
|
||||||
|
1;
|
||||||
@@ -48,12 +48,13 @@ hook 'before' => sub {
|
|||||||
|
|
||||||
# view settings for port connected devices
|
# view settings for port connected devices
|
||||||
var('connected_properties' => [
|
var('connected_properties' => [
|
||||||
{ name => 'n_age', label => 'Age Stamp', default => '' },
|
{ name => 'n_age', label => 'Age Stamp', default => '' },
|
||||||
{ name => 'n_ip', label => 'IP Address', default => 'on' },
|
{ name => 'n_ip4', label => 'IPv4 Addresses', default => 'on' },
|
||||||
{ name => 'n_netbios', label => 'NetBIOS', default => 'on' },
|
{ name => 'n_ip6', label => 'IPv6 Addresses', default => 'on' },
|
||||||
{ name => 'n_ssid', label => 'SSID', default => 'on' },
|
{ name => 'n_netbios', label => 'NetBIOS', default => 'on' },
|
||||||
{ name => 'n_vendor', label => 'Vendor', default => '' },
|
{ name => 'n_ssid', label => 'SSID', default => 'on' },
|
||||||
{ name => 'n_archived', label => 'Archived Data', default => '' },
|
{ name => 'n_vendor', label => 'Vendor', default => '' },
|
||||||
|
{ name => 'n_archived', label => 'Archived Data', default => '' },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return unless (request->path eq uri_for('/device')->path
|
return unless (request->path eq uri_for('/device')->path
|
||||||
|
|||||||
@@ -136,25 +136,29 @@ get '/ajax/content/device/ports' => require_login sub {
|
|||||||
|
|
||||||
# what kind of nodes are we interested in?
|
# what kind of nodes are we interested in?
|
||||||
my $nodes_name = (param('n_archived') ? 'nodes' : 'active_nodes');
|
my $nodes_name = (param('n_archived') ? 'nodes' : 'active_nodes');
|
||||||
$nodes_name .= '_with_age' if param('c_nodes') and param('n_age');
|
$nodes_name .= '_with_age' if param('n_age');
|
||||||
$set = $set->search_rs({}, { order_by => ["${nodes_name}.vlan", "${nodes_name}.mac", "ips.ip"] })
|
|
||||||
if param('c_nodes');
|
|
||||||
|
|
||||||
# retrieve active/all connected nodes, if asked for
|
if (param('c_nodes')) {
|
||||||
$set = $set->search_rs({}, { prefetch => [{$nodes_name => 'ips'}] })
|
my $ips = ((param('n_ip4') and param('n_ip6')) ? 'ips'
|
||||||
if param('c_nodes');
|
: param('n_ip4') ? 'ip4s'
|
||||||
|
: 'ip6s');
|
||||||
|
|
||||||
# retrieve wireless SSIDs, if asked for
|
# retrieve active/all connected nodes, if asked for
|
||||||
$set = $set->search_rs({}, { prefetch => [{$nodes_name => 'wireless'}] })
|
$set = $set->search_rs({}, { prefetch => [{$nodes_name => $ips}] });
|
||||||
if param('c_nodes') && param('n_ssid');
|
$set = $set->search_rs({}, { order_by => ["${nodes_name}.vlan", "${nodes_name}.mac", "${ips}.ip"] });
|
||||||
|
|
||||||
# retrieve NetBIOS, if asked for
|
# retrieve wireless SSIDs, if asked for
|
||||||
$set = $set->search_rs({}, { prefetch => [{$nodes_name => 'netbios'}] })
|
$set = $set->search_rs({}, { prefetch => [{$nodes_name => 'wireless'}] })
|
||||||
if param('c_nodes') && param('n_netbios');
|
if param('n_ssid');
|
||||||
|
|
||||||
# retrieve vendor, if asked for
|
# retrieve NetBIOS, if asked for
|
||||||
$set = $set->search_rs({}, { prefetch => [{$nodes_name => 'oui'}] })
|
$set = $set->search_rs({}, { prefetch => [{$nodes_name => 'netbios'}] })
|
||||||
if param('c_nodes') && param('n_vendor');
|
if param('n_netbios');
|
||||||
|
|
||||||
|
# retrieve vendor, if asked for
|
||||||
|
$set = $set->search_rs({}, { prefetch => [{$nodes_name => 'oui'}] })
|
||||||
|
if param('n_vendor');
|
||||||
|
}
|
||||||
|
|
||||||
# retrieve SSID, if asked for
|
# retrieve SSID, if asked for
|
||||||
$set = $set->search({}, { prefetch => 'ssid' }) if param('c_ssid');
|
$set = $set->search({}, { prefetch => 'ssid' }) if param('c_ssid');
|
||||||
|
|||||||
@@ -331,8 +331,19 @@
|
|||||||
)
|
)
|
||||||
[% END %]
|
[% END %]
|
||||||
[% ' (' _ node.time_last_age _ ')' IF params.n_age %]
|
[% ' (' _ node.time_last_age _ ')' IF params.n_age %]
|
||||||
[% IF params.n_ip %]
|
[% IF params.n_ip4 %]
|
||||||
[% FOREACH ip IN node.ips %]
|
[% FOREACH ip IN node.ip4s %]
|
||||||
|
<br/> [% '<i class="icon-book"></i> ' IF NOT ip.active %]
|
||||||
|
[% SET dns = ip.dns %]
|
||||||
|
[% IF dns %]
|
||||||
|
<a href="[% search_node %]&q=[% ip.ip | uri %]">[% dns %] ([% ip.ip | html_entity %])</a>
|
||||||
|
[% ELSE %]
|
||||||
|
<a href="[% search_node %]&q=[% ip.ip | uri %]">[% ip.ip | html_entity %]</a>
|
||||||
|
[% END %]
|
||||||
|
[% END %]
|
||||||
|
[% END %]
|
||||||
|
[% IF params.n_ip6 %]
|
||||||
|
[% FOREACH ip IN node.ip6s %]
|
||||||
<br/> [% '<i class="icon-book"></i> ' IF NOT ip.active %]
|
<br/> [% '<i class="icon-book"></i> ' IF NOT ip.active %]
|
||||||
[% SET dns = ip.dns %]
|
[% SET dns = ip.dns %]
|
||||||
[% IF dns %]
|
[% IF dns %]
|
||||||
|
|||||||
@@ -11,9 +11,9 @@
|
|||||||
[% headers.push('Node MAC') %]
|
[% headers.push('Node MAC') %]
|
||||||
[% headers.push('Archived Node') %]
|
[% headers.push('Archived Node') %]
|
||||||
[% headers.push('Age Stamp') IF params.n_age %]
|
[% headers.push('Age Stamp') IF params.n_age %]
|
||||||
[% headers.push('Node IP') IF params.n_ip %]
|
[% headers.push('Node IP') IF params.n_ip4 OR params.n_ip6 %]
|
||||||
[% headers.push('Node DNS') IF params.n_ip %]
|
[% headers.push('Node DNS') IF params.n_ip4 OR params.n_ip6 %]
|
||||||
[% headers.push('Archived IP') IF params.n_ip %]
|
[% headers.push('Archived IP') IF params.n_ip4 OR params.n_ip6 %]
|
||||||
[% ELSIF item.name == 'c_duplex' %]
|
[% ELSIF item.name == 'c_duplex' %]
|
||||||
[% headers.push('Duplex Setting') %]
|
[% headers.push('Duplex Setting') %]
|
||||||
[% headers.push('Duplex') %]
|
[% headers.push('Duplex') %]
|
||||||
@@ -132,9 +132,9 @@
|
|||||||
[% myport.push('') %]
|
[% myport.push('') %]
|
||||||
[% myport.push('') %]
|
[% myport.push('') %]
|
||||||
[% myport.push('') IF params.n_age %]
|
[% myport.push('') IF params.n_age %]
|
||||||
[% myport.push('') IF params.n_ip %]
|
[% myport.push('') IF params.n_ip4 OR params.n_ip6 %]
|
||||||
[% myport.push('') IF params.n_ip %]
|
[% myport.push('') IF params.n_ip4 OR params.n_ip6 %]
|
||||||
[% myport.push('') IF params.n_ip %]
|
[% myport.push('') IF params.n_ip4 OR params.n_ip6 %]
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
[% IF params.c_neighbors %]
|
[% IF params.c_neighbors %]
|
||||||
@@ -184,21 +184,36 @@
|
|||||||
|
|
||||||
[% CALL mynode.push(node.time_last_age) IF params.n_age %]
|
[% CALL mynode.push(node.time_last_age) IF params.n_age %]
|
||||||
|
|
||||||
[% IF params.n_ip %]
|
[% IF params.n_ip4 OR params.n_ip6 %]
|
||||||
[% mynode.push('') %]
|
[% mynode.push('') %]
|
||||||
[% mynode.push('') %]
|
[% mynode.push('') %]
|
||||||
[% mynode.push('') %]
|
[% mynode.push('') %]
|
||||||
[% SET has_ips = 0 %]
|
[% SET has_ips = 0 %]
|
||||||
|
|
||||||
[% FOREACH ip IN node.ips %]
|
[% IF params.n_ip4 %]
|
||||||
[% SET has_ips = 1 %]
|
[% FOREACH ip IN node.ip4s %]
|
||||||
|
[% SET has_ips = 1 %]
|
||||||
|
|
||||||
[% CALL mynode.splice(-3, 1, ip.ip) %]
|
[% CALL mynode.splice(-3, 1, ip.ip) %]
|
||||||
[% CALL mynode.splice(-2, 1, ip.dns) %]
|
[% CALL mynode.splice(-2, 1, ip.dns) %]
|
||||||
[% CALL mynode.splice(-1, 1, (ip.active ? 'No' : 'Yes')) %]
|
[% CALL mynode.splice(-1, 1, (ip.active ? 'No' : 'Yes')) %]
|
||||||
|
|
||||||
[% CALL myport.splice(c_nodes_pos, mynode.size, mynode) %]
|
[% CALL myport.splice(c_nodes_pos, mynode.size, mynode) %]
|
||||||
[% CSV.dump(myport) %]
|
[% CSV.dump(myport) %]
|
||||||
|
[% END %]
|
||||||
|
[% END %]
|
||||||
|
|
||||||
|
[% IF params.n_ip6 %]
|
||||||
|
[% FOREACH ip IN node.ip6s %]
|
||||||
|
[% SET has_ips = 1 %]
|
||||||
|
|
||||||
|
[% CALL mynode.splice(-3, 1, ip.ip) %]
|
||||||
|
[% CALL mynode.splice(-2, 1, ip.dns) %]
|
||||||
|
[% CALL mynode.splice(-1, 1, (ip.active ? 'No' : 'Yes')) %]
|
||||||
|
|
||||||
|
[% CALL myport.splice(c_nodes_pos, mynode.size, mynode) %]
|
||||||
|
[% CSV.dump(myport) %]
|
||||||
|
[% END %]
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
[% CSV.dump(myport) IF NOT has_ips %]
|
[% CSV.dump(myport) IF NOT has_ips %]
|
||||||
|
|||||||
Reference in New Issue
Block a user