tdaq-develop-2025-02-12
WorkLoopManager.h
1 #ifndef _ots_WorkLoopManager_h
2 #define _ots_WorkLoopManager_h
3 
4 #include <toolbox/task/WorkLoop.h>
5 #pragma GCC diagnostic push
6 #pragma GCC diagnostic ignored "-Wunknown-pragmas"
7 #include <xgi/Method.h> //for cgicc::Cgicc
8 #pragma GCC diagnostic pop
9 #include <xoap/MessageReference.h>
10 
11 #include <ctime>
12 #include <map>
13 #include <string>
14 
15 namespace ots
16 {
17 class HttpXmlDocument;
18 class SOAPCommand;
19 
21 {
22  public:
23  typedef unsigned long long RequestNumber;
24 
25  WorkLoopManager(toolbox::task::ActionSignature* job);
26  ~WorkLoopManager(void);
27 
35  HttpXmlDocument processRequest(cgicc::Cgicc& cgi);
36  HttpXmlDocument processRequest(const xoap::MessageReference& message);
37  bool report(toolbox::task::WorkLoop* workLoop,
38  std::string result,
39  float progress,
40  bool status);
41  bool removeProcessedRequests(void);
42  std::string getWorkLoopRequest(toolbox::task::WorkLoop* workLoop);
43  void translateWorkLoopName(toolbox::task::WorkLoop* workLoop,
44  SOAPCommand& soapCommand);
45 
47  bool getRequestResult(cgicc::Cgicc& cgi, HttpXmlDocument& xmldoc);
48  xoap::MessageReference getMessage(toolbox::task::WorkLoop* workLoop);
49 
50  private:
51  const std::string cWorkLoopType_;
52  static constexpr int maxWorkLoops = 5;
53  static constexpr int timeOutInSeconds = 20;
54  struct WorkLoopStruct
55  {
56  toolbox::task::WorkLoop* workLoop;
57  std::string workLoopName;
58  std::string request;
59  std::string result;
60  bool done;
61  float progress;
62  time_t requestStartTime;
63  time_t requestLastTimeChecked;
64  xoap::MessageReference message;
65  };
66  HttpXmlDocument processRequest(std::string workLoopName,
67  const xoap::MessageReference* message = 0);
68  bool removeWorkLoop(toolbox::task::WorkLoop* workLoop);
69  bool removeWorkLoop(RequestNumber requestNumber);
70  bool removeTimedOutRequests(void);
71  std::string composeWorkLoopName(RequestNumber requestNumber, cgicc::Cgicc& cgi);
72  std::string composeWorkLoopName(RequestNumber requestNumber,
73  const xoap::MessageReference& message);
74  RequestNumber getWorkLoopRequestNumber(toolbox::task::WorkLoop* workLoop);
75  RequestNumber getWorkLoopRequestNumber(std::string workLoopName);
76  // used by the class
77  // because it is
78  // careful to use
79  // the right format
80  std::string getWorkLoopRequest(std::string workLoopName);
84 
85  std::map<RequestNumber, WorkLoopStruct> workLoops_;
86  toolbox::task::ActionSignature* job_;
87  unsigned long long requestNumber_;
88  std::string requestName_;
89 };
90 
91 } // namespace ots
92 
93 #endif
HttpXmlDocument processRequest(cgicc::Cgicc &cgi)
bool getRequestResult(cgicc::Cgicc &cgi, HttpXmlDocument &xmldoc)
Getters.