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
16 #include "artdaq/ExternalComms/CommanderInterface.hh"
17 #include "otsdaq/CoreSupervisors/CoreSupervisorBase.h"
18 #include "otsdaq/TablePlugins/ARTDAQTableBase/ARTDAQTableBase.h"
45 virtual void transitionConfiguring(toolbox::Event::Reference event)
override;
48 virtual void transitionPausing(toolbox::Event::Reference event)
override;
49 virtual void transitionResuming(toolbox::Event::Reference event)
override;
50 virtual void transitionStarting(toolbox::Event::Reference event)
override;
51 virtual void transitionStopping(toolbox::Event::Reference event)
override;
52 virtual void enteringError(toolbox::Event::Reference event)
override;
54 virtual std::vector<SupervisorInfo::SubappInfo> getSubappInfo(
void)
override;
57 if(!theStateMachine_.isInTransition() &&
58 (theStateMachine_.getCurrentStateName() ==
59 RunControlStateMachine::HALTED_STATE_NAME ||
60 theStateMachine_.getCurrentStateName() ==
61 RunControlStateMachine::INITIAL_STATE_NAME))
64 std::lock_guard<std::mutex> lk(thread_mutex_);
65 __COUTVS__(20, thread_progress_message_);
66 return thread_progress_message_;
70 std::pair<DAQInterfaceProcessInfo, std::unique_ptr<artdaq::CommanderInterface>>>
71 makeCommandersFromProcessInfo();
73 static std::list<std::string> tokenize_(std::string
const& input);
76 void configuringThread(
void);
77 void startingThread(
void);
83 explicit PyObjectGuard(PyObject* o)
90 PyObjectGuard(
const PyObjectGuard&) =
delete;
91 PyObjectGuard& operator=(
const PyObjectGuard&) =
delete;
92 PyObject* get()
const {
return obj; }
95 PyObject *daqinterface_ptr_, *stringIO_out_,
97 std::recursive_mutex daqinterface_pythonMutex_;
98 std::mutex daqinterface_statusMutex_;
99 std::string daqinterface_status_;
101 std::string daqinterface_state_;
102 std::unique_ptr<std::thread> runner_thread_;
103 std::atomic<bool> runner_running_;
105 std::mutex thread_mutex_;
106 ProgressBar thread_progress_bar_;
107 std::string thread_progress_message_;
108 std::string thread_error_message_;
109 int last_thread_progress_read_;
110 time_t last_thread_progress_update_;
111 std::map<std::string, std::string> label_to_proc_type_map_;
113 std::string capturePyErr(std::string label =
"");
114 bool checkPythonError(
116 std::string captureStderrAndStdout_(std::string label =
"");
117 void getDAQState_(
void);
118 std::string getProcessInfo_(
void);
119 std::string artdaqStateToOtsState(std::string state);
120 std::string labelToProcType_(std::string label);
121 std::list<DAQInterfaceProcessInfo> getAndParseProcessInfo_(
void);
122 void daqinterfaceRunner_(
void);
123 void stop_runner_(
void);
124 void start_runner_(
void);
125 void set_thread_message_(std::string msg)
127 std::lock_guard<std::mutex> lk(thread_mutex_);
128 thread_progress_message_ = msg;
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