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() ;
98 String nom, cluster, site ;
101 ArrayList<Cluster> clusters = new ArrayList<Cluster>() ;
103 for( int i = 0 ; i < _an.size() ; i++ )
105 /* Variables edition */
106 String tab[] = new String[ 5 ] ;
108 temp = _an.get( i ).getName().trim().replace('.', '!' ) ;
110 tab = temp.split( "!" ) ;
115 tab = nom.split( "-" ) ;
123 //System.out.println( nom + " dans " + cluster + " du site " + site ) ;
126 /* Insertion du noeud dans son cluster */
127 boolean trouve = false ;
129 for( int j = 0 ; j < clusters.size() ; j++ )
131 if( clusters.get( j ).getName().equals( cluster ) && clusters.get( j ).getSite().equals( site ))
133 _an.get( i ).setInCluster( true ) ;
134 _an.get( i ).setSite( clusters.get( j ).getSite() ) ;
135 _an.get( i ).setCluster( clusters.get( j ).getName() ) ;
136 clusters.get( j ).addGNode( _an.get( i ) ) ;
145 Cluster cl = new Cluster() ;
147 cl.setName( cluster ) ;
150 _an.get( i ).setInCluster( true ) ;
151 _an.get( i ).setSite( site ) ;
152 _an.get( i ).setCluster( cluster ) ;
154 cl.addGNode( _an.get( i ) ) ;
160 gr.addClusters( clusters ) ;
169 * Write the Grid object in an XML file.
170 * @param _gl Grid graph to be write
171 * @param _file File's name
172 * @param _path File's path
174 public static void writeGrid( Grid _gl, String _file, String _path )
176 if( _file.equals( "" ) )
178 System.err.println( "No file's name !\n" ) ;
182 if ( ! _file.endsWith( ".xml" ) )
184 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
187 if( ! _file.equals( "" ) )
191 if( _path.length() != 0 )
193 path = _path+"/"+_file ;
195 path = new String( "./" + _file ) ;
198 XStream xstream = new XStream( new DomDriver() ) ;
200 String xml = xstream.toXML( _gl ) ;
202 PrintWriter ecrivain = null ;
205 ecrivain = new PrintWriter( new OutputStreamWriter( new FileOutputStream( path ), "UTF8" ) ) ;
207 ecrivain.println( "<?xml version=\"1.0\" encoding=\"UTF8\"?>" ) ;
208 ecrivain.println( xml ) ;
211 } catch( Exception e ) {
212 System.err.println( "\nError during the write opération !\n" ) ;
213 e.printStackTrace() ;
219 * Write an application Graph in a file.
220 * @param _gr Application Graph to be write
221 * @param _file File's name
222 * @param _path File's path
224 public static void writeGraph( Graph _gr, String _file, String _path )
226 if( _file.equals( "" ) )
228 System.err.println( "No file's name !\n" ) ;
232 if ( ! _file.endsWith( ".xml" ) )
234 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
237 if( ! _file.equals( "" ) )
241 if( _path.length() != 0 )
243 path = _path+"/"+_file ;
245 path = new String( "./" + _file ) ;
248 XStream xstream = new XStream( new DomDriver() ) ;
250 String xml = xstream.toXML( _gr ) ;
252 PrintWriter ecrivain = null ;
255 ecrivain = new PrintWriter( new OutputStreamWriter( new FileOutputStream( path ), "UTF8" ) ) ;
257 ecrivain.println( "<?xml version=\"1.0\" encoding=\"UTF8\"?>" ) ;
258 ecrivain.println( xml ) ;
261 } catch( Exception e ) {
262 System.err.println( "\nError during the write opération !\n" ) ;
263 e.printStackTrace() ;
270 * Read an application Graph from a file.
271 * @param _file File's name
272 * @param _path File's path
273 * @return The application Graph read
275 public static Graph readGraph( String _path, String _file )
277 if ( _file.equals( "" ) )
279 System.err.println( "No file's name !\n" ) ;
283 if ( ! _file.endsWith( ".xml" ) )
285 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
290 if( _path.length() != 0 )
292 path = _path+"/"+_file ;
294 path = new String( "./" + _file ) ;
299 XStream xstream = new XStream( new DomDriver() ) ;
302 gr = (Graph) xstream.fromXML( new FileInputStream( path ) ) ;
303 } catch( FileNotFoundException e ) {
304 System.err.println( "File not found !\n" ) ;
307 } catch( ClassCastException e ) {
308 System.err.println( "The file does not contain a valid Graph" ) ;
309 e.printStackTrace() ;
318 * Read a Grid graph from a file.
319 * @param _file File's name
320 * @param _path File's path
321 * @return The Grid graph read
323 public static Grid readGrid( String _path, String _file )
325 if ( _file.equals( "" ) )
327 System.err.println( "No file's name !\n" ) ;
331 if ( ! _file.endsWith( ".xml" ) )
333 _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
338 if( _path.length() != 0 )
340 path = _path+"/"+_file ;
342 path = new String( "./" + _file ) ;
347 XStream xstream = new XStream( new DomDriver() ) ;
350 gr = (Grid) xstream.fromXML( new FileInputStream( path ) ) ;
351 } catch( FileNotFoundException e ) {
352 System.err.println( "File not found !\n" ) ;
355 } catch( ClassCastException e ) {
356 System.err.println( "The file does not contain a valid Grid" ) ;
357 e.printStackTrace() ;
367 /** La programmation est un art, respectons ceux qui la pratiquent !! **/