tdaq-develop-2025-02-12
DataManager.h
1 #ifndef _ots_DataManager_h_
2 #define _ots_DataManager_h_
3 
4 #include "otsdaq/Configurable/Configurable.h"
5 #include "otsdaq/DataManager/CircularBuffer.h"
6 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
7 #include "otsdaq/Macros/CoutMacros.h"
8 #include "otsdaq/MessageFacility/MessageFacility.h"
9 
10 #include <map>
11 #include <memory>
12 #include <string>
13 #include <vector>
14 
15 namespace ots
16 {
17 class DataProcessor;
18 class DataProducerBase;
19 class DataConsumer;
20 class CircularBufferBase;
21 
25 class DataManager : public Configurable, public VStateMachine
26 {
27  public:
28  DataManager(const ConfigurationTree& theXDAQContextConfigTree,
29  const std::string& supervisorConfigurationPath);
30  virtual ~DataManager(void);
31 
33  virtual void configure(void);
34  virtual void halt(void);
35  virtual void pause(void);
36  virtual void resume(void);
37  virtual void start(std::string runNumber);
38  virtual void stop(void);
39 
40  template<class D, class H>
41  void configureBuffer(const std::string& bufferUID)
42  {
43  buffers_[bufferUID].buffer_ = new CircularBuffer<D, H>(bufferUID);
44  buffers_[bufferUID].status_ = Initialized;
45  }
46 
47  void registerProducer(const std::string& bufferUID,
48  DataProducerBase* producer);
50  void registerConsumer(const std::string& bufferUID,
51  DataConsumer* consumer);
53 
54  void unregisterFEProducer(const std::string& bufferID,
55  const std::string& feProducerID);
56 
61  void dumpStatus(std::ostream* out = (std::ostream*)&(std::cout)) const;
62 
63  protected:
64  void destroyBuffers(void);
66  // void destroyBuffer (const std::string& bufferUID);//!!!!!Delete all the
69  void configureAllBuffers(void);
70  void startAllBuffers(const std::string& runNumber);
71  void stopAllBuffers(void);
72  void resumeAllBuffers(void);
73  void pauseAllBuffers(void);
74 
75  void configureBuffer(const std::string& bufferUID);
76  void startBuffer(const std::string& bufferUID, std::string runNumber);
77  void stopBuffer(const std::string& bufferUID);
78  void resumeBuffer(const std::string& bufferUID);
79  void pauseBuffer(const std::string& bufferUID);
80 
81  enum BufferStatus
82  {
83  Initialized,
84  Running
85  };
86 
87  struct Buffer
88  {
89  CircularBufferBase* buffer_;
90  std::vector<DataProducerBase*> producers_;
91  std::vector<DataConsumer*> consumers_;
92  BufferStatus status_;
93  };
94  std::map<std::string /*dataBufferId*/,
95  Buffer /*CircularBuffer:=Map of Producer to Buffer Implementations*/>
96  buffers_;
97 
98  public:
102 
103  const std::map<std::string /*dataBufferId*/, Buffer>& getBuffers(void) const
104  {
105  return buffers_;
106  }
107 };
108 
109 } // namespace ots
110 
111 #endif
void unregisterFEProducer(const std::string &bufferID, const std::string &feProducerID)
Definition: DataManager.cc:641
void registerProducer(const std::string &bufferUID, DataProducerBase *producer)
owner of the producer object!
Definition: DataManager.cc:689
bool parentSupervisorHasFrontends_
Definition: DataManager.h:99
void configureAllBuffers(void)
Definition: DataManager.cc:764
void dumpStatus(std::ostream *out=(std::ostream *)&(std::cout)) const
Definition: DataManager.cc:36
void registerConsumer(const std::string &bufferUID, DataConsumer *consumer)
Definition: DataManager.cc:728
void destroyBuffers(void)
Definition: DataManager.cc:465
virtual void configure(void)
State Machine Methods.
Definition: DataManager.cc:65