Salome HOME
To avoid compilation pb on RedHat 8.0.
[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,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   list<string> lstCont;
51   for(vector<string>::iterator iter = vec.begin();iter!=vec.end();iter++){
52     CORBA::Object_var obj=ns->Resolve((*iter).c_str());
53     Engines::Container_var cont=Engines::Container::_narrow(obj);
54     if(!CORBA::is_nil(cont)){
55       lstCont.push_back((*iter));
56     }
57   }
58   for(list<string>::iterator iter=lstCont.begin();iter!=lstCont.end();iter++){
59     CORBA::Object_var obj=ns->Resolve((*iter).c_str());
60     Engines::Container_var cont=Engines::Container::_narrow(obj);
61     if(!CORBA::is_nil(cont)){
62       string mach = cont->getHostName();
63       machines[mach]++;
64     }
65   }
66
67   int imin = 0;
68   int min = machines[string(hosts[0])];
69   for(int i=1;i<hosts.length();i++){
70     if( machines[string(hosts[i])] < min ){
71       imin = i;
72       min = machines[string(hosts[i])];
73     }
74   }
75
76   return string(hosts[imin]);
77 }
78
79 string SALOME_LoadRateManager::FindBest(const Engines::MachineList& hosts) throw (SALOME_Exception)
80 {
81   // for the moment then "maui" will be used for dynamic selection ...
82   MESSAGE("SALOME_LoadRateManager::FindBest " << hosts.length());
83   throw(SALOME_Exception(LOCALIZED("not yet implemented")));
84   return string("");
85 }