sidebar with many options!!
This commit is contained in:
		| @@ -50,11 +50,9 @@ __PACKAGE__->add_columns( | ||||
| ); | ||||
|  | ||||
| __PACKAGE__->has_many('left_vlans', 'App::Netdisco::DB::Result::DevicePortVlan', | ||||
|   { 'foreign.ip' => 'self.left_ip', 'foreign.port' => 'self.left_port' }, | ||||
|   { join_type => 'INNER' } ); | ||||
|   { 'foreign.ip' => 'self.left_ip', 'foreign.port' => 'self.left_port' }); | ||||
|  | ||||
| __PACKAGE__->has_many('right_vlans', 'App::Netdisco::DB::Result::DevicePortVlan', | ||||
|   { 'foreign.ip' => 'self.right_ip', 'foreign.port' => 'self.right_port' }, | ||||
|   { join_type => 'INNER' } ); | ||||
|   { 'foreign.ip' => 'self.right_ip', 'foreign.port' => 'self.right_port' }); | ||||
|  | ||||
| 1; | ||||
|   | ||||
| @@ -52,6 +52,52 @@ ajax '/ajax/data/device/netmap' => require_login sub { | ||||
|     my $vlan = param('vlan'); | ||||
|     undef $vlan if (defined $vlan and $vlan !~ m/^\d+$/); | ||||
|  | ||||
|     my $mapshow = (param('mapshow') || 'groups'); | ||||
|     if (not $qdev or not $qdev->in_storage | ||||
|         or (defined $mapshow and $mapshow !~ m/^(?:neighbors|groups)$/)) { | ||||
|       $mapshow = 'groups'; | ||||
|     } | ||||
|  | ||||
|     my %id_for = (); | ||||
|     my %ok_dev = (); | ||||
|     my %v3data = ( nodes => {}, links => [] ); | ||||
|     my %v4data = ( nodes => [], links => [] ); | ||||
|     my $domain = quotemeta( setting('domain_suffix') || '' ); | ||||
|  | ||||
|     # LINKS | ||||
|  | ||||
|     my $rs = schema('netdisco')->resultset('Virtual::DeviceLinks')->search({}, { | ||||
|       columns => [qw/left_ip right_ip/], | ||||
|       result_class => 'DBIx::Class::ResultClass::HashRefInflator', | ||||
|     }); | ||||
|  | ||||
|     if ($vlan) { | ||||
|         $rs = $rs->search({ | ||||
|           -or => [ | ||||
|             { 'left_vlans.vlan' => $vlan }, | ||||
|             { 'right_vlans.vlan' => $vlan }, | ||||
|           ], | ||||
|         }, { | ||||
|           join => [qw/left_vlans right_vlans/], | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     my @links = $rs->all; # because we have to run this twice | ||||
|     foreach my $l (@links) { | ||||
|       next if (($mapshow eq 'neighbors') | ||||
|         and (($l->{left_ip} ne $qdev->ip) and ($l->{right_ip} ne $qdev->ip))); | ||||
|  | ||||
|       push @{$v3data{'links'}}, { | ||||
|         FROMID => $l->{left_ip}, | ||||
|         TOID   => $l->{right_ip}, | ||||
|       }; | ||||
|  | ||||
|       ++$ok_dev{$l->{left_ip}}; | ||||
|       ++$ok_dev{$l->{right_ip}}; | ||||
|     } | ||||
|  | ||||
|     # DEVICES (NODES) | ||||
|  | ||||
|     my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({ | ||||
|       device_groups => \[ '= ?', [device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ]] ]}); | ||||
|     my $pos_for = from_json( $posrow ? $posrow->positions : '{}' ); | ||||
| @@ -62,12 +108,9 @@ ajax '/ajax/data/device/netmap' => require_login sub { | ||||
|       '+select' => [\'row_number() over()'], '+as' => ['row_number'], | ||||
|     })->all; | ||||
|  | ||||
|     my %id_for = (); | ||||
|     my %v3data = ( nodes => {}, links => [] ); | ||||
|     my %v4data = ( nodes => [], links => [] ); | ||||
|     my $domain = quotemeta( setting('domain_suffix') || '' ); | ||||
|  | ||||
|     foreach my $device (@devices) { | ||||
|       next unless $ok_dev{$device->{ip}}; # vlan filter's effect | ||||
|  | ||||
|       $id_for{$device->{ip}} = $device->{'row_number'}; | ||||
|       (my $name = ($device->{dns} || lc($device->{name}) || $device->{ip})) =~ s/$domain$//; | ||||
|  | ||||
| @@ -94,25 +137,11 @@ ajax '/ajax/data/device/netmap' => require_login sub { | ||||
|       push @{$v4data{'nodes'}}, { index => ($device->{row_number} - 1) }; | ||||
|     } | ||||
|  | ||||
|     my $rs = schema('netdisco')->resultset('Virtual::DeviceLinks')->search({}, { | ||||
|       columns => [qw/left_ip right_ip/], | ||||
|       result_class => 'DBIx::Class::ResultClass::HashRefInflator', | ||||
|     }); | ||||
|     # go back and do v4 links now we have row IDs | ||||
|     foreach my $l (@links) { | ||||
|       next if (($mapshow eq 'neighbors') | ||||
|         and (($l->{left_ip} ne $qdev->ip) and ($l->{right_ip} ne $qdev->ip))); | ||||
|  | ||||
|     if ($vlan) { | ||||
|         $rs = $rs->search({ | ||||
|           'left_vlans.vlan' => $vlan, | ||||
|           'right_vlans.vlan' => $vlan, | ||||
|         }, { | ||||
|           join => [qw/left_vlans right_vlans/], | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     while (my $l = $rs->next) { | ||||
|       push @{$v3data{'links'}}, { | ||||
|         FROMID => $l->{left_ip}, | ||||
|         TOID   => $l->{right_ip}, | ||||
|       }; | ||||
|       push @{$v4data{'links'}}, { | ||||
|         source => ($id_for{$l->{left_ip}} - 1), | ||||
|         target => ($id_for{$l->{right_ip}} - 1), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user