10 foreach my $file ( glob '*/*.np' ) {
12 my $direction = $file;
13 $direction =~ s/\.np$//;
14 my ( $from, $to ) = split(m{/},$direction,2);
16 my $line = `tail -1 $file`;
19 my ( $size, $speed, $rtt ) = split(/\s+/, $line);
21 warn "$from -> $to | $size | $speed | $rtt\n";
23 my $len = int($speed / 100);
25 my $rev = qq|"$to" -> "$from"|;
27 # make edge bi-directional if speed difference is less then 10%
28 if ( $graph->{$rev} && abs($graph->{$rev}->{speed}->[0] - $speed) < ($speed/10) ) {
29 $graph->{$rev}->{speed}->[1] = int($speed);
30 $graph->{$rev}->{dir} = 'both';
32 $graph->{ qq|"$from" -> "$to"| } = {
34 speed => [ int($speed) ],
41 $min = $speed if $speed < $min;
44 $max = $speed if $speed > $max;
48 warn "# speed $min ... $max\n";
55 my @speed = @{ $graph->{$node}->{speed} };
57 $speed += $_ foreach @speed;
58 $speed /= $#speed + 1;
60 $c = '00ff00' if ( $speed / 100 ) > 5;
61 $c = '0000ff' if ( $speed / 1000 ) > 1;
62 $c = '8888ff' if ( $speed / 1000 ) > 2;
63 my $label = qq|labelfontsize=10,weight=$speed,|;
64 $label .= qq|headlabel=$speed[0],| if $speed[0];
65 $label .= qq|taillabel=$speed[1],| if $speed[1];
66 $label .= qq|style=dashed,| if $graph->{$node}->{dir} eq 'both';
67 qq|$node [ $label color="#$c",dir=$graph->{$node}->{dir} ]|;