1 #ifndef _ots_ARTDAQSupervisor_h
2 #define _ots_ARTDAQSupervisor_h
4 #if __cplusplus > 201402L
5 #pragma GCC diagnostic push
6 #pragma GCC diagnostic ignored "-Wregister"
8 #pragma GCC diagnostic pop
20 #include "artdaq/ExternalComms/CommanderInterface.hh"
21 #include "otsdaq/CoreSupervisors/CoreSupervisorBase.h"
22 #include "otsdaq/TablePlugins/ARTDAQTableBase/ARTDAQTableBase.h"
49 virtual void transitionConfiguring(toolbox::Event::Reference event)
override;
52 virtual void transitionPausing(toolbox::Event::Reference event)
override;
53 virtual void transitionResuming(toolbox::Event::Reference event)
override;
54 virtual void transitionStarting(toolbox::Event::Reference event)
override;
55 virtual void transitionStopping(toolbox::Event::Reference event)
override;
56 virtual void enteringError(toolbox::Event::Reference event)
override;
58 void request(
const std::string& requestType,
63 virtual std::vector<SupervisorInfo::SubappInfo> getSubappInfo(
void)
override;
66 if(!theStateMachine_.isInTransition() &&
67 (theStateMachine_.getCurrentStateName() ==
68 RunControlStateMachine::HALTED_STATE_NAME ||
69 theStateMachine_.getCurrentStateName() ==
70 RunControlStateMachine::INITIAL_STATE_NAME))
73 std::lock_guard<std::mutex> lk(thread_mutex_);
74 __COUTVS__(20, thread_progress_message_);
75 return thread_progress_message_;
79 std::pair<DAQInterfaceProcessInfo, std::unique_ptr<artdaq::CommanderInterface>>>
80 makeCommandersFromProcessInfo();
86 std::set<std::string> getConfiguredArtdaqHosts(
void);
88 static std::list<std::string> tokenize_(std::string
const& input);
91 void forceSupervisorPropertyValues(
void)
override;
92 void initArtdaqSystemVariables();
93 void saveArtdaqSystemVariables();
94 void loadArtdaqSystemVariables();
95 std::string getServiceDataFilePath()
const;
97 static const std::string ARTDAQ_SYSVAR_NAMESPACE;
99 void configuringThread(
void);
100 void startingThread(
void);
106 explicit PyObjectGuard(PyObject* o)
113 PyObjectGuard(
const PyObjectGuard&) =
delete;
114 PyObjectGuard& operator=(
const PyObjectGuard&) =
delete;
115 PyObject* get()
const {
return obj; }
118 PyObject *daqinterface_ptr_, *stringIO_out_,
120 std::recursive_timed_mutex daqinterface_pythonMutex_;
121 std::mutex daqinterface_statusMutex_;
122 std::string daqinterface_status_;
124 std::string daqinterface_state_;
131 std::atomic<bool> running{
true};
132 std::atomic<bool> exited{
false};
134 std::unique_ptr<std::thread> runner_thread_;
135 std::shared_ptr<RunnerControl> runner_control_;
136 std::atomic<bool> runner_abandoned_{
false};
138 std::mutex thread_mutex_;
139 ProgressBar thread_progress_bar_;
140 std::string thread_progress_message_;
141 std::string thread_error_message_;
142 int last_thread_progress_read_;
143 time_t last_thread_progress_update_;
144 std::map<std::string, std::string> label_to_proc_type_map_;
146 unsigned int cachedMinReadyForEventGenerationStartIteration_ = 0;
150 std::string capturePyErr(std::string label =
"", std::string* summaryOut =
nullptr);
151 bool checkPythonError(
153 std::string captureStderrAndStdout_(std::string label =
"");
154 void getDAQState_(
void);
155 std::string getProcessInfo_(
void);
156 std::string artdaqStateToOtsState(std::string state);
157 std::string labelToProcType_(std::string label);
158 std::list<DAQInterfaceProcessInfo> getAndParseProcessInfo_(
void);
159 void daqinterfaceRunner_(std::shared_ptr<RunnerControl> control);
160 bool stop_runner_(
unsigned int timeoutSeconds = 5);
161 void start_runner_(
void);
162 void set_thread_message_(std::string msg)
164 std::lock_guard<std::mutex> lk(thread_mutex_);
165 thread_progress_message_ = msg;
void request(const std::string &requestType, cgicc::Cgicc &cgiIn, HttpXmlDocument &xmlOut, const WebUsers::RequestUserInfo &userInfo) override
virtual void transitionHalting(toolbox::Event::Reference event) override
virtual void transitionInitializing(toolbox::Event::Reference event) override
virtual std::string getStatusProgressDetail(void) override
virtual std::string getStatusProgressDetail(void)
defines used also by OtsConfigurationWizardSupervisor