Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
New version of MAHEVE plus corrections.
[mapping.git] / src / and / Mapping / Utils.java
index 2127186..1cd073b 100644 (file)
@@ -1,6 +1,5 @@
 package and.Mapping ;
 
-
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
@@ -9,11 +8,6 @@ import java.io.PrintWriter;
 import java.net.InetAddress;
 import java.util.ArrayList;
 
-import org.hyperic.sigar.CpuInfo;
-import org.hyperic.sigar.Mem;
-import org.hyperic.sigar.Sigar;
-import org.hyperic.sigar.SigarException;
-
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.io.xml.DomDriver;
 
@@ -25,12 +19,6 @@ import com.thoughtworks.xstream.io.xml.DomDriver;
  */
 public class Utils 
 {
-//     public static String getOS()
-//     {
-//             return System.getProperty( "os.name" ) ;
-//     }
-       
-       
        /**
         * Creation of the representation of the node in the Mapping point of view. It needs
         * some information about the computing node, which will be exploited by mapping
@@ -39,126 +27,37 @@ public class Utils
         */
        public static GNode createGNode()
        {
+               /** Using the Linpack class **/
+               Linpack linpack = new Linpack() ;
+               
+               /**  **/
                GNode n = new GNode() ;
                int nbCore = 0 ;
                int frequency = 0 ;
+               int mflops = 0 ;
                int memory = 0 ;
                String name = "" ;
                
-//             InputStream ips ; 
-//             InputStreamReader ipsr ;
-//             BufferedReader br ;
-//             String ligne ;
-//             
-//             
-//             String fichier_cpu = "" ;
-//             String fichier_mem = "" ;
-//             
-//             
-//             if( getOS().equals( "Linux" ) )
-//             {
-//                     fichier_cpu = "/proc/cpuinfo" ;
-//                     fichier_mem = "/proc/meminfo" ;         
-//             
-//                     /* Lecture des informations processeur */
-//                     try{
-//                             ips = new FileInputStream( fichier_cpu ) ; 
-//                             ipsr = new InputStreamReader( ips ) ;
-//                             br = new BufferedReader( ipsr ) ;
-//                     
-//                     
-//                             while( ( ligne = br.readLine() ) != null )
-//                             {
-//                                     if( ligne.contains( "processor" ) )
-//                                     {
-//                                             nb_coeurs ++ ;
-//                                     }       
-//                             
-//                                     if( ligne.contains("cpu MHz") )
-//                                     {
-//                                             String tab[] = new String[2] ;
-//
-//                                             tab = ligne.split( ":" ) ;
-//                                     
-//                                             frequence = ( int ) Double.parseDouble( tab[1] ) ;
-//                                     }
-//
-//                             }
-//                             
-//                             br.close() ;
-//                             ipsr.close() ;
-//                             ips.close() ;
-//                     
-//                     } catch( Exception e ) {
-//                             System.out.println( e.toString() ) ;
-//                     }
-//             
-//             
-//                     /* Lecture des informations mémoire */
-//                     try {
-//                             ips = new FileInputStream( fichier_mem ) ; 
-//                             ipsr = new InputStreamReader( ips ) ;
-//                             br = new BufferedReader( ipsr ) ;
-//                     
-//                             while( ( ligne = br.readLine() ) != null )
-//                             {                               
-//                                     if( ligne.contains("MemTotal") )
-//                                     {
-//                                             String tab[] = new String[2] ;
-//                                     
-//                                             tab = ligne.split( ":" ) ;
-//                                             ligne = tab[1].trim() ;
-//                                             tab = ligne.split( " " ) ;
-//                                             memoire = ( int ) Double.parseDouble( tab[0] ) ;
-//                                     }
-//
-//                             }
-//                     
-//                             br.close() ;
-//                             ipsr.close() ;
-//                             ips.close() ;
-//                     
-//                     } catch( Exception e ) {
-//                             System.out.println( e.toString() ) ;
-//                     }
-//             
-//             }
-               
-               /* Creating the hardware information retriever */
-               Sigar sigar = new Sigar() ;
-               
-               /* CPU information */
-               CpuInfo cpuinfo[] = null ;
-               try {
-                       cpuinfo = sigar.getCpuInfoList();
-               } catch (SigarException e) {
-                       System.err.println( "Unable to retrieve CPU information !" ) ;
-                       e.printStackTrace();
-                       System.exit( 1 ) ;
-               }
                
-               int tmp = 0 ;
-               for( int i = 0 ; i < cpuinfo.length ; i++ )
-               {
-                       nbCore++ ;
-                       tmp+= cpuinfo[i].getMhz() ;
-               }
+               /** CPU information **/
                
-               /* The frequency is the average of cores frequencies */
-               frequency = tmp / nbCore ;
+               /* Amount of available computing cores */
+               nbCore = Runtime.getRuntime().availableProcessors() ;
                
+               /* Average MegaFlops of each core */
+               double tmp_mflops = 0 ;
+               int loop = 10 ;
                
-               /* Memory information */
-               Mem mem = null ;
-               try {
-                       mem = sigar.getMem() ;
-               } catch (SigarException e) {
-                       System.err.println( "Unable to retrieve memory information !" ) ;
-                       e.printStackTrace();
-                       System.exit( 1 ) ;
+               for( int i = 0 ; i < loop ; i++ )
+               {
+                       tmp_mflops += linpack.getMFlops() ;
+                       System.gc() ;
                }
+               mflops = (int) tmp_mflops / loop ;
+               
                
-               memory = (int)mem.getFree()/1000 ;
+               /** Memory information **/
+               memory = (int) Runtime.getRuntime().maxMemory() / 1024 / 1024 ;
                
                
                /* Host name */
@@ -166,17 +65,34 @@ public class Utils
                        InetAddress addr = InetAddress.getLocalHost() ;
                        name = new String( addr.getCanonicalHostName() ) ;
                } catch( final Exception e ) {
-                       System.err.println( "Unalbe to retrieve host name !" ) ;
+                       System.err.println( "Unalbe to retrieve host's name !" ) ;
+                       e.printStackTrace();
+                       System.exit( 1 ) ;
+               } 
+               
+               /* Host IP */
+               String ip = null ;
+               try {
+                       InetAddress addr = InetAddress.getLocalHost() ;
+                       ip = addr.getHostAddress() ;
+               } catch( final Exception e ) {
+                       System.err.println( "Unalbe to retrieve host's name !" ) ;
                        e.printStackTrace();
                        System.exit( 1 ) ;
                } 
 
+               String names[] = decodeG5Knames( name ) ;
                
                /* Updating node information */
                n.setFrequency( frequency ) ;
+               n.setMFlops( mflops ) ;
                n.setMemory( memory ) ;
                n.setNb_cores( nbCore ) ;
                n.setName( name ) ;
+               n.setClusterName( names[1] ) ;
+               n.setSiteName( names[2] ) ;
+               n.setIP( ip ) ;
+               n.setMapped( false ) ;
                
                return n ;
        }
@@ -194,53 +110,36 @@ public class Utils
                
                if( _an != null )
                {
-                       String temp ;
-                       String nom, cluster, site ;
-               
+                       String cluster = "", site = "" ;                
                        
                        ArrayList<Cluster> clusters = new ArrayList<Cluster>() ;
                        
                        for( int i = 0 ; i < _an.size() ; i++ )
                        {
-                               /* Variables edition */
-                               String tab[] = new String[ 5 ] ;                                
-                               
-                               temp = _an.get( i ).getName().trim().replace('.', '!' ) ;
-                               
-                               tab = temp.split( "!" ) ;
-                               
-                               nom = tab[ 0 ] ;
-                               site = tab[ 1 ] ;
+                               /* Variables edition */         
                                
-                               tab = nom.split( "-" ) ;
+                               cluster = _an.get( i ).getClusterName() ; //names[ 1 ] ;
+                               site = _an.get( i ).getSiteName() ; //names[ 2 ] ;
                                
-                               // IUT
-                               //cluster = "iut" ;
-                               
-                               // G5K
-                               cluster = tab[ 0 ] ;
-                               
-                               //System.out.println( nom + " dans " + cluster + " du site " + site ) ;
-                               
-                               
-                               /* Insertion du noeud dans son cluster */
-                               boolean trouve = false ;
+                               /* Insertion of the node in its cluster */
+                               boolean found = false ;
                                
                                for( int j = 0 ; j < clusters.size() ; j++ )
                                {
-                                       if( clusters.get( j ).getName().equals( cluster ) && clusters.get( j ).getSite().equals( site ))
+                                       if( clusters.get( j ).getName().equalsIgnoreCase( cluster ) 
+                                                       && clusters.get( j ).getSite().equalsIgnoreCase( site ))
                                        {
                                                _an.get( i ).setInCluster( true ) ;
-                                               _an.get( i ).setSite( clusters.get( j ).getSite() ) ;
-                                               _an.get( i ).setCluster( clusters.get( j ).getName() ) ;
+                                               _an.get( i ).setMapped( false ) ;
+                                               _an.get( i ).setCluster( clusters.get( j ) ) ;
                                                clusters.get( j ).addGNode( _an.get( i ) ) ;
-                                               trouve  = true ;
+                                               found  = true ;
                                                
                                                break ;
                                        }
                                }
                                
-                               if( ! trouve )
+                               if( ! found )
                                {
                                        Cluster cl = new Cluster() ;
                                        
@@ -248,8 +147,8 @@ public class Utils
                                        cl.setSite( site ) ;
                                        
                                        _an.get( i ).setInCluster( true ) ;
-                                       _an.get( i ).setSite( site ) ;
-                                       _an.get( i ).setCluster( cluster ) ;
+                                       _an.get( i ).setMapped( false ) ;
+                                       _an.get( i ).setCluster( cl ) ;
                                        
                                        cl.addGNode( _an.get( i ) ) ;
                                        
@@ -265,17 +164,49 @@ public class Utils
        }
 
        
+       /**
+        * Return the three parts of the name of a node on Grid'5000.
+        * @param _name The full name of the G5K node
+        * @return The three parts of the name
+        */
+       public static String[] decodeG5Knames( String _name ) 
+       {
+               String temp = "" ;
+               String tab[] = new String[ 5 ] ;        
+               String ret[] = new String[ 3 ] ;
+               
+               temp = _name.replace('.', '!' ) ;
+               
+               tab = temp.split( "!" ) ;
+               
+               ret[0] = tab[ 0 ] ;   // node name
+               ret[2] = tab[ 1 ] ;   // site name
+               
+               tab = ret[0].split( "-" ) ;
+               
+               ret[ 1 ] = tab[ 0 ] ; // cluster name
+               
+               return ret ;
+       }
+
+       
        /**
         * Write the Grid object in an XML file.
         * @param _gl Grid graph to be write
-        * @param _file File's name 
         * @param _path File's path
+        * @param _file File's name 
         */
-       public static void writeGrid( Grid _gl, String _file, String _path )
+       public static void writeGrid( Grid _gl, String _path, String _file )
        {
-               if ( ! _file.equals( "" ) && ! _file.endsWith( ".xml" ) )
+               if( _file.equals( "" ) )
                {
-                       _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
+                       System.err.println( "No file's name !\n" ) ;
+                       return ;
+               }
+               
+               if ( ! _file.endsWith( ".xml" ) )
+               {
+                       _file = _file + ".xml"; // Adding xml extension to file
                }
                
                if( ! _file.equals( "" ) )
@@ -312,14 +243,20 @@ public class Utils
        /**
         * Write an application Graph in a file.
         * @param _gr Application Graph to be write
-        * @param _file File's name
         * @param _path File's path
+        * @param _file File's name
         */
-       public static void writeGraph( Graph _gr, String _file, String _path )
+       public static void writeGraph( Graph _gr, String _path, String _file )
        {
-               if ( ! _file.equals( "" ) && ! _file.endsWith( ".xml" ) )
+               if( _file.equals( "" ) )
                {
-                       _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
+                       System.err.println( "No file's name !\n" ) ;
+                       return ;
+               }
+               
+               if ( ! _file.endsWith( ".xml" ) )
+               {
+                       _file = _file + ".xml"; // Adding xml extension to file
                }
                
                if( ! _file.equals( "" ) )
@@ -354,31 +291,97 @@ public class Utils
        }
        
        
+       /**
+        * Write a mapping done in a file.
+        * @param _mp The mapping done to be write
+        * @param _path File's path
+        * @param _file File's name
+        */
+       public static void writeMapping( Mapping _mp, String _path, String _file )
+       {
+               if( _file.equals( "" ) )
+               {
+                       System.err.println( "No file's name !\n" ) ;
+                       return ;
+               }
+               
+               if ( ! _file.endsWith( ".xml" ) )
+               {
+                       _file = _file + ".xml"; // Adding xml extension to file
+               }
+               
+               if( ! _file.equals( "" ) )
+               {
+                       String path = "" ;
+                       
+                       if( _path.length() != 0 )
+                       {
+                               path = _path+"/"+_file ;
+                       } else {
+                               path = new String( "./" + _file ) ;
+                       }
+                       
+                       XStream xstream = new XStream( new DomDriver() ) ;
+                       
+                       String xml = xstream.toXML( _mp ) ;
+                       
+                       PrintWriter ecrivain = null ;
+
+                       try {
+                               ecrivain = new PrintWriter( new OutputStreamWriter( new FileOutputStream( path ), "UTF8" ) ) ;
+
+                               ecrivain.println( "<?xml version=\"1.0\" encoding=\"UTF8\"?>" ) ;
+                               ecrivain.println( xml ) ;
+
+                               ecrivain.close() ;
+                       } catch( Exception e ) {
+                               System.err.println( "\nError during the write opération !\n" ) ;
+                               e.printStackTrace() ;
+                       }
+               }
+       }
+       
+       
        /**
         * Read an application Graph from a file.
         * @param _file File's name
+        * @param _path File's path
         * @return The application Graph read
         */
-       public static Graph readGraph( String _file )
+       public static Graph readGraph( String _path, String _file )
        {
-               if ( _file.equals( "" ) || ! _file.endsWith( ".xml" ) )
+               if ( _file.equals( "" ) )
                {
-                       System.err.println( "Bad file !\n" ) ;
+                       System.err.println( "No file's name !\n" ) ;
                        return null ;
                }       
                
+               if ( ! _file.endsWith( ".xml" ) )
+               {
+                       _file = _file + ".xml"; // Adding xml extension to file
+               }
+               
+               String path = "" ;
+               
+               if( _path.length() != 0 )
+               {
+                       path = _path+"/"+_file ;
+               } else {
+                       path = new String( "./" + _file ) ;
+               }       
+                       
                Graph gr = null ;
                
                XStream xstream = new XStream( new DomDriver() ) ;
                
                try {
-                       gr = (Graph) xstream.fromXML( new FileInputStream( _file ) ) ;
+                       gr = (Graph) xstream.fromXML( new FileInputStream( path ) ) ;
                } catch( FileNotFoundException e ) {
                        System.err.println( "File not found !\n" ) ;
                        e.printStackTrace();
                        return null ;
                } catch( ClassCastException e ) {
-                       System.err.println( "The file does not contain a Graph" ) ;
+                       System.err.println( "The file does not contain a valid Graph" ) ;
                        e.printStackTrace() ;
                        return null ;
                }
@@ -390,28 +393,43 @@ public class Utils
        /**
         * Read a Grid graph from a file.
         * @param _file File's name
+        * @param _path File's path
         * @return The Grid graph read
         */
-       public static Grid readGrid( String _file )
-       {
-               if ( _file.equals( "" ) || ! _file.endsWith( ".xml" ) )
+       public static Grid readGrid( String _path, String _file )
+       {       
+               if ( _file.equals( "" ) )
                {
-                       System.err.println( "Bad file !\n" ) ;
+                       System.err.println( "No file's name !\n" ) ;
                        return null ;
                }       
                
+               if ( ! _file.endsWith( ".xml" ) )
+               {
+                       _file = _file + ".xml"; // Adding xml extension to file
+               }
+
+               String path = "" ;
+               
+               if( _path.length() != 0 )
+               {
+                       path = _path+"/"+_file ;
+               } else {
+                       path = new String( "./" + _file ) ;
+               }       
+               
                Grid gr = null ;
                
                XStream xstream = new XStream( new DomDriver() ) ;
                
                try {
-                       gr = (Grid) xstream.fromXML( new FileInputStream( _file ) ) ;
+                       gr = (Grid) xstream.fromXML( new FileInputStream( path ) ) ;
                } catch( FileNotFoundException e ) {
                        System.err.println( "File not found !\n" ) ;
                        e.printStackTrace();
                        return null ;
                } catch( ClassCastException e ) {
-                       System.err.println( "The file does not contain a Grid" ) ;
+                       System.err.println( "The file does not contain a valid Grid" ) ;
                        e.printStackTrace() ;
                        return null ;
                }
@@ -419,6 +437,54 @@ public class Utils
                return gr ;
        }
        
+       
+       /**
+        * Read a Mapping done from a file.
+        * @param _file File's name
+        * @param _path File's path
+        * @return The Mapping read
+        */
+       public static Mapping readMapping( String _path, String _file )
+       {       
+               if ( _file.equals( "" ) )
+               {
+                       System.err.println( "No file's name !\n" ) ;
+                       return null ;
+               }       
+               
+               if ( ! _file.endsWith( ".xml" ) )
+               {
+                       _file = _file + ".xml"; // Adding xml extension to file
+               }
+
+               String path = "" ;
+               
+               if( _path.length() != 0 )
+               {
+                       path = _path+"/"+_file ;
+               } else {
+                       path = new String( "./" + _file ) ;
+               }       
+               
+               Mapping mp = null ;
+               
+               XStream xstream = new XStream( new DomDriver() ) ;
+               
+               try {
+                       mp = (Mapping) xstream.fromXML( new FileInputStream( path ) ) ;
+               } catch( FileNotFoundException e ) {
+                       System.err.println( "File not found !\n" ) ;
+                       e.printStackTrace();
+                       return null ;
+               } catch( ClassCastException e ) {
+                       System.err.println( "The file does not contain a valid Mapping" ) ;
+                       e.printStackTrace() ;
+                       return null ;
+               }
+               
+               return mp ;
+       }
+       
 }