my $len = int($speed / 100);
- $graph->{ qq|"$from" -> "$to"| } = {
- size => $size,
- speed => $speed,
- rtt => $rtt,
- };
+ my $rev = qq|"$to" -> "$from"|;
+
+ # make edge bi-directional if speed difference is less then 10%
+ if ( $graph->{$rev} && abs($graph->{$rev}->{speed}->[0] - $speed) < ($speed/10) ) {
+ $graph->{$rev}->{speed}->[1] = int($speed);
+ $graph->{$rev}->{dir} = 'both';
+ } else {
+ $graph->{ qq|"$from" -> "$to"| } = {
+ size => $size,
+ speed => [ int($speed) ],
+ rtt => $rtt,
+ dir => 'forward',
+ };
+ }
$min ||= $speed;
$min = $speed if $speed < $min;
|,
join("\n", map {
my $node = $_;
- my $speed = $graph->{$_}->{speed};
+ my @speed = @{ $graph->{$node}->{speed} };
+ my $speed = 0;
+ $speed += $_ foreach @speed;
+ $speed /= $#speed + 1;
my $c = 'ff0000';
- $c = '00ff00' if ( $speed / 100 ) > 1;
+ $c = '00ff00' if ( $speed / 100 ) > 5;
$c = '0000ff' if ( $speed / 1000 ) > 1;
$c = '8888ff' if ( $speed / 1000 ) > 2;
- my $label = $speed;
- $label =~ s/\.\d+//;
- qq|$node [ label="$label",color="#$c",len=$speed ]|;
+ my $label = qq|labelfontsize=10,weight=$speed,|;
+ $label .= qq|headlabel=$speed[0],| if $speed[0];
+ $label .= qq|taillabel=$speed[1],| if $speed[1];
+ $label .= qq|style=dashed,| if $graph->{$node}->{dir} eq 'both';
+ qq|$node [ $label color="#$c",dir=$graph->{$node}->{dir} ]|;
} keys %$graph),
qq|
}