1 // Copyright (C) 2017-2023 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "SalomeResourceModel.hxx"
21 #include "RuntimeSALOME.hxx"
22 #include "SALOME_ResourcesManager.hxx"
23 #include "SALOME_NamingService_Wrapper.hxx"
24 #include "SALOME_LifeCycleCORBA.hxx"
27 SalomeResourceModel::SalomeResourceModel()
28 : AbstractResourceModel(),
29 _wantedMachine("localhost"),
33 _wcKey("P11U5:CARBONES"),
34 _localDirectory("/tmp"),
35 _remoteDirectory("/tmp"),
36 _parallelizeStatus(true),
41 SalomeResourceModel::~SalomeResourceModel()
45 bool SalomeResourceModel::isMachineInteractive(const std::string& machine)const
47 return !machine.compare("localhost");
50 std::vector< std::string > SalomeResourceModel::getFittingMachines()const
52 std::vector< std::string > resultat;
53 YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
54 CORBA::ORB_ptr orb = runTime->getOrb();
55 if (!orb) return resultat;
57 SALOME_NamingService_Wrapper namingService(orb);
58 SALOME_LifeCycleCORBA lcc(&namingService);
60 CORBA::Object_var obj;
61 obj=namingService.Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS);
62 if (CORBA::is_nil(obj)) return resultat;
64 Engines::ResourcesManager_var resManager;
65 resManager = Engines::ResourcesManager::_narrow(obj);
66 if(!resManager) return resultat;
68 Engines::ResourceParameters params;
71 Engines::ResourceList* resourceList = resManager->GetFittingResources(params);
73 for (int i = 0; i < resourceList->length(); i++)
75 const char* aResource = (*resourceList)[i];
76 resultat.push_back(aResource);
81 void SalomeResourceModel::setWantedMachine(const std::string& v)
86 std::string SalomeResourceModel::getWantedMachine()const
88 return _wantedMachine;
91 void SalomeResourceModel::setNbprocs(unsigned int v)
96 unsigned int SalomeResourceModel::getNbprocs()const
101 void SalomeResourceModel::setMaxDurationHours(int v)
106 int SalomeResourceModel::getMaxDurationHours()const
111 void SalomeResourceModel::setMaxDurationMinutes(int v)
116 int SalomeResourceModel::getMaxDurationMinutes()const
121 void SalomeResourceModel::setWckey(const std::string& v)
126 std::string SalomeResourceModel::getWckey()const
131 void SalomeResourceModel::setLocalDir(const std::string& v)
136 std::string SalomeResourceModel::getLocalDir()const
138 return _localDirectory;
141 void SalomeResourceModel::setRemoteDir(const std::string& v)
143 _remoteDirectory = v;
146 std::string SalomeResourceModel::getRemoteDir()const
148 return _remoteDirectory;
151 std::string SalomeResourceModel::getDefaultRemoteDir(std::string machine)const
153 std::string result = "";
154 YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
155 CORBA::ORB_ptr orb = runTime->getOrb();
156 if (!orb) return result;
158 SALOME_NamingService_Wrapper namingService(orb);
159 SALOME_LifeCycleCORBA lcc(&namingService);
161 CORBA::Object_var obj;
162 obj=namingService.Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS);
163 if (CORBA::is_nil(obj)) return result;
165 Engines::ResourcesManager_var resManager;
166 resManager = Engines::ResourcesManager::_narrow(obj);
167 if(!resManager) return result;
169 Engines::ResourceParameters params;
174 Engines::ResourceDefinition * rd;
175 rd = resManager->GetResourceDefinition(machine.c_str());
176 result = rd->working_directory.in();
181 std::string launch_date = ctime(&rawtime);
182 for (int i = 0; i < launch_date.size(); i++)
183 if (launch_date[i] == '/' ||
184 launch_date[i] == '-' ||
185 launch_date[i] == ':' ||
186 launch_date[i] == ' ')
187 launch_date[i] = '_';
188 launch_date.erase(--launch_date.end()); // Last caracter is a \n
190 result += launch_date;
200 void SalomeResourceModel::setParallelizeStatus(bool v)
202 _parallelizeStatus = v;
205 bool SalomeResourceModel::getParallelizeStatus()const
207 return _parallelizeStatus;
210 const std::list<std::string>& SalomeResourceModel::getInFiles()const
215 std::list<std::string>& SalomeResourceModel::getInFiles()