Grab.pl

From In The Wings
Revision as of 12:00, 21 February 2008 by Jka (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Description

This script converts the output of ibnetdiscover, which is in turn a script that does a mapping of an infiniband network, into a format suitable for inputting into the dot program. This then generates a GIF image of the mappings.

Code

#!/usr/bin/perl

$tmpfile = "/tmp/ib.txt";

open(OUT, ">test.dot");

@output = `ssh -x submit ibnetdiscover --switch-map ib.map`;

for ($i=0; $i<=$#output; $i++) {
    @fields = split(/\s+/, @output[$i]);
    @vendid = split(/=/, @fields[0]);
    if (@fields[0] eq 'Switch') {
        $n1 = @fields[4];
        $switch=1;
        next;
    }
    if (@vendid[0] eq 'vendid') {
        $switch=0;
        $n1 = "";
    }
    if ($switch && @fields[3]) {
        $n2 = @fields[3];
        $n1 =~ s/\"//g;
        $n2 =~ s/\"//g;
        $n1 =~ s/\-/_/g;
        $n2 =~ s/\-/_/g;
        @n1 = split(/\./, $n1);
        @n2 = split(/\./, $n2);
        if (@n1[0] && @n2[0]) {
            print OUT "\t" . @n1[0] . " -> " . @n2[0] . ";\n";
        }
    }
}
close(OUT);
system ("cat test.dot | sort -r | uniq > test.sorted");
open (OUT, ">test.dot");
print OUT "digraph G {\n";
print OUT "\trankdir = LR;\n";
print OUT "\tranksep = \"2.0\";\n";
print OUT "\t{ rank = same;\n";
print OUT "\t  \"ib9601\"; \"ib9602\";\n";
print OUT "\t};\n";
close (OUT);
system ("cat test.sorted >> test.dot");
system ("echo '}' >> test.dot");
system ("dot -Tgif test.dot -o graph.gif");
system ("rm test.dot test.sorted");