1 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "SALOME_LoadRateManager.hxx"
21 #include "utilities.h"
27 string SALOME_LoadRateManager::FindFirst(const Engines::MachineList& hosts)
29 MESSAGE("SALOME_LoadRateManager::FindFirst " << hosts.length());
31 if (hosts.length() == 0)
34 return string(hosts[0]);
37 string SALOME_LoadRateManager::FindNext(const Engines::MachineList& hosts,MapOfParserResourcesType& resList,SALOME_NamingService *ns)
39 MESSAGE("SALOME_LoadRateManager::FindNext " << hosts.length());
40 map<string, int> machines;
42 if (hosts.length() == 0)
45 for(int i=0;i<hosts.length();i++)
46 machines[string(hosts[i])] = 0;
48 ns->Change_Directory("/Containers");
49 vector<string> vec = ns->list_directory_recurs();
50 Engines::Container_var cont;
51 for(vector<string>::iterator iter = vec.begin();iter!=vec.end();iter++){
54 CORBA::Object_var obj=ns->Resolve((*iter).c_str());
55 cont=Engines::Container::_narrow(obj);
57 catch(CORBA::SystemException& ex)
59 MESSAGE("SALOME_LoadRateManager::FindNext CORBA::SystemException ignore it");
62 if(!CORBA::is_nil(cont)){
65 CORBA::String_var hostname = cont->getHostName();
66 std::string mach=(const char*)hostname;
69 catch(CORBA::SystemException& ex)
71 MESSAGE("SALOME_LoadRateManager::FindNext CORBA::SystemException ignore it");
78 ParserResourcesType resource = resList[string(hosts[0])];
79 int nbproc = resource.DataForSort._nbOfProcPerNode * resource.DataForSort._nbOfNodes;
80 int min = machines[string(hosts[0])]/nbproc;
81 for(int i=1;i<hosts.length();i++){
82 resource = resList[string(hosts[i])];
83 nbproc = resource.DataForSort._nbOfProcPerNode * resource.DataForSort._nbOfNodes;
84 if( machines[string(hosts[i])]/nbproc < min ){
86 min = machines[string(hosts[i])]/nbproc;
90 return string(hosts[imin]);
93 string SALOME_LoadRateManager::FindBest(const Engines::MachineList& hosts) throw (SALOME_Exception)
95 // for the moment then "maui" will be used for dynamic selection ...
96 MESSAGE("SALOME_LoadRateManager::FindBest " << hosts.length());
97 throw(SALOME_Exception(LOCALIZED("not yet implemented")));