#!/usr/bin/perl -w
use strict;
use Switch;
my $site="";
my $cluster="";
my $toversion=3;
my $line;
my $uid="";
my $i=0;
my @AS_route = ();
if($#ARGV!=1) {
die "Usage: ./generate_g5k_platform.pl g5k_username g5k_password\n";
}
print "\n";
print "\n";
print "\n";
print "\t\n";
print "\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
#printf "\t\t\t\n";
print "\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
printf "\t\t\t\n";
#printf "\t\t\n";
print "\n";
print "\t\t\n";
print "\t\t\n";
print "\t\t\n";
print "\t\t\n";
print "\t\t\n";
print "\t\t\n";
print "\t\t\n";
print "\t\t\n";
print "\t\t\n";
#print "\t\t\n";
print "\t\t\n";
`wget https://api.grid5000.fr/2.0/grid5000/sites --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
open SITES_LIGNE, 'sites' or die "Unable to open sites $!\n";
while(defined($line=))
{
if($line =~ /"uid": "(.*)",/){
$site = $1;
print "\t\t\n";
`wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
open CLUSTERS_LIGNE, 'clusters' or die "Unable to open clusters $!\n";
while(defined($line=))
{
if($line =~ /"uid": "(.*)",/){
$cluster = $1;
&get_switch($site, $cluster);
}
}
close CLUSTERS_LIGNE;
`rm clusters`;
print "\t\t\t\n";
print "\t\t\t\t\n";
print "\t\t\t\n";
print "\t\t\t\n";
print "\n";
print "\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\n\n";
print "\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\n\n";
print "\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\n\n";
print "\t\t\n";
push @AS_route, $site;
}
}
close SITES_LIGNE;
`rm sites`;
printf "\n";
while(@AS_route)
{
$site = pop @AS_route;
print "\t\t\n";
print "\t\t\t\n";
print "\t\t\n";
}
print "\t\n";
print "\n";
sub get_switch {
my $total;
my $switch="";
my @switch_list=();
my @host=();
my @host_switch=();
$site="$_[0]";
$cluster="$_[1]";
`wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters/$cluster/nodes --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
open NODES_LIGNE, 'nodes' or die "Unable to open nodes $!\n";
while(defined($line=))
{
if($line =~ /"uid": "(.*)",/)
{
$uid = $1;
push(@host, $1);
}
if($line =~ /"total": (.*),/){
$total = $1;
}
if($line =~ /"switch": "(.*)",/ && !$switch)
{
$switch = "$1";
push(@host_switch, $1);
}
if( $uid && $switch )
{
push(@switch_list, $switch);
$uid="";
$switch="";
}
}
close NODES_LIGNE;
`rm nodes`;
my %count;
my @uniq_array = grep { ++$count{$_} < 2 } @switch_list;
@uniq_array = sort (@uniq_array);
if(@switch_list && @uniq_array != 1){
if(@switch_list != @host){
printf "Take care \@host != of \@switch_list\n";
}
print "\t\t\t\n";
my @num=();
my $radical;
foreach(@uniq_array){
$switch = $_;
$i=0;
@num=();
foreach(@host_switch){
if($_ =~ $switch){
if($host[$i] =~ /$cluster-(.*)/){
push(@num, $1);
}
}
$i++;
}
my $deb;
my $fin;
@num=sort {$a <=> $b} (@num);
$radical = "";
$i=0;
foreach(@num){
if($i == 0){
$deb = $num[$i];
$fin = $num[$i];
}
else{
if($num[$i] == ($num[$i-1]+1) )
{
$fin = $num[$i];
if(@num == ($i+1)){
if($deb != $fin)
{
if(!($radical =~ /^$/))
{
$radical = $radical.";";
}
$radical = $radical.$deb."-".$fin;
$deb = $num[$i];
$fin = $num[$i];
}
else
{
$radical=$radical.";".$num[$i];
}
}
}
else
{
if($deb != $fin)
{
if(!($radical =~ /^$/))
{
$radical = $radical.",";
}
$radical = $radical.$deb."-".$fin;
$deb = $num[$i];
$fin = $num[$i];
}
else
{
$radical=$radical.",".$num[$i];
}
}
}
$i++;
}
print "\t\t\t\t\n";
}
print "\n\t\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\t\n";
print "\t\t\t\t\n\n";
print "\t\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\t\n";
print "\t\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\t\n";
print "\t\t\t\t\n";
print "\t\t\t\t\t\n";
print "\t\t\t\t\n";
print "\t\t\t\n";
}
else{
print "\t\t\t\n";
}
print "\t\t\t\n\n";
}
sub get_gflops {
switch ($_[0]) {
#Bordeaux
case "bordeplage" { print "5.2297E9" }
case "bordereau" { print "8.8925E9" }
case "borderline" { print "13.357E9" }
#Lille
case "chicon" { print "8.9618E9" }
case "chimint" { print "23.531E9" }
case "chinqchint" { print "22.270E9" }
case "chirloute" { print "24.473E9" }
#Grenoble
case "adonis" { print "23.681E9" }
case "edel" { print "23.492E9" }
case "genepi" { print "21.175E9" }
#Lyon
case "capricorne" { print "4.7233E9" }
case "sagittaire" { print "5.6693E9" }
#Nancy
case "graphene" { print "16.673E9" }
case "griffon" { print "20.678E9" }
#Orsay
case "gdx" { print "4.7153E9" }
case "netgdx" { print "4.7144E9" }
#Rennes
case "paradent" { print "21.496E9" }
case "paramount" { print "12.910E9" }
case "parapide" { print "30.130E9" }
case "parapluie" { print "27.391E9" }
#Sophia
case "helios" { print "7.7318E9" }
case "sol" { print "8.9388E9" }
case "suno" { print "23.530E9" }
#Toulouse
case "pastel" { print "9.5674E9" }
case "violette" { print "5.1143E9" }
#Reims
case "stremi" { print "TODO" }
#Luxembourg
case "granduc" { print "TODO" }
default: { print "TODO" }
}
}