RTC Toolkit  2.0.0
acquisitor.hpp
Go to the documentation of this file.
1 
12 #ifndef RTCTK_METADATACOLLECTOR_ACQUISITOR_HPP
13 #define RTCTK_METADATACOLLECTOR_ACQUISITOR_HPP
14 
15 #include <Metadaqif.hpp>
16 #include <Rtctkif.hpp>
17 #include <rtctk/metadataCollector/acquisitor.rad.hpp>
18 #include <rtctk/componentFramework/events.rad.hpp>
22 
23 namespace rtctk::metadataCollector {
24 
25 using namespace rtctk::componentFramework;
26 
27 template <typename Super>
28 struct Runnable;
29 
30 template <typename Super>
31 struct Loopaware;
32 
33 // command is not allowed in current state or guard
34 class DaqRequestRejected : public metadaqif::DaqException {
35 public:
36  DaqRequestRejected(std::string const& request_id,
37  std::string const& session_id,
38  std::string const& state_id);
39 };
40 
41 class DaqReply : public metadaqif::DaqReply {
42 public:
43  DaqReply() = default;
44 
45  DaqReply(std::string const& id);
46 
47  std::string getId() const override;
48 
49  void setId(std::string const& id) override;
50 
51  bool hasKey() const override;
52 
53  bool keyEquals(metadaqif::DaqReply const& other) const override;
54 
55  std::unique_ptr<metadaqif::DaqReply> clone() const;
56 
57  std::unique_ptr<metadaqif::DaqReply> cloneKey() const;
58 
59 private:
60  std::string m_id;
61 };
62 
63 class DaqStopReply : public metadaqif::DaqStopReply {
64  public:
65  DaqStopReply() = default;
66 
67  DaqStopReply(std::string const& id,
68  std::vector<std::string> const& files,
69  std::string const& kw);
70 
71  std::string getId() const override;
72 
73  void setId(std::string const& id) override;
74 
75  std::string getKeywords() const override;
76 
77  void setKeywords(std::string const& kw) override;
78 
79  std::vector<std::string> getFiles() const override;
80 
81  void setFiles(std::vector<std::string> const& fs) override;
82 
83  bool hasKey() const override;
84 
85  bool keyEquals(metadaqif::DaqStopReply const& other) const override;
86 
87  std::unique_ptr<metadaqif::DaqStopReply> clone() const;
88 
89  std::unique_ptr<metadaqif::DaqStopReply> cloneKey() const;
90 
91  private:
92  std::string m_id;
93  std::vector<std::string> m_files;
94  std::string m_kw;
95 };
96 
97 class DaqStatus : public metadaqif::DaqStatus {
98 
99  public:
100  DaqStatus() = default;
101 
102  std::string getId() const override;
103 
104  void setId(std::string const& id) override;
105 
106  std::string getKeywords() const override;
107 
108  void setKeywords(std::string const& kw) override;
109 
110  std::string getMessage() const override;
111 
112  void setMessage(std::string const& msg) override;
113 
114  double getTimestamp() const override;
115 
116  void setTimestamp(double ts) override;
117 
118  metadaqif::DaqState getState() const override;
119 
120  void setState(metadaqif::DaqState st) override;
121 
122  std::vector<std::string> getFiles() const override;
123 
124  void setFiles(std::vector<std::string> const& fs) override;
125 
126  bool hasKey() const override;
127 
128  bool keyEquals(metadaqif::DaqStatus const& other) const override;
129 
130  std::unique_ptr<metadaqif::DaqStatus> clone() const;
131 
132  std::unique_ptr<metadaqif::DaqStatus> cloneKey() const;
133 
134  private:
135  std::string m_id;
136  std::string m_msg;
137  double m_ts;
138  metadaqif::DaqState m_st;
139  std::vector<std::string> m_files;
140  std::string m_kw;
141 };
142 
146 class AcquisitorCmdsImpl : public metadaqif::AsyncMetaDaq {
147 public:
148  static void Register(CommandReplier& replier, StateMachineEngine& engine);
149 
151 
152  ::elt::mal::future<std::shared_ptr<metadaqif::DaqReply>> StartDaq(std::string const& id) override;
153 
154  ::elt::mal::future<std::shared_ptr<metadaqif::DaqStopReply>> StopDaq(std::string const& id) override;
155 
156  ::elt::mal::future<std::shared_ptr<metadaqif::DaqReply>> AbortDaq(std::string const& id) override;
157 
158  ::elt::mal::future<std::shared_ptr<metadaqif::DaqStatus>> GetDaqStatus(std::string const& id) override;
159 
160 private:
161  StateMachineEngine& m_engine;
162 };
163 
169 template <typename Super>
170 struct Acquisitor : Super {
171  static_assert(std::is_base_of_v<RtcComponent, Super>, "'Acquisitor' requires 'RtcComponent'");
172  static_assert(not is_base_of_template_v<Runnable, Super>, "'Acquisitor' excludes 'Runnable'");
173  static_assert(not is_base_of_template_v<Loopaware, Super>, "'Acquisitor' excludes 'Loopaware'");
174 
175  class BizLogicIf : public Super::BizLogicIf {
176  public:
177  virtual void ActivityPreparing(StopToken st, std::string const& id){};
178  virtual void ActivityAcquiring(StopToken st){};
180  return {};
181  };
182  virtual void ActivityAborting(StopToken st){};
183  virtual void ActivityRecovering(StopToken st){};
184  };
185 
186  class InputStage : public Super::InputStage {
187  public:
188  using Super::InputStage::InputStage;
189 
190  void Start() override {
191  Super::InputStage::Start();
192 
193  AcquisitorCmdsImpl::Register(this->m_replier, this->m_engine);
194  }
195  };
196 
197  class OutputStage : public Super::OutputStage {
198  public:
200  // Handlers ###################################################################
201 
202  engine.RegisterRejectHandler(
203  events::StartDaq::ID, [](const rad::AnyEvent& event, std::string const& state) {
204  if (auto req = rad::GetPayloadNothrow<events::StartDaq>(event); req) {
205  auto id = req->GetRequestPayload();
206  req->SetException(DaqRequestRejected{events::StartDaq::ID, id, state});
207  }
208  });
209 
210  engine.RegisterRejectHandler(
211  events::StopDaq::ID, [](const rad::AnyEvent& event, std::string const& state) {
212  if (auto req = rad::GetPayloadNothrow<events::StopDaq>(event); req) {
213  auto id = req->GetRequestPayload();
214  req->SetException(DaqRequestRejected{events::StopDaq::ID, id, state});
215  }
216  });
217 
218  engine.RegisterRejectHandler(
219  events::AbortDaq::ID, [](const rad::AnyEvent& event, std::string const& state) {
220  if (auto req = rad::GetPayloadNothrow<events::AbortDaq>(event); req) {
221  auto id = req->GetRequestPayload();
222  req->SetException(DaqRequestRejected{events::AbortDaq::ID, id, state});
223  }
224  });
225 
226  // No Disable in states ###############################################################
227 
228  this->m_no_disable_in_states.push_back("On:Operational:Preparing");
229  this->m_no_disable_in_states.push_back("On:Operational:Acquiring");
230  this->m_no_disable_in_states.push_back("On:Operational:Finalising");
231  this->m_no_disable_in_states.push_back("On:Operational:Aborting");
232  this->m_no_disable_in_states.push_back("On:Operational:Recovering");
233  this->m_no_disable_in_states.push_back("On:Operational:Error");
234 
235  // No Update in states ################################################################
236 
237  this->m_no_update_in_states.push_back("On:Operational:Preparting");
238  this->m_no_update_in_states.push_back("On:Operational:Acquiring");
239  this->m_no_update_in_states.push_back("On:Operational:Finalising");
240  this->m_no_update_in_states.push_back("On:Operational:Aborting");
241  this->m_no_update_in_states.push_back("On:Operational:Recovering");
242  this->m_no_update_in_states.push_back("On:Operational:Error");
243 
244  // ClearHistory #####################################################################
245 
246  engine.RegisterAction("ActionClearHistory",
247  [this](auto c) { m_acquisition_history.clear(); });
248 
249  // StartDaq #####################################################################
250 
251  engine.RegisterGuard("GuardPreparingAllowed", [this](auto c) {
252  auto req = GetPayloadNothrow<events::StartDaq>(c);
253  auto id = req->GetRequestPayload();
254 //#define FEATURE_REQUIRE_UNIQUE_ID_FOR_NEW_SESSION
255 #ifdef FEATURE_REQUIRE_UNIQUE_ID_FOR_NEW_SESSION
256  return m_acquisition_history.count(id) == 0;
257 #else
258  return true;
259 #endif
260  });
261 
262  engine.RegisterAction("ActionPreparingEntry", [this](auto c) {
263  m_tmp_start_request = GetPayloadNothrow<events::StartDaq>(c);
264  m_active_id = m_tmp_start_request->GetRequestPayload();
265  std::string id = m_active_id.value();
266 
267  DaqStatus status;
268  status.setId(id);
269  status.setState(metadaqif::Acquiring);
270  status.setTimestamp(GetCurrentTime());
271  m_acquisition_history[id] = status;
272  });
273 
274  engine.RegisterAction("ActionPreparingDone", [this](auto c) {
275  if (m_tmp_start_request) {
276  std::string id = m_active_id.value();
277  m_tmp_start_request->SetReplyValue(std::make_shared<DaqReply>(id));
278  m_tmp_start_request = nullptr;
279  }
280  });
281 
282  engine.RegisterAction("ActionPreparingFailed", [this](auto c) {
283  if (m_tmp_start_request) {
284  std::string id = m_active_id.value();
285  auto eptr = GetPayloadNothrow<events::Error>(c);
286  std::string msg = NestedExceptionPrinter(std::move(*eptr)).Str();
287  m_acquisition_history.at(id).setState(metadaqif::Failed);
288  m_acquisition_history.at(id).setTimestamp(GetCurrentTime());
289  m_acquisition_history.at(id).setMessage(msg);
290  m_tmp_start_request->SetException(metadaqif::DaqException(id, msg));
291  m_tmp_start_request = nullptr;
292  }
293  });
294 
295  // StopDaq #####################################################################
296 
297  engine.RegisterGuard("GuardFinalisingAllowed", [this](auto c) {
298  auto req = GetPayloadNothrow<events::StopDaq>(c);
299  auto id = req->GetRequestPayload();
300  return m_active_id.value() == id;
301  });
302 
303  engine.RegisterAction("ActionFinalisingEntry", [this](auto c) {
304  m_tmp_stop_request = GetPayloadNothrow<events::StopDaq>(c);
305  });
306 
307  engine.RegisterAction("ActionFinalisingDone", [this](auto c) {
308  if (m_tmp_stop_request) {
309  std::string id = m_active_id.value();
310  m_acquisition_history.at(id).setState(metadaqif::Succeeded);
311  m_acquisition_history.at(id).setTimestamp(GetCurrentTime());
312 
313  m_tmp_stop_request->SetReplyValue(
314  std::make_shared<DaqStopReply>(m_acquisition_history.at(id).getId(),
315  m_acquisition_history.at(id).getFiles(),
316  m_acquisition_history.at(id).getKeywords()));
317  m_tmp_stop_request = nullptr;
318  }
319  });
320 
321  engine.RegisterAction("ActionFinalisingFailed", [this](auto c) {
322  if (m_tmp_stop_request) {
323  std::string id = m_active_id.value();
324  auto eptr = GetPayloadNothrow<events::Error>(c);
325  std::string msg = NestedExceptionPrinter(std::move(*eptr)).Str();
326  m_acquisition_history.at(id).setState(metadaqif::Failed);
327  m_acquisition_history.at(id).setTimestamp(GetCurrentTime());
328  m_acquisition_history.at(id).setMessage(msg);
329  m_tmp_stop_request->SetException(metadaqif::DaqException(id, msg));
330  m_tmp_stop_request = nullptr;
331  }
332  });
333 
334  // AbortDaq #####################################################################
335 
336  engine.RegisterGuard("GuardAbortingAllowed", [this](auto c) {
337  auto req = GetPayloadNothrow<events::AbortDaq>(c);
338  auto id = req->GetRequestPayload();
339  return m_active_id.value() == id;
340  });
341 
342  engine.RegisterAction("ActionAbortingEntry", [this](auto c) {
343  m_tmp_abort_request = GetPayloadNothrow<events::AbortDaq>(c);
344  });
345 
346  engine.RegisterAction("ActionAbortingDone", [this](auto c) {
347  if (m_tmp_abort_request) {
348  std::string id = this->m_active_id.value();
349  m_acquisition_history.at(id).setState(metadaqif::Aborted);
350  m_acquisition_history.at(id).setTimestamp(GetCurrentTime());
351  m_tmp_abort_request->SetReplyValue(std::make_shared<DaqReply>(id));
352  m_tmp_abort_request = nullptr;
353  }
354  });
355 
356  // GetDaqStatus #####################################################################
357 
358  engine.RegisterAction("ActionGetDaqStatus", [this](auto c) {
359  auto request = GetPayloadNothrow<events::GetDaqStatus>(c);
360  auto id = request->GetRequestPayload();
361 
362  if (m_acquisition_history.count(id)) {
363  request->SetReplyValue(std::move(m_acquisition_history.at(id).clone()));
364  } else {
365  auto status = std::make_shared<DaqStatus>();
366  status->setId(id);
367  status->setState(metadaqif::NotStarted);
368  status->setTimestamp(0);
369  request->SetReplyValue(status);
370  }
371  });
372 
373  // Recover #####################################################################
374 
375  engine.RegisterAction("ActionRecoveringEntry", [this](auto c) {
376  std::string id = m_active_id.value();
377  auto eptr = GetPayloadNothrow<events::Error>(c);
378  std::string msg = NestedExceptionPrinter(std::move(*eptr)).Str();
379  m_acquisition_history.at(id).setState(metadaqif::Failed);
380  m_acquisition_history.at(id).setTimestamp(GetCurrentTime());
381  m_acquisition_history.at(id).setMessage(msg);
382  });
383 
384  // Activities #####################################################################
385 
386  engine.RegisterActivity(
387  "ActivityPreparing",
388  [this](StopToken stop_token) {
389  std::string id = m_active_id.value();
390  static_cast<BizLogicIf&>(this->m_logic).ActivityPreparing(stop_token, id);
391  },
392  this->m_success_handler,
393  this->m_error_handler);
394 
395  engine.RegisterActivity(
396  "ActivityFinalising",
397  [this](StopToken stop_token) {
398  std::string id = m_active_id.value();
399  auto result =
400  static_cast<BizLogicIf&>(this->m_logic).ActivityFinalising(stop_token);
401  m_acquisition_history.at(id).setId(result.getId());
402  m_acquisition_history.at(id).setFiles(result.getFiles());
403  m_acquisition_history.at(id).setKeywords(result.getKeywords());
404  },
405  this->m_success_handler,
406  this->m_error_handler);
407 
408  engine.RegisterActivity(
409  "ActivityAcquiring",
410  [this](StopToken stop_token) {
411  static_cast<BizLogicIf&>(this->m_logic).ActivityAcquiring(stop_token);
412  },
413  nullptr,
414  this->m_error_handler);
415 
416  engine.RegisterActivity(
417  "ActivityAborting",
418  [this](StopToken stop_token) {
419  static_cast<BizLogicIf&>(this->m_logic).ActivityAborting(stop_token);
420  },
421  this->m_success_handler,
422  this->m_error_handler);
423 
424  engine.RegisterActivity(
425  "ActivityRecovering",
426  [this](StopToken stop_token) {
427  static_cast<BizLogicIf&>(this->m_logic).ActivityRecovering(stop_token);
428  },
429  this->m_success_handler,
430  this->m_error_handler);
431  }
432 
433  private:
434  double GetCurrentTime() {
435  using namespace std::chrono;
436  auto t = high_resolution_clock::now();
437  return duration_cast<nanoseconds>(t.time_since_epoch()).count();
438  }
439 
440  std::shared_ptr<rad::cii::Request<std::shared_ptr<metadaqif::DaqReply>, std::string>>
441  m_tmp_start_request;
442  std::shared_ptr<rad::cii::Request<std::shared_ptr<metadaqif::DaqStopReply>, std::string>>
443  m_tmp_stop_request;
444  std::shared_ptr<rad::cii::Request<std::shared_ptr<metadaqif::DaqReply>, std::string>>
445  m_tmp_abort_request;
446  std::map<std::string, DaqStatus> m_acquisition_history;
447 
448  std::optional<std::string> m_active_id;
449  };
450 
451  struct ModelBuilder : public Super::ModelBuilder {
452  public:
454 
455  this->RegisterLayer({"Acquisitor", {}});
456 
457  const std::string parent_region = "On:Operational:RegionAcquisitor";
458 
459  this->mm.AddState(Composite,
460  parent_region,
461  "On:Operational");
462  this->mm.AddState(Initial,
463  "On:Operational:Initial",
464  parent_region);
465  this->mm.AddState(Simple,
466  "On:Operational:Idle",
467  parent_region);
468  this->mm.AddState(Simple,
469  "On:Operational:Acquiring",
470  parent_region,
471  "ActivityAcquiring");
472  this->mm.AddState(Simple,
473  "On:Operational:Recovering",
474  parent_region,
475  "ActivityRecovering",
476  "ActionRecoveringEntry");
477  this->mm.AddState(Simple,
478  "On:Operational:Preparing",
479  parent_region,
480  "ActivityPreparing",
481  "ActionPreparingEntry");
482  this->mm.AddState(Simple,
483  "On:Operational:Finalising",
484  parent_region,
485  "ActivityFinalising",
486  "ActionFinalisingEntry");
487  this->mm.AddState(Simple,
488  "On:Operational:Aborting",
489  parent_region,
490  "ActivityAborting",
491  "ActionAbortingEntry");
492 
493  this->mm.AddTrans("On:Operational:Initial",
494  "On:Operational:Idle",
495  "",
496  "",
497  "ActionClearHistory");
498  this->mm.AddTrans(parent_region,
499  "",
500  "events.GetDaqStatus",
501  "",
502  "ActionGetDaqStatus");
503  this->mm.AddTrans("On:Operational:Idle",
504  "On:Operational:Preparing",
505  "events.StartDaq",
506  "GuardPreparingAllowed");
507  this->mm.AddTrans("On:Operational:Preparing",
508  "On:Operational:Acquiring",
509  "events.Done",
510  "",
511  "ActionPreparingDone");
512  this->mm.AddTrans("On:Operational:Preparing",
513  "On:Operational:Idle",
514  "events.Error",
515  "",
516  "ActionPreparingFailed");
517  this->mm.AddTrans("On:Operational:Acquiring",
518  "On:Operational:Finalising",
519  "events.StopDaq",
520  "GuardFinalisingAllowed");
521  this->mm.AddTrans("On:Operational:Finalising",
522  "On:Operational:Idle",
523  "events.Done",
524  "",
525  "ActionFinalisingDone");
526  this->mm.AddTrans("On:Operational:Finalising",
527  "On:Operational:Idle",
528  "events.Error",
529  "",
530  "ActionFinalisingFailed");
531  this->mm.AddTrans("On:Operational:Acquiring",
532  "On:Operational:Aborting",
533  "events.AbortDaq",
534  "GuardAbortingAllowed");
535  this->mm.AddTrans("On:Operational:Aborting",
536  "On:Operational:Idle",
537  "events.Done",
538  "",
539  "ActionAbortingDone");
540  this->mm.AddTrans("On:Operational:Acquiring",
541  "On:Operational:Recovering",
542  "events.Error");
543  this->mm.AddTrans("On:Operational:Recovering",
544  "On:Operational:Idle",
545  "events.Done");
546  }
547  };
548 };
549 
550 } // namespace rtctk::componentFramework
551 
552 #endif // RTCTK_COMPONENTFRAMEWORK_ACQUISITOR_HPP
rtctk::metadataCollector::DaqStatus::setId
void setId(std::string const &id) override
Definition: acquisitor.cpp:108
rtctk::metadataCollector::DaqReply::DaqReply
DaqReply()=default
rtctk::componentFramework::Simple
@ Simple
Definition: model.hpp:23
rtctk::metadataCollector::Acquisitor::BizLogicIf::ActivityAcquiring
virtual void ActivityAcquiring(StopToken st)
Definition: acquisitor.hpp:178
exceptions.hpp
Provides macros and utilities for exception handling.
rtctk::componentFramework::Loopaware
Life cycle extension to make RtcComponent Loopaware.
Definition: loopaware.hpp:30
rtctk::metadataCollector::Acquisitor::BizLogicIf::ActivityFinalising
virtual DaqStopReply ActivityFinalising(StopToken st)
Definition: acquisitor.hpp:179
rtctk::metadataCollector::Acquisitor::BizLogicIf::ActivityPreparing
virtual void ActivityPreparing(StopToken st, std::string const &id)
Definition: acquisitor.hpp:177
rtctk::metadataCollector::Acquisitor::InputStage::Start
void Start() override
Definition: acquisitor.hpp:190
rtctk::componentFramework
Definition: commandReplier.cpp:20
rtctk::metadataCollector::DaqStatus::setState
void setState(metadaqif::DaqState st) override
Definition: acquisitor.cpp:140
rtctk::rtcSupervisor::Super
Runnable< RtcComponent > Super
Definition: rtcSupervisor.hpp:33
rtctk::metadataCollector::Acquisitor::ModelBuilder::ModelBuilder
ModelBuilder(StateMachineEngine &engine)
Definition: acquisitor.hpp:453
rtctk::componentFramework::StateMachineEngine::RegisterGuard
void RegisterGuard(std::string const &id, GuardMethod guard)
Register guard.
Definition: stateMachineEngine.cpp:77
rtctk::componentFramework::StopToken
rad::StopToken StopToken
Definition: stopToken.hpp:19
rtctk::componentFramework::StateMachineEngine
Definition: stateMachineEngine.hpp:31
rtctk::componentFramework::NestedExceptionPrinter
Adapter object intended to be used in contexts without direct access to the output-stream object.
Definition: exceptions.hpp:157
rtctk::metadataCollector
Definition: acquisitor.cpp:14
rtctk::componentFramework::StateMachineEngine::RegisterAction
void RegisterAction(std::string const &id, ActionMethod action)
Register action.
Definition: stateMachineEngine.cpp:65
rtctk::metadataCollector::AcquisitorCmdsImpl
Class that handles reception of metadaqif commands using MAL.
Definition: acquisitor.hpp:146
rtctk::metadataCollector::Acquisitor::BizLogicIf::ActivityRecovering
virtual void ActivityRecovering(StopToken st)
Definition: acquisitor.hpp:183
rtctk::metadataCollector::DaqRequestRejected
Definition: acquisitor.hpp:34
rtctk::metadataCollector::DaqStopReply::DaqStopReply
DaqStopReply()=default
rtctk::componentFramework::NestedExceptionPrinter::Str
std::string Str() const
Convenience function for constructing a std::string from the exception.
Definition: exceptions.hpp:175
rtctk::metadataCollector::AcquisitorCmdsImpl::Register
static void Register(CommandReplier &replier, StateMachineEngine &engine)
Definition: acquisitor.cpp:177
rtctk::metadataCollector::DaqStopReply
Definition: acquisitor.hpp:63
rtctk::componentFramework::StateMachineEngine::RegisterRejectHandler
void RegisterRejectHandler(std::string const &id, RejectMethod reject)
Register reject handler.
Definition: stateMachineEngine.cpp:98
rtctk::metadataCollector::Acquisitor::BizLogicIf::ActivityAborting
virtual void ActivityAborting(StopToken st)
Definition: acquisitor.hpp:182
rtctk_ctrl_mon_tool.state
def state(ctx, str component)
Definition: rtctk_ctrl_mon_tool.py:158
rtctk::metadataCollector::Acquisitor::ModelBuilder
Definition: acquisitor.hpp:451
rtctk::metadataCollector::DaqStatus::setTimestamp
void setTimestamp(double ts) override
Definition: acquisitor.cpp:132
rtctk::componentFramework::CommandReplier
Class that handles reception of commands using MAL.
Definition: commandReplier.hpp:26
stopToken.hpp
A simple Stop Token.
rtctk::componentFramework::Initial
@ Initial
Definition: model.hpp:26
rtctk::metadataCollector::Acquisitor::OutputStage
Definition: acquisitor.hpp:197
rtcComponent.hpp
Lifecycle of a basic 'RtcComponent'.
rtctk::metadataCollector::Acquisitor::InputStage
Definition: acquisitor.hpp:186
rtctk::metadataCollector::DaqReply
Definition: acquisitor.hpp:41
rtctk::metadataCollector::Acquisitor::OutputStage::OutputStage
OutputStage(StateMachineEngine &engine, BizLogicIf &bl)
Definition: acquisitor.hpp:199
rtctk::componentFramework::Runnable
Life cycle extension to make RtcComponent Runnable.
Definition: runnable.hpp:30
rtctk::metadataCollector::Acquisitor::BizLogicIf
Definition: acquisitor.hpp:175
rtctk::metadataCollector::Acquisitor
Life cycle extension for Acquisitor RtcComponent.
Definition: acquisitor.hpp:170
rtctk::componentFramework::Composite
@ Composite
Definition: model.hpp:25
rtctk::metadataCollector::DaqStatus
Definition: acquisitor.hpp:97
rtctk::metadataCollector::DaqStatus::DaqStatus
DaqStatus()=default
rtctk::componentFramework::StateMachineEngine::RegisterActivity
void RegisterActivity(std::string const &id, ActivityMethod activity, SuccessMethod on_success, FailureMethod on_failure)
Register activity.
Definition: stateMachineEngine.cpp:90