otsdaq  3.11.00
CoreSupervisorBase.h
1 #ifndef _ots_CoreSupervisorBase_h_
2 #define _ots_CoreSupervisorBase_h_
3 
4 #include "otsdaq/FiniteStateMachine/RunControlStateMachine.h"
5 #include "otsdaq/SOAPUtilities/SOAPMessenger.h"
6 #include "otsdaq/WorkLoopManager/WorkLoopManager.h"
7 
8 #include "otsdaq/CoreSupervisors/CorePropertySupervisorBase.h"
9 
10 #include "otsdaq/CgiDataUtilities/CgiDataUtilities.h"
11 #include "otsdaq/SOAPUtilities/SOAPUtilities.h"
12 #include "otsdaq/XmlUtilities/HttpXmlDocument.h"
13 
14 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
15 #include "otsdaq/WebUsersUtilities/RemoteWebUsers.h"
16 
17 #pragma GCC diagnostic push
18 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
19 #include <xdaq/Application.h>
20 #pragma GCC diagnostic pop
21 #include "otsdaq/Macros/XDAQApplicationMacros.h"
22 #include "xgi/Method.h"
23 
24 #include <toolbox/fsm/FailedEvent.h>
25 
26 #include <xdaq/NamespaceURI.h>
27 #include <xoap/Method.h>
28 
29 #include <time.h>
30 #include <map>
31 #include <memory>
32 #include <set>
33 #include <string> /*string and to_string*/
34 #include <vector>
35 
36 namespace ots
37 {
38 // clang-format off
39 
45 class CoreSupervisorBase : public xdaq::Application,
46  public SOAPMessenger,
49 {
50  friend class MacroMakerSupervisor;
52 
53  public:
54  CoreSupervisorBase(xdaq::ApplicationStub* stub);
55  virtual ~CoreSupervisorBase(void);
56 
57  void destroy(void);
58 
59  unsigned int getSupervisorLID (void) const { return getApplicationDescriptor()->getLocalId(); }
60 
61 
69  virtual void defaultPage (xgi::Input* in, xgi::Output* out);
70  virtual void request (const std::string& requestType,
71  cgicc::Cgicc& cgiIn,
72  HttpXmlDocument& xmlOut,
73  const WebUsers::RequestUserInfo& userInfo);
74  virtual void nonXmlRequest (const std::string& requestType,
75  cgicc::Cgicc& cgiIn,
76  std::ostream& out,
77  const WebUsers::RequestUserInfo& userInfo);
78  virtual std::string getStatusProgressDetail (void);
79  virtual std::vector<
80  SupervisorInfo::SubappInfo> getSubappInfo (void) { return std::vector<SupervisorInfo::SubappInfo>(); }
81 
82  private:
83  xoap::MessageReference workLoopStatusRequestWrapper (xoap::MessageReference message);
84  void defaultPageWrapper (xgi::Input* in, xgi::Output* out);
85  void requestWrapper (xgi::Input* in, xgi::Output* out);
86  xoap::MessageReference TRACESupervisorRequest (xoap::MessageReference message);
87 
88  public:
90  void stateMachineXgiHandler (xgi::Input* in, xgi::Output* out);
91  xoap::MessageReference stateMachineXoapHandler (xoap::MessageReference message);
92 
93  xoap::MessageReference stateMachineStateRequest (xoap::MessageReference message);
94  xoap::MessageReference stateMachineErrorMessageRequest (xoap::MessageReference message);
95 
96  void sendAsyncExceptionToGateway (const std::string& errMsg, bool isPauseException, bool isStopException);
97 
98  virtual xoap::MessageReference workLoopStatusRequest (xoap::MessageReference message);
99  virtual xoap::MessageReference applicationStatusRequest (xoap::MessageReference message);
100  xoap::MessageReference minReadyForEventGenerationStartIterationRequest(xoap::MessageReference message);
101 
102  bool stateMachineThread (toolbox::task::WorkLoop* workLoop);
103 
104  virtual void stateInitial (toolbox::fsm::FiniteStateMachine& fsm);
105  virtual void statePaused (toolbox::fsm::FiniteStateMachine& fsm);
106  virtual void stateRunning (toolbox::fsm::FiniteStateMachine& fsm);
107  virtual void stateHalted (toolbox::fsm::FiniteStateMachine& fsm);
108  virtual void stateConfigured (toolbox::fsm::FiniteStateMachine& fsm);
109  virtual void inError (toolbox::fsm::FiniteStateMachine& fsm);
110 
111  virtual void transitionConfiguring (toolbox::Event::Reference event);
112  protected:
113  void configureInit (bool attemptSkipIfGroupUnchanged = false);
114  void transitionConfiguringFSMs (void);
115  public:
116  virtual void transitionHalting (toolbox::Event::Reference event);
117  virtual void transitionInitializing (toolbox::Event::Reference event);
118  virtual void transitionPausing (toolbox::Event::Reference event);
119  virtual void transitionResuming (toolbox::Event::Reference event);
120  virtual void transitionStarting (toolbox::Event::Reference event);
121  virtual void transitionStopping (toolbox::Event::Reference event);
122  virtual void enteringError (toolbox::Event::Reference event);
123 
124  static const std::string WORK_LOOP_DONE, WORK_LOOP_WORKING;
125 
126  protected:
127  WorkLoopManager stateMachineWorkLoopManager_;
128  toolbox::BSem stateMachineSemaphore_;
129  std::vector<VStateMachine*> theStateMachineImplementation_;
130 
135 
137  std::vector<bool> stateMachinesIterationDone_;
139  unsigned int lastSubsystemIterationIndexSeen_ = 0;
140  unsigned int stateMachinesIterationWorkCount_;
141  unsigned int subIterationWorkStateMachineIndex_;
142  void preStateMachineExecution(unsigned int i);
143  void postStateMachineExecution(unsigned int i);
144  void preStateMachineExecutionLoop(void);
145  void postStateMachineExecutionLoop(void);
146 
147  RemoteWebUsers theRemoteWebUsers_;
148 
149 };
150 // clang-format on
151 } // namespace ots
152 
153 #endif
virtual void transitionHalting(toolbox::Event::Reference event)
virtual void stateInitial(toolbox::fsm::FiniteStateMachine &fsm)
void stateMachineXgiHandler(xgi::Input *in, xgi::Output *out)
State Machine request handlers.
virtual void request(const std::string &requestType, cgicc::Cgicc &cgiIn, HttpXmlDocument &xmlOut, const WebUsers::RequestUserInfo &userInfo)
virtual void stateConfigured(toolbox::fsm::FiniteStateMachine &fsm)
virtual std::string getStatusProgressDetail(void)
virtual void statePaused(toolbox::fsm::FiniteStateMachine &fsm)
virtual void stateRunning(toolbox::fsm::FiniteStateMachine &fsm)
virtual void transitionInitializing(toolbox::Event::Reference event)
std::set< unsigned int > stateMachinesWaitingSubsystemIteration_
re-armed when the subsystem-iteration index changes
virtual void defaultPage(xgi::Input *in, xgi::Output *out)
virtual void nonXmlRequest(const std::string &requestType, cgicc::Cgicc &cgiIn, std::ostream &out, const WebUsers::RequestUserInfo &userInfo)
std::vector< bool > stateMachinesIterationDone_
for managing transition iterations
void sendAsyncExceptionToGateway(const std::string &errMsg, bool isPauseException, bool isStopException)
virtual void stateHalted(toolbox::fsm::FiniteStateMachine &fsm)
defines used also by OtsConfigurationWizardSupervisor