Salome HOME
Test conditions for WorkloadManager_swig strengthned.
[modules/yacs.git] / src / ydfx_gui / SalomeResourceModel.cxx
1 // Copyright (C) 2017-2019  CEA/DEN, EDF R&D
2 //
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.
7 //
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.
12 //
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
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "SalomeResourceModel.hxx"
21 #include "RuntimeSALOME.hxx"
22 #include "SALOME_ResourcesManager.hxx"
23 #include "SALOME_LifeCycleCORBA.hxx"
24 #include <ctime>
25
26 SalomeResourceModel::SalomeResourceModel()
27 : AbstractResourceModel(),
28   _wantedMachine("localhost"),
29   _nbProcs(1),
30   _hours(0),
31   _minutes(5),
32   _wcKey("P11U5:CARBONES"),
33   _localDirectory("/tmp"),
34   _remoteDirectory("/tmp"),
35   _parallelizeStatus(true),
36   _in_files()
37 {
38 }
39
40 SalomeResourceModel::~SalomeResourceModel()
41 {
42 }
43
44 bool SalomeResourceModel::isMachineInteractive(const std::string& machine)const
45 {
46   return !machine.compare("localhost");
47 }
48
49 std::vector< std::string > SalomeResourceModel::getFittingMachines()const
50 {
51   std::vector< std::string > resultat;
52   YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
53   CORBA::ORB_ptr orb = runTime->getOrb();
54   if (!orb) return resultat;
55
56   SALOME_NamingService namingService(orb);
57   SALOME_LifeCycleCORBA lcc(&namingService);
58
59   CORBA::Object_var obj;
60   obj=namingService.Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS);
61   if (CORBA::is_nil(obj)) return resultat;
62
63   Engines::ResourcesManager_var resManager;
64   resManager = Engines::ResourcesManager::_narrow(obj);
65   if(!resManager) return resultat;
66
67   Engines::ResourceParameters params;
68   lcc.preSet(params);
69
70   Engines::ResourceList* resourceList = resManager->GetFittingResources(params);
71
72   for (int i = 0; i < resourceList->length(); i++)
73   {
74     const char* aResource = (*resourceList)[i];
75     resultat.push_back(aResource);
76   }
77   return resultat;
78 }
79
80 void SalomeResourceModel::setWantedMachine(const std::string& v)
81 {
82   _wantedMachine = v;
83 }
84
85 std::string SalomeResourceModel::getWantedMachine()const
86 {
87   return _wantedMachine;
88 }
89
90 void SalomeResourceModel::setNbprocs(unsigned int v)
91 {
92   _nbProcs = v;
93 }
94
95 unsigned int SalomeResourceModel::getNbprocs()const
96 {
97   return _nbProcs;
98 }
99
100 void SalomeResourceModel::setMaxDurationHours(int v)
101 {
102   _hours = v;
103 }
104
105 int SalomeResourceModel::getMaxDurationHours()const
106 {
107   return _hours;
108 }
109
110 void SalomeResourceModel::setMaxDurationMinutes(int v)
111 {
112   _minutes = v;
113 }
114
115 int SalomeResourceModel::getMaxDurationMinutes()const
116 {
117   return _minutes;
118 }
119
120 void SalomeResourceModel::setWckey(const std::string& v)
121 {
122   _wcKey = v;
123 }
124
125 std::string SalomeResourceModel::getWckey()const
126 {
127   return _wcKey;
128 }
129
130 void SalomeResourceModel::setLocalDir(const std::string& v)
131 {
132   _localDirectory = v;
133 }
134
135 std::string SalomeResourceModel::getLocalDir()const
136 {
137   return _localDirectory;
138 }
139
140 void SalomeResourceModel::setRemoteDir(const std::string& v)
141 {
142   _remoteDirectory = v;
143 }
144
145 std::string SalomeResourceModel::getRemoteDir()const
146 {
147   return _remoteDirectory;
148 }
149
150 std::string SalomeResourceModel::getDefaultRemoteDir(std::string machine)const
151 {
152   std::string result = "";
153   YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
154   CORBA::ORB_ptr orb = runTime->getOrb();
155   if (!orb) return result;
156
157   SALOME_NamingService namingService(orb);
158   SALOME_LifeCycleCORBA lcc(&namingService);
159
160   CORBA::Object_var obj;
161   obj=namingService.Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS);
162   if (CORBA::is_nil(obj)) return result;
163
164   Engines::ResourcesManager_var resManager;
165   resManager = Engines::ResourcesManager::_narrow(obj);
166   if(!resManager) return result;
167
168   Engines::ResourceParameters params;
169   lcc.preSet(params);
170   
171   try
172   {
173     Engines::ResourceDefinition * rd;
174     rd = resManager->GetResourceDefinition(machine.c_str());
175     result = rd->working_directory.in();
176     if (result != "")
177     {
178       time_t rawtime;
179       time(&rawtime);
180       std::string launch_date = ctime(&rawtime);
181       for (int i = 0; i < launch_date.size(); i++)
182         if (launch_date[i] == '/' ||
183             launch_date[i] == '-' ||
184             launch_date[i] == ':' ||
185             launch_date[i] == ' ')
186           launch_date[i] = '_';
187       launch_date.erase(--launch_date.end()); // Last caracter is a \n
188       result += "/run_";
189       result += launch_date;
190     }
191   }
192   catch (...)
193   {
194   }
195
196   return result;
197 }
198
199 void SalomeResourceModel::setParallelizeStatus(bool v)
200 {
201   _parallelizeStatus = v;
202 }
203
204 bool SalomeResourceModel::getParallelizeStatus()const
205 {
206   return _parallelizeStatus;
207 }
208
209 const std::list<std::string>& SalomeResourceModel::getInFiles()const
210 {
211   return _in_files;
212 }
213
214 std::list<std::string>& SalomeResourceModel::getInFiles()
215 {
216   return _in_files;
217 }