3 import java.io.FileInputStream;
4 import java.io.FileNotFoundException;
5 import java.io.FileOutputStream;
6 import java.io.OutputStreamWriter;
7 import java.io.PrintWriter;
8 import java.net.InetAddress;
9 import java.util.ArrayList;
11 import com.thoughtworks.xstream.XStream;
12 import com.thoughtworks.xstream.io.xml.DomDriver;
17 * Class providing some tools to the library
18 * @author Séastien Miquée
23 * Creation of the representation of the node in the Mapping point of view. It needs
24 * some information about the computing node, which will be exploited by mapping
26 * @return A node from the Mapping library
28 public static GNode createGNode()
30 /** Using the Linpack class **/
31 Linpack linpack = new Linpack() ;
34 GNode n = new GNode() ;
42 /** CPU information **/
44 /* Amount of available computing cores */
45 nbCore = Runtime.getRuntime().availableProcessors() ;
47 /* Average MegaFlops of each core */
48 double tmp_mflops = 0 ;
51 for( int i = 0 ; i < loop ; i++ )
53 tmp_mflops += linpack.getMFlops() ;
56 mflops = (int) tmp_mflops / loop ;
59 /** Memory information **/
60 memory = (int) Runtime.getRuntime().maxMemory() / 1024 / 1024 ;
65 InetAddress addr = InetAddress.getLocalHost() ;
66 name = new String( addr.getCanonicalHostName() ) ;
67 } catch( final Exception e ) {
68 System.err.println( "Unalbe to retrieve host's name !" ) ;
74 /* Updating node information */
75 n.setFrequency( frequency ) ;
76 n.setMFlops( mflops ) ;
77 n.setMemory( memory ) ;
78 n.setNb_cores( nbCore ) ;
85 * Creation of the representation of the grid, according to clusters into sites.
86 * This representation may only fit on Grid'5000 like architectures (with computing
87 * nodes name based on the following pattern |cluster_name|id_of_node_into_cluster|.|site_of_cluster|.|organisation|.*|).
88 * @param _an the list of computing nodes connected
89 * @return the grid's architecture
91 public static Grid createGridG5k( ArrayList<GNode> _an )
93 Grid gr = new Grid() ;
97 String cluster = "", site = "" ;
99 ArrayList<Cluster> clusters = new ArrayList<Cluster>() ;
101 for( int i = 0 ; i < _an.size() ; i++ )
103 /* Variables edition */
105 String names[] = decodeG5Knames( _an.get( i ).getName() ) ;
107 cluster = names[ 1 ] ;
110 /* Insertion of the node in its cluster */
111 boolean trouve = false ;
113 for( int j = 0 ; j < clusters.size() ; j++ )
115 if( clusters.get( j ).getName().equals( cluster ) && clusters.get( j ).getSite().equals( site ))
117 _an.get( i ).setInCluster( true ) ;
118 _an.get( i ).setMapped( false ) ;
119 _an.get( i ).setSite( clusters.get( j ).getSite() ) ;
120 _an.get( i ).setCluster( clusters.get( j ).getName() ) ;
121 clusters.get( j ).addGNode( _an.get( i ) ) ;
130 Cluster cl = new Cluster() ;
132 cl.setName( cluster ) ;
135 _an.get( i ).setInCluster( true ) ;
136 _an.get( i ).setMapped( false ) ;
137 _an.get( i ).setSite( site ) ;
138 _an.get( i ).setCluster( cluster ) ;
140 cl.addGNode( _an.get( i ) ) ;
146 gr.addClusters( clusters ) ;
155 * Return the three parts of the name of a node on Grid'5000.
156 * @param _name The full name of the G5K node
157 * @return The three parts of the name
159 protected static String[] decodeG5Knames( String _name )
162 String tab[] = new String[ 5 ] ;
163 String ret[] = new String[ 3 ] ;
165 temp = _name.replace('.', '!' ) ;
167 tab = temp.split( "!" ) ;
172 tab = ret[0].split( "-" ) ;
174 ret[ 1 ] = tab[ 0 ] ;
181 * Write the Grid object in an XML file.
182 * @param _gl Grid graph to be write
183 * @param _file File's name
184 * @param _path File's path
186 public static void writeGrid( Grid _gl, String _file, String _path )
188 if( _file.equals( "" ) )
190 System.err.println( "No file's name !\n" ) ;
194 if ( ! _file.endsWith( ".xml" ) )
196 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
199 if( ! _file.equals( "" ) )
203 if( _path.length() != 0 )
205 path = _path+"/"+_file ;
207 path = new String( "./" + _file ) ;
210 XStream xstream = new XStream( new DomDriver() ) ;
212 String xml = xstream.toXML( _gl ) ;
214 PrintWriter ecrivain = null ;
217 ecrivain = new PrintWriter( new OutputStreamWriter( new FileOutputStream( path ), "UTF8" ) ) ;
219 ecrivain.println( "<?xml version=\"1.0\" encoding=\"UTF8\"?>" ) ;
220 ecrivain.println( xml ) ;
223 } catch( Exception e ) {
224 System.err.println( "\nError during the write opération !\n" ) ;
225 e.printStackTrace() ;
231 * Write an application Graph in a file.
232 * @param _gr Application Graph to be write
233 * @param _file File's name
234 * @param _path File's path
236 public static void writeGraph( Graph _gr, String _file, String _path )
238 if( _file.equals( "" ) )
240 System.err.println( "No file's name !\n" ) ;
244 if ( ! _file.endsWith( ".xml" ) )
246 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
249 if( ! _file.equals( "" ) )
253 if( _path.length() != 0 )
255 path = _path+"/"+_file ;
257 path = new String( "./" + _file ) ;
260 XStream xstream = new XStream( new DomDriver() ) ;
262 String xml = xstream.toXML( _gr ) ;
264 PrintWriter ecrivain = null ;
267 ecrivain = new PrintWriter( new OutputStreamWriter( new FileOutputStream( path ), "UTF8" ) ) ;
269 ecrivain.println( "<?xml version=\"1.0\" encoding=\"UTF8\"?>" ) ;
270 ecrivain.println( xml ) ;
273 } catch( Exception e ) {
274 System.err.println( "\nError during the write opération !\n" ) ;
275 e.printStackTrace() ;
282 * Read an application Graph from a file.
283 * @param _file File's name
284 * @param _path File's path
285 * @return The application Graph read
287 public static Graph readGraph( String _path, String _file )
289 if ( _file.equals( "" ) )
291 System.err.println( "No file's name !\n" ) ;
295 if ( ! _file.endsWith( ".xml" ) )
297 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
302 if( _path.length() != 0 )
304 path = _path+"/"+_file ;
306 path = new String( "./" + _file ) ;
311 XStream xstream = new XStream( new DomDriver() ) ;
314 gr = (Graph) xstream.fromXML( new FileInputStream( path ) ) ;
315 } catch( FileNotFoundException e ) {
316 System.err.println( "File not found !\n" ) ;
319 } catch( ClassCastException e ) {
320 System.err.println( "The file does not contain a valid Graph" ) ;
321 e.printStackTrace() ;
330 * Read a Grid graph from a file.
331 * @param _file File's name
332 * @param _path File's path
333 * @return The Grid graph read
335 public static Grid readGrid( String _path, String _file )
337 if ( _file.equals( "" ) )
339 System.err.println( "No file's name !\n" ) ;
343 if ( ! _file.endsWith( ".xml" ) )
345 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
350 if( _path.length() != 0 )
352 path = _path+"/"+_file ;
354 path = new String( "./" + _file ) ;
359 XStream xstream = new XStream( new DomDriver() ) ;
362 gr = (Grid) xstream.fromXML( new FileInputStream( path ) ) ;
363 } catch( FileNotFoundException e ) {
364 System.err.println( "File not found !\n" ) ;
367 } catch( ClassCastException e ) {
368 System.err.println( "The file does not contain a valid Grid" ) ;
369 e.printStackTrace() ;
379 /** La programmation est un art, respectons ceux qui la pratiquent !! **/