[#237] Show IPv4 and/or IPv6 nodes separately in Device Ports table
This commit is contained in:
		@@ -112,6 +112,24 @@ the current Node's.
 | 
			
		||||
__PACKAGE__->has_many( ips => 'App::Netdisco::DB::Result::NodeIp',
 | 
			
		||||
  { '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
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
  var('connected_properties' => [
 | 
			
		||||
    { name => 'n_age',      label => 'Age Stamp',     default => ''   },
 | 
			
		||||
    { name => 'n_ip',       label => 'IP Address',    default => 'on' },
 | 
			
		||||
    { name => 'n_netbios',  label => 'NetBIOS',       default => 'on' },
 | 
			
		||||
    { name => 'n_ssid',     label => 'SSID',          default => 'on' },
 | 
			
		||||
    { name => 'n_vendor',   label => 'Vendor',        default => ''   },
 | 
			
		||||
    { name => 'n_archived', label => 'Archived Data', default => ''   },
 | 
			
		||||
    { name => 'n_age',      label => 'Age Stamp',      default => ''   },
 | 
			
		||||
    { name => 'n_ip4',      label => 'IPv4 Addresses', default => 'on' },
 | 
			
		||||
    { name => 'n_ip6',      label => 'IPv6 Addresses', default => 'on' },
 | 
			
		||||
    { name => 'n_netbios',  label => 'NetBIOS',        default => 'on' },
 | 
			
		||||
    { name => 'n_ssid',     label => 'SSID',           default => 'on' },
 | 
			
		||||
    { name => 'n_vendor',   label => 'Vendor',         default => ''   },
 | 
			
		||||
    { name => 'n_archived', label => 'Archived Data',  default => ''   },
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  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?
 | 
			
		||||
    my $nodes_name = (param('n_archived') ? 'nodes' : 'active_nodes');
 | 
			
		||||
    $nodes_name .= '_with_age' if param('c_nodes') and param('n_age');
 | 
			
		||||
    $set = $set->search_rs({}, { order_by => ["${nodes_name}.vlan", "${nodes_name}.mac", "ips.ip"] })
 | 
			
		||||
      if param('c_nodes');
 | 
			
		||||
    $nodes_name .= '_with_age' if param('n_age');
 | 
			
		||||
 | 
			
		||||
    # retrieve active/all connected nodes, if asked for
 | 
			
		||||
    $set = $set->search_rs({}, { prefetch => [{$nodes_name => 'ips'}] })
 | 
			
		||||
      if param('c_nodes');
 | 
			
		||||
    if (param('c_nodes')) {
 | 
			
		||||
        my $ips = ((param('n_ip4') and param('n_ip6')) ? 'ips'
 | 
			
		||||
                  : param('n_ip4') ? 'ip4s'
 | 
			
		||||
                  : 'ip6s');
 | 
			
		||||
 | 
			
		||||
    # retrieve wireless SSIDs, if asked for
 | 
			
		||||
    $set = $set->search_rs({}, { prefetch => [{$nodes_name => 'wireless'}] })
 | 
			
		||||
      if param('c_nodes') && param('n_ssid');
 | 
			
		||||
        # retrieve active/all connected nodes, if asked for
 | 
			
		||||
        $set = $set->search_rs({}, { prefetch => [{$nodes_name => $ips}] });
 | 
			
		||||
        $set = $set->search_rs({}, { order_by => ["${nodes_name}.vlan", "${nodes_name}.mac", "${ips}.ip"] });
 | 
			
		||||
 | 
			
		||||
    # retrieve NetBIOS, if asked for
 | 
			
		||||
    $set = $set->search_rs({}, { prefetch => [{$nodes_name => 'netbios'}] })
 | 
			
		||||
      if param('c_nodes') && param('n_netbios');
 | 
			
		||||
        # retrieve wireless SSIDs, if asked for
 | 
			
		||||
        $set = $set->search_rs({}, { prefetch => [{$nodes_name => 'wireless'}] })
 | 
			
		||||
          if param('n_ssid');
 | 
			
		||||
 | 
			
		||||
    # retrieve vendor, if asked for
 | 
			
		||||
    $set = $set->search_rs({}, { prefetch => [{$nodes_name => 'oui'}] })
 | 
			
		||||
      if param('c_nodes') && param('n_vendor');
 | 
			
		||||
        # retrieve NetBIOS, if asked for
 | 
			
		||||
        $set = $set->search_rs({}, { prefetch => [{$nodes_name => 'netbios'}] })
 | 
			
		||||
          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
 | 
			
		||||
    $set = $set->search({}, { prefetch => 'ssid' }) if param('c_ssid');
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user