1 #ifndef _ots_MacroMakerSupervisor_h_
2 #define _ots_MacroMakerSupervisor_h_
4 #include "otsdaq/CoreSupervisors/CoreSupervisorBase.h"
5 #include "otsdaq/ProgressBar/ProgressBar.h"
31 std::string feClassSelected_;
32 std::string feUIDSelected_;
33 std::string macroType_;
34 std::string macroName_;
35 std::string inputArgs_;
36 std::string outputArgs_;
38 std::string runningUsername_;
39 std::string userGroupPermissions_;
41 time_t startTime_ = time(0);
42 time_t doneTime_ = -1;
43 std::string feMacroRunError_ =
"";
44 uint64_t threadID_ = 0;
49 const std::string& feClassSelected,
50 const std::string& feUIDSelected,
51 const std::string& macroType,
52 const std::string& macroName,
53 const std::string& inputArgs,
54 const std::string& outputArgs,
56 const std::string& runningUsername,
57 const std::string& userGroupPermissions)
59 parameters_.xmldoc_ = xmldoc;
60 parameters_.feClassSelected_ = feClassSelected;
61 parameters_.feUIDSelected_ = feUIDSelected;
62 parameters_.macroType_ = macroType;
63 parameters_.macroName_ = macroName;
64 parameters_.inputArgs_ = inputArgs;
65 parameters_.outputArgs_ = outputArgs;
66 parameters_.saveOutputs_ = saveOutputs;
67 parameters_.runningUsername_ = runningUsername;
68 parameters_.userGroupPermissions_ = userGroupPermissions;
77 : parameters_(other.parameters_)
78 , feMacroRunDone_(other.feMacroRunDone_.load())
79 , realProgress_(other.realProgress_.load())
87 parameters_ = other.parameters_;
88 feMacroRunDone_.store(other.feMacroRunDone_.load());
89 realProgress_.store(other.realProgress_.load());
94 runFEMacroParameterStruct parameters_;
95 std::atomic<bool> feMacroRunDone_ =
false;
96 std::atomic<int> realProgress_ = -1;
97 std::unique_ptr<ProgressBar> bar_;
103 uint64_t groupID_ = 0;
104 time_t startTime_ = time(0);
105 time_t completeTime_ = 0;
106 std::string historyFeClassSelected_;
107 std::string historyFeUIDSelected_;
108 std::string historyMacroType_;
109 std::string historyMacroName_;
110 std::string historyInputArgs_;
111 std::string historyOutputArgs_;
112 bool historySaveOutputs_ =
false;
113 std::string historyUsername_;
114 bool historySaved_ =
false;
115 std::vector<std::shared_ptr<runFEMacroStruct>> tasks_;
119 for(
const auto& t : tasks_)
120 if(!t->feMacroRunDone_)
122 return !tasks_.empty();
132 virtual void request(
const std::string& requestType,
135 const WebUsers::RequestUserInfo& userInfo)
override;
141 void generateURL(
void);
142 void verification(xgi::Input* in, xgi::Output* out);
143 void requestIcons(xgi::Input* in, xgi::Output* out);
144 void tooltipRequest(xgi::Input* in, xgi::Output* out);
145 void requestWrapper(xgi::Input* in, xgi::Output* out);
150 void handleRequest(
const std::string Command,
153 const WebUsers::RequestUserInfo& userInfo);
155 xoap::MessageReference frontEndCommunicationRequest(xoap::MessageReference message);
156 xoap::MessageReference supervisorSequenceCheck(xoap::MessageReference message);
159 void getFEMacroList(
HttpXmlDocument& xmldoc,
const std::string& username);
163 const std::string& username);
166 const std::string& username);
169 const std::string& username);
170 void loadMacro(
const std::string& macroName,
171 std::string& macroString,
172 const std::string& username =
"");
175 const std::string& username,
176 std::pair<std::vector<std::string> ,
177 std::vector<std::string> >& returnMacroNames);
178 void appendCommandToHistory(std::string command,
181 std::string interfaces,
182 const std::string& username);
183 void appendCommandToHistory(std::string feClass,
185 std::string macroType,
186 std::string macroName,
187 std::string inputArgs,
188 std::string outputArgs,
190 const std::string& username,
191 time_t launchTime = 0,
192 time_t completeTime = 0);
193 void loadFEMacroSequences(
HttpXmlDocument& xmldoc,
const std::string& username);
194 void saveFEMacroSequence(cgicc::Cgicc& cgi,
const std::string& username);
197 const std::string& username);
200 const std::string& username);
201 void deleteFEMacroSequence(cgicc::Cgicc& cgi,
const std::string& username);
202 void makeSequencePublic(cgicc::Cgicc& cgi,
const std::string& username);
203 void loadHistory(
HttpXmlDocument& xmldoc,
const std::string& username);
204 void loadFEHistory(
HttpXmlDocument& xmldoc,
const std::string& username);
207 const std::string& username);
210 const std::string& username);
211 void clearHistory(
const std::string& username);
212 void clearFEHistory(
const std::string& username);
215 const std::string& username);
218 const std::string& username);
221 const WebUsers::RequestUserInfo& userInfo);
223 std::string feClassSelected,
224 std::string feUIDSelected,
225 const std::string& macroType,
226 const std::string& macroName,
227 const std::string& inputArgs,
228 const std::string outputArgs,
230 const std::string& username,
231 const std::string& userGroupPermissions,
232 bool saveToHistory =
true,
233 std::atomic<int>* realProgressOut =
nullptr);
234 static void runFEMacroGroupSchedulerThread(std::shared_ptr<runFEMacroGroupStruct> group,
236 static void runFEMacroThread(std::shared_ptr<runFEMacroStruct> feMacroRunThreadStruct,
239 std::string generateHexArray(
const std::string& sourceHexString,
int& numOfBytes);
240 bool isArgumentVariable(
const std::string& argumentString);
241 void createCode(std::ostream& out,
242 const std::vector<std::string>& commands,
243 const std::string& tabOffset =
"",
244 bool forFeMacro =
false,
245 std::set<std::string>* inArgNames = 0,
246 std::set<std::string>* outArgNames = 0);
248 SupervisorInfoMap allFESupervisorInfo_;
249 std::map<std::string ,
unsigned int > FEtoSupervisorMap_;
250 std::map<std::string , std::set<std::string> > FEPluginTypetoFEsMap_;
251 std::map<std::string , std::string > FEtoPluginTypeMap_;
253 std::string securityCode_;
254 bool defaultSequence_;
256 std::map<std::string ,
257 std::vector<std::string> >
258 lastFeCommandToHistory_;
260 std::vector<std::shared_ptr<runFEMacroGroupStruct>> feMacroRunThreadStruct_;
261 std::atomic<uint64_t> feMacroRunGroupIDCounter_{0};
263 std::mutex feMacroRunThreadStructMutex_;
friend friend class MacroMakerSupervisor
virtual void forceSupervisorPropertyValues(void) override
override to force supervisor property values (and ignore user settings)
runFEMacroGroupStruct groups per-UID tasks launched in parallel under one NotDoneID
runFEMacroStruct(runFEMacroStruct &&other) noexcept
Allow move constructor because std::atomic is not copyable.
runFEMacroStruct(const runFEMacroStruct &)=delete
Delete copy constructor because std::atomic is not copyable.
runFEMacroStruct & operator=(runFEMacroStruct &&other) noexcept
Allow move constructor because std::atomic is not copyable, for vector erase.