Salome HOME
Removed CASCatch
[modules/kernel.git] / src / ResourcesManager / SALOME_LoadRateManager.cxx
1 // Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 // 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either 
7 // version 2.1 of the License.
8 // 
9 // This library is distributed in the hope that it will be useful 
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 // Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public  
15 // License along with this library; if not, write to the Free Software 
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 //
20 #include "SALOME_LoadRateManager.hxx"
21 #include "utilities.h"
22 #include <iostream>
23 #include <map>
24
25 using namespace std;
26
27 string SALOME_LoadRateManager::FindFirst(const Engines::MachineList& hosts)
28 {
29   MESSAGE("SALOME_LoadRateManager::FindFirst " << hosts.length());
30
31   if (hosts.length() == 0)
32     return string("");
33
34   return string(hosts[0]);
35 }
36
37 string SALOME_LoadRateManager::FindNext(const Engines::MachineList& hosts,MapOfParserResourcesType& resList,SALOME_NamingService *ns)
38 {
39   MESSAGE("SALOME_LoadRateManager::FindNext " << hosts.length());
40   map<string, int> machines;
41
42   if (hosts.length() == 0)
43     return string("");
44
45   for(int i=0;i<hosts.length();i++)
46     machines[string(hosts[i])] = 0;
47
48   ns->Change_Directory("/Containers");
49   vector<string> vec = ns->list_directory_recurs();
50   for(vector<string>::iterator iter = vec.begin();iter!=vec.end();iter++){
51     CORBA::Object_var obj=ns->Resolve((*iter).c_str());
52     Engines::Container_var cont=Engines::Container::_narrow(obj);
53     if(!CORBA::is_nil(cont)){
54       string mach = cont->getHostName();
55       machines[mach]++;
56     }
57   }
58
59   int imin = 0;
60   ParserResourcesType resource = resList[string(hosts[0])];
61   int nbproc = resource.DataForSort._nbOfProcPerNode * resource.DataForSort._nbOfNodes;
62   int min = machines[string(hosts[0])]/nbproc;
63   for(int i=1;i<hosts.length();i++){
64     resource = resList[string(hosts[i])];
65     nbproc = resource.DataForSort._nbOfProcPerNode * resource.DataForSort._nbOfNodes;
66     if( machines[string(hosts[i])]/nbproc < min ){
67       imin = i;
68       min = machines[string(hosts[i])]/nbproc;
69     }
70   }
71
72   return string(hosts[imin]);
73 }
74
75 string SALOME_LoadRateManager::FindBest(const Engines::MachineList& hosts) throw (SALOME_Exception)
76 {
77   // for the moment then "maui" will be used for dynamic selection ...
78   MESSAGE("SALOME_LoadRateManager::FindBest " << hosts.length());
79   throw(SALOME_Exception(LOCALIZED("not yet implemented")));
80   return string("");
81 }