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())
86 parameters_ = other.parameters_;
87 feMacroRunDone_.store(other.feMacroRunDone_.load());
92 runFEMacroParameterStruct parameters_;
93 std::atomic<bool> feMacroRunDone_ =
false;
94 std::unique_ptr<ProgressBar> bar_;
100 uint64_t groupID_ = 0;
101 time_t startTime_ = time(0);
102 time_t completeTime_ = 0;
103 std::string historyFeClassSelected_;
104 std::string historyFeUIDSelected_;
105 std::string historyMacroType_;
106 std::string historyMacroName_;
107 std::string historyInputArgs_;
108 std::string historyOutputArgs_;
109 bool historySaveOutputs_ =
false;
110 std::string historyUsername_;
111 bool historySaved_ =
false;
112 std::vector<std::shared_ptr<runFEMacroStruct>> tasks_;
116 for(
const auto& t : tasks_)
117 if(!t->feMacroRunDone_)
119 return !tasks_.empty();
129 virtual void request(
const std::string& requestType,
132 const WebUsers::RequestUserInfo& userInfo)
override;
138 void generateURL(
void);
139 void verification(xgi::Input* in, xgi::Output* out);
140 void requestIcons(xgi::Input* in, xgi::Output* out);
141 void tooltipRequest(xgi::Input* in, xgi::Output* out);
142 void requestWrapper(xgi::Input* in, xgi::Output* out);
147 void handleRequest(
const std::string Command,
150 const WebUsers::RequestUserInfo& userInfo);
152 xoap::MessageReference frontEndCommunicationRequest(xoap::MessageReference message);
153 xoap::MessageReference supervisorSequenceCheck(xoap::MessageReference message);
156 void getFEMacroList(
HttpXmlDocument& xmldoc,
const std::string& username);
160 const std::string& username);
163 const std::string& username);
166 const std::string& username);
167 void loadMacro(
const std::string& macroName,
168 std::string& macroString,
169 const std::string& username =
"");
172 const std::string& username,
173 std::pair<std::vector<std::string> ,
174 std::vector<std::string> >& returnMacroNames);
175 void appendCommandToHistory(std::string command,
178 std::string interfaces,
179 const std::string& username);
180 void appendCommandToHistory(std::string feClass,
182 std::string macroType,
183 std::string macroName,
184 std::string inputArgs,
185 std::string outputArgs,
187 const std::string& username,
188 time_t launchTime = 0,
189 time_t completeTime = 0);
190 void loadFEMacroSequences(
HttpXmlDocument& xmldoc,
const std::string& username);
191 void saveFEMacroSequence(cgicc::Cgicc& cgi,
const std::string& username);
194 const std::string& username);
197 const std::string& username);
198 void deleteFEMacroSequence(cgicc::Cgicc& cgi,
const std::string& username);
199 void makeSequencePublic(cgicc::Cgicc& cgi,
const std::string& username);
200 void loadHistory(
HttpXmlDocument& xmldoc,
const std::string& username);
201 void loadFEHistory(
HttpXmlDocument& xmldoc,
const std::string& username);
204 const std::string& username);
207 const std::string& username);
208 void clearHistory(
const std::string& username);
209 void clearFEHistory(
const std::string& username);
212 const std::string& username);
215 const std::string& username);
218 const WebUsers::RequestUserInfo& userInfo);
220 std::string feClassSelected,
221 std::string feUIDSelected,
222 const std::string& macroType,
223 const std::string& macroName,
224 const std::string& inputArgs,
225 const std::string outputArgs,
227 const std::string& username,
228 const std::string& userGroupPermissions,
229 bool saveToHistory =
true);
230 static void runFEMacroGroupSchedulerThread(std::shared_ptr<runFEMacroGroupStruct> group,
232 static void runFEMacroThread(std::shared_ptr<runFEMacroStruct> feMacroRunThreadStruct,
235 std::string generateHexArray(
const std::string& sourceHexString,
int& numOfBytes);
236 bool isArgumentVariable(
const std::string& argumentString);
237 void createCode(std::ostream& out,
238 const std::vector<std::string>& commands,
239 const std::string& tabOffset =
"",
240 bool forFeMacro =
false,
241 std::set<std::string>* inArgNames = 0,
242 std::set<std::string>* outArgNames = 0);
244 SupervisorInfoMap allFESupervisorInfo_;
245 std::map<std::string ,
unsigned int > FEtoSupervisorMap_;
246 std::map<std::string , std::set<std::string> > FEPluginTypetoFEsMap_;
247 std::map<std::string , std::string > FEtoPluginTypeMap_;
249 std::string securityCode_;
250 bool defaultSequence_;
252 std::map<std::string ,
253 std::vector<std::string> >
254 lastFeCommandToHistory_;
256 std::vector<std::shared_ptr<runFEMacroGroupStruct>> feMacroRunThreadStruct_;
257 std::atomic<uint64_t> feMacroRunGroupIDCounter_{0};
259 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.