diff --git a/lib/App/Netdisco/DB/Result/Virtual/DeviceLinks.pm b/lib/App/Netdisco/DB/Result/Virtual/DeviceLinks.pm index bb449135..cd6e0255 100644 --- a/lib/App/Netdisco/DB/Result/Virtual/DeviceLinks.pm +++ b/lib/App/Netdisco/DB/Result/Virtual/DeviceLinks.pm @@ -15,24 +15,28 @@ __PACKAGE__->table_class('DBIx::Class::ResultSource::View'); __PACKAGE__->table('device_links'); __PACKAGE__->result_source_instance->is_virtual(1); __PACKAGE__->result_source_instance->view_definition(<add_columns( 'left_ip' => { data_type => 'inet', }, + 'left_dns' => { + data_type => 'text', + }, + 'left_name' => { + data_type => 'text', + }, 'left_port' => { data_type => '[text]', }, @@ -56,6 +66,12 @@ __PACKAGE__->add_columns( 'right_ip' => { data_type => 'inet', }, + 'right_dns' => { + data_type => 'text', + }, + 'right_name' => { + data_type => 'text', + }, 'right_port' => { data_type => '[text]', }, diff --git a/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm b/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm index 0c0c8040..f72b7b3c 100644 --- a/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm +++ b/lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm @@ -72,6 +72,25 @@ sub to_speed { return $speed; } +sub make_link_infostring { + my $link = shift or return ''; + + my $domain = quotemeta( setting('domain_suffix') || '' ); + (my $left_name = lc($link->{left_dns} || $link->{left_name} || $link->{left_ip})) =~ s/$domain$//; + (my $right_name = lc($link->{right_dns} || $link->{right_name} || $link->{right_ip})) =~ s/$domain$//; + + if ($link->{aggports} == 1) { + return sprintf '%s:%s (%s)
%s:%s (%s)', + $left_name, $link->{left_port}->[0], $link->{left_descr}->[0], + $right_name, $link->{right_port}->[0], $link->{right_descr}->[0]; + } + else { + return sprintf '%s:(%s)
%s:(%s)', + $left_name, join(',', @{$link->{left_port}}), + $right_name, join(',', @{$link->{right_port}}); + } +} + ajax '/ajax/data/device/netmap' => require_login sub { my $q = param('q'); my $qdev = schema('netdisco')->resultset('Device') @@ -122,6 +141,7 @@ ajax '/ajax/data/device/netmap' => require_login sub { push @{$data{'links'}}, { FROMID => $link->{left_ip}, TOID => $link->{right_ip}, + INFOSTRING => make_link_infostring($link), SPEED => to_speed($link->{aggspeed}), }; diff --git a/share/public/css/netdisco.css b/share/public/css/netdisco.css index d93b6bc3..5cd4a325 100644 --- a/share/public/css/netdisco.css +++ b/share/public/css/netdisco.css @@ -478,6 +478,11 @@ td > form.nd_inline-form { font-weight: bold; } +/* netmap tooltip box */ +#netmap_pane_tooltip { + width: unset; +} + /* fixup for prepended checkbox in sidebar */ .nd_searchcheckbox { width: 121px; diff --git a/share/public/javascripts/d3-force-network-chart.js b/share/public/javascripts/d3-force-network-chart.js index 0262bfcc..eaa6266a 100644 --- a/share/public/javascripts/d3-force-network-chart.js +++ b/share/public/javascripts/d3-force-network-chart.js @@ -598,7 +598,8 @@ function netGobrechtsD3Force(domContainerId, options, apexPluginId, apexPageItem .attr("id", v.dom.containerId); } else { v.dom.container = d3.select("#" + v.dom.containerId); - d3.selectAll("#" + v.dom.containerId + "_tooltip, #" + v.dom.containerId + "_customizing").remove(); + d3.selectAll("#" + v.dom.containerId + "_customizing").remove(); + // d3.selectAll("#" + v.dom.containerId + "_tooltip").remove(); } // create SVG element, if not existing (if we have an APEX context, it is already created from the APEX plugin ) diff --git a/share/views/ajax/device/netmap.tt b/share/views/ajax/device/netmap.tt index b3d9ea50..369a4a1d 100644 --- a/share/views/ajax/device/netmap.tt +++ b/share/views/ajax/device/netmap.tt @@ -1,3 +1,4 @@ +