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