otsdaq-utilities  3.02.00
MacroMakerSupervisor.h
1 #ifndef _ots_MacroMakerSupervisor_h_
2 #define _ots_MacroMakerSupervisor_h_
3 
4 #include "otsdaq/CoreSupervisors/CoreSupervisorBase.h"
5 
6 // clang-format off
7 namespace ots
8 {
14 {
15  public:
16  XDAQ_INSTANTIATOR();
17 
21  {
22 
26  {
27  HttpXmlDocument xmldoc_;
28  std::string feClassSelected_;
29  std::string feUIDSelected_;
30  std::string macroType_;
31  std::string macroName_;
32  std::string inputArgs_;
33  std::string outputArgs_;
34  bool saveOutputs_;
35  std::string runningUsername_;
36  std::string userGroupPermissions_;
37 
38  time_t startTime_ = time(0);
39  time_t doneTime_ = -1;
40  std::string feMacroRunError_ = "";
41  uint64_t threadID_ = 0; //Note: std::thread::id() is invalid thread id;
42  }; // end runFEMacroParameterStruct struct
43 
45  const HttpXmlDocument& xmldoc,
46  const std::string& feClassSelected,
47  const std::string& feUIDSelected,
48  const std::string& macroType,
49  const std::string& macroName,
50  const std::string& inputArgs,
51  const std::string& outputArgs,
52  bool saveOutputs,
53  const std::string& runningUsername,
54  const std::string& userGroupPermissions
55  )
56  {
57  parameters_.xmldoc_ = xmldoc;
58  parameters_.feClassSelected_ = feClassSelected;
59  parameters_.feUIDSelected_ = feUIDSelected;
60  parameters_.macroType_ = macroType;
61  parameters_.macroName_ = macroName;
62  parameters_.inputArgs_ = inputArgs;
63  parameters_.outputArgs_ = outputArgs;
64  parameters_.saveOutputs_ = saveOutputs;
65  parameters_.runningUsername_ = runningUsername;
66  parameters_.userGroupPermissions_ = userGroupPermissions;
67  } //end runFEMacroStruct() constructor
68 
69 
72  runFEMacroStruct& operator=(const runFEMacroStruct&) = delete;
73 
76  :
77  parameters_(other.parameters_)
78  , feMacroRunDone_(other.feMacroRunDone_.load())
79  {}
82  {
83  if (this != &other) {
84  parameters_ = other.parameters_;
85  feMacroRunDone_.store(other.feMacroRunDone_.load());
86  }
87  return *this;
88  }
89 
90  runFEMacroParameterStruct parameters_;
91  std::atomic<bool> feMacroRunDone_ = false;
92  }; //end runFEMacroStruct struct
93 
94  MacroMakerSupervisor (xdaq::ApplicationStub* s);
95  virtual ~MacroMakerSupervisor (void);
96 
97  void init (void);
98  void destroy (void);
99 
100  virtual void request (const std::string& requestType,
101  cgicc::Cgicc& cgiIn,
102  HttpXmlDocument& xmlOut,
103  const WebUsers::RequestUserInfo& userInfo) override;
104 
105  virtual void forceSupervisorPropertyValues (void) override;
106 
107  private:
109  void generateURL (void);
110  void verification (xgi::Input* in, xgi::Output* out);
111  void requestIcons (xgi::Input* in, xgi::Output* out);
112  void tooltipRequest (xgi::Input* in, xgi::Output* out);
113  void requestWrapper (xgi::Input* in, xgi::Output* out);
115 
116  static void RemoteControlWorkLoop (MacroMakerSupervisor* supervisorPtr);
117 
118  void handleRequest (const std::string Command,
119  HttpXmlDocument& xmldoc,
120  cgicc::Cgicc& cgi,
121  const WebUsers::RequestUserInfo& userInfo);
122 
123  xoap::MessageReference frontEndCommunicationRequest (xoap::MessageReference message);
124  xoap::MessageReference supervisorSequenceCheck (xoap::MessageReference message);
125 
126  void getFElist (HttpXmlDocument& xmldoc);
127  void getFEMacroList (HttpXmlDocument& xmldoc, const std::string& username);
128 
129  void writeData (HttpXmlDocument& xmldoc,
130  cgicc::Cgicc& cgi,
131  const std::string& username);
132  void readData (HttpXmlDocument& xmldoc,
133  cgicc::Cgicc& cgi,
134  const std::string& username);
135  void createMacro (HttpXmlDocument& xmldoc,
136  cgicc::Cgicc& cgi,
137  const std::string& username);
138  void loadMacro (const std::string& macroName,
139  std::string& macroString,
140  const std::string& username = "");
141  void loadMacros (HttpXmlDocument& xmldoc, const std::string& username);
142  void loadMacroNames (
143  const std::string& username,
144  std::pair<std::vector<std::string> /*public macros*/,
145  std::vector<std::string> /*private macros*/>& returnMacroNames);
146  void appendCommandToHistory (std::string command,
147  std::string Format,
148  std::string time,
149  std::string interfaces,
150  const std::string& username);
151  void appendCommandToHistory (std::string feClass,
152  std::string feUID,
153  std::string macroType,
154  std::string macroName,
155  std::string inputArgs,
156  std::string outputArgs,
157  bool saveOutputs,
158  const std::string& username);
159  void loadFEMacroSequences (HttpXmlDocument& xmldoc, const std::string& username);
160  void saveFEMacroSequence (cgicc::Cgicc& cgi, const std::string& username);
161  void getFEMacroSequence (HttpXmlDocument& xmldoc,
162  cgicc::Cgicc& cgi,
163  const std::string& username);
164  void runFEMacroSequence (HttpXmlDocument& xmldoc,
165  cgicc::Cgicc& cgi,
166  const std::string& username);
167  void deleteFEMacroSequence (cgicc::Cgicc& cgi, const std::string& username);
168  void makeSequencePublic (cgicc::Cgicc& cgi, const std::string& username);
169  void loadHistory (HttpXmlDocument& xmldoc, const std::string& username);
170  void loadFEHistory (HttpXmlDocument& xmldoc, const std::string& username);
171  void deleteMacro (HttpXmlDocument& xmldoc,
172  cgicc::Cgicc& cgi,
173  const std::string& username);
174  void editMacro (HttpXmlDocument& xmldoc,
175  cgicc::Cgicc& cgi,
176  const std::string& username);
177  void clearHistory (const std::string& username);
178  void clearFEHistory (const std::string& username);
179  void exportMacro (HttpXmlDocument& xmldoc,
180  cgicc::Cgicc& cgi,
181  const std::string& username);
182  void exportFEMacro (HttpXmlDocument& xmldoc,
183  cgicc::Cgicc& cgi,
184  const std::string& username);
185  void runFEMacro (HttpXmlDocument& xmldoc,
186  cgicc::Cgicc& cgi,
187  const WebUsers::RequestUserInfo& userInfo);
188  void runFEMacro (HttpXmlDocument& xmldoc,
189  std::string feClassSelected,
190  std::string feUIDSelected,
191  const std::string& macroType,
192  const std::string& macroName,
193  const std::string& inputArgs,
194  const std::string outputArgs,
195  bool saveOutputs,
196  const std::string& username,
197  const std::string& userGroupPermissions);
198  static void runFEMacroThread (runFEMacroStruct* feMacroRunThreadStruct,
199  MacroMakerSupervisor* mmSupervisor);
200 
201  std::string generateHexArray (const std::string& sourceHexString, int& numOfBytes);
202  bool isArgumentVariable (const std::string& argumentString);
203  void createCode (std::ostream& out,
204  const std::vector<std::string>& commands,
205  const std::string& tabOffset = "",
206  bool forFeMacro = false,
207  std::set<std::string>* inArgNames = 0,
208  std::set<std::string>* outArgNames = 0);
209 
210  SupervisorInfoMap allFESupervisorInfo_;
211  std::map<std::string /*FE UID*/, unsigned int /*superivisor index*/> FEtoSupervisorMap_;
212  std::map<std::string /*FE Type*/, std::set<std::string> /*FE UIDs*/> FEPluginTypetoFEsMap_;
213  std::map<std::string /*FE UID*/, std::string /*FE Type*/> FEtoPluginTypeMap_;
214 
215  std::string securityCode_;
216  bool defaultSequence_;
217 
218  std::map<std::string /* username */,
219  std::vector<std::string> /* last command */> lastFeCommandToHistory_;
220 
221 
222  std::vector<runFEMacroStruct> feMacroRunThreadStruct_;
223 
224 }; // end MacroMakerSupervisor declaration
225 // clang-format on
226 } // namespace ots
227 
228 #endif
friend friend class MacroMakerSupervisor
virtual void forceSupervisorPropertyValues(void) override
override to force supervisor property values (and ignore user settings)
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.