1 #ifndef _ots_CoreSupervisorBase_h_
2 #define _ots_CoreSupervisorBase_h_
4 #include "otsdaq/FiniteStateMachine/RunControlStateMachine.h"
5 #include "otsdaq/SOAPUtilities/SOAPMessenger.h"
6 #include "otsdaq/WorkLoopManager/WorkLoopManager.h"
8 #include "otsdaq/CoreSupervisors/CorePropertySupervisorBase.h"
10 #include "otsdaq/CgiDataUtilities/CgiDataUtilities.h"
11 #include "otsdaq/SOAPUtilities/SOAPUtilities.h"
12 #include "otsdaq/XmlUtilities/HttpXmlDocument.h"
14 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
15 #include "otsdaq/WebUsersUtilities/RemoteWebUsers.h"
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"
24 #include <toolbox/fsm/FailedEvent.h>
26 #include <xdaq/NamespaceURI.h>
27 #include <xoap/Method.h>
58 unsigned int getSupervisorLID (
void)
const {
return getApplicationDescriptor()->getLocalId(); }
68 virtual void defaultPage (xgi::Input* in, xgi::Output* out);
69 virtual void request (
const std::string& requestType,
78 virtual std::vector<SupervisorInfo::SubappInfo> getSubappInfo (
void) {
return std::vector<SupervisorInfo::SubappInfo>(); }
81 xoap::MessageReference workLoopStatusRequestWrapper (xoap::MessageReference message);
82 void defaultPageWrapper (xgi::Input* in, xgi::Output* out);
83 void requestWrapper (xgi::Input* in, xgi::Output* out);
84 xoap::MessageReference TRACESupervisorRequest (xoap::MessageReference message);
89 xoap::MessageReference stateMachineXoapHandler (xoap::MessageReference message);
91 xoap::MessageReference stateMachineStateRequest (xoap::MessageReference message);
92 xoap::MessageReference stateMachineErrorMessageRequest (xoap::MessageReference message);
96 virtual xoap::MessageReference workLoopStatusRequest (xoap::MessageReference message);
97 virtual xoap::MessageReference applicationStatusRequest (xoap::MessageReference message);
99 bool stateMachineThread (toolbox::task::WorkLoop* workLoop);
101 virtual void stateInitial (toolbox::fsm::FiniteStateMachine& fsm);
102 virtual void statePaused (toolbox::fsm::FiniteStateMachine& fsm);
103 virtual void stateRunning (toolbox::fsm::FiniteStateMachine& fsm);
104 virtual void stateHalted (toolbox::fsm::FiniteStateMachine& fsm);
106 virtual void inError (toolbox::fsm::FiniteStateMachine& fsm);
108 virtual void transitionConfiguring (toolbox::Event::Reference event);
110 void transitionConfiguringFSMs(
void);
114 virtual void transitionPausing (toolbox::Event::Reference event);
115 virtual void transitionResuming (toolbox::Event::Reference event);
116 virtual void transitionStarting (toolbox::Event::Reference event);
117 virtual void transitionStopping (toolbox::Event::Reference event);
118 virtual void enteringError (toolbox::Event::Reference event);
120 static const std::string WORK_LOOP_DONE, WORK_LOOP_WORKING;
123 WorkLoopManager stateMachineWorkLoopManager_;
124 toolbox::BSem stateMachineSemaphore_;
125 std::vector<VStateMachine*> theStateMachineImplementation_;
129 unsigned int stateMachinesIterationWorkCount_;
130 unsigned int subIterationWorkStateMachineIndex_;
131 void preStateMachineExecution(
unsigned int i);
132 void postStateMachineExecution(
unsigned int i);
133 void preStateMachineExecutionLoop(
void);
134 void postStateMachineExecutionLoop(
void);
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.
friend class MacroMakerSupervisor
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)
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)