ifw-ccf  3.0.0-pre2
pubBase.hpp
Go to the documentation of this file.
1 
5 #ifndef CCF_COMMON_PUB_BASE_HPP_H_
6 #define CCF_COMMON_PUB_BASE_HPP_H_
7 
8 #include <ccf/common/base.hpp>
10 #include <ccf/common/setup.hpp>
11 #include <ccf/common/db.hpp>
12 #include <ccf/common/appBase.hpp>
13 
14 #include <Recif.hpp>
15 
16 namespace ccf::common {
17 
19  // @{
20  const std::string DB_NODE_PUB_ID = "id";
21  const std::string DB_NODE_PUB_NAME = "name";
22  const std::string DB_NODE_ADAPTER = "adapter";
23  const std::string DB_NODE_PUB_START = "start";
24  const std::string DB_NODE_PUB_STATUS = "status";
25  const std::string DB_NODE_PUB_FRAMES_HANDLED = "frames_handled";
26  const std::string DB_NODE_PUB_VOLUME_HANDLED = "volume_handled";
27  const std::string DB_NODE_PUB_NB_OF_FILES_STORED = "nb_of_files_stored";
28  const std::string DB_NODE_PUB_FILES_STORED = "files_stored";
29  // @}
30 
32  class PublisherStatus: public Base {
33  public:
34 
38  PublisherStatus(const std::string& pub_id,
39  const std::string obj_id = "ccf::common::PublisherStatus");
40 
41  PublisherStatus(const PublisherStatus& source);
42 
44 
45  virtual ~PublisherStatus();
46 
48  void Reset();
49 
51  const std::string& GetPubId() const;
52 
54  void SetStatus(const PubStatus status);
55 
57  PubStatus GetStatus() const;
58 
60  double GetStartTime() const;
61 
63  void IncrFramesHandled();
64 
66  int64_t GetFramesHandled() const;
67 
69  void IncrVolumeHandled(const uint32_t vol);
70 
72  int64_t GetVolumeHandled() const;
73 
77  void AddFileStored(const std::string& new_file);
78 
80  uint64_t GetNbOfFilesStored() const;
81 
83  void GetFilesStored(std::vector<std::string>& files_stored) const;
84 
86  void SetFramesHandled(const int64_t nb_of_frames_handled);
87 
89  void SetVolumeHandled(const int64_t volume_handled);
90 
92  void SetFilesStored(const std::vector<std::string>& files_stored);
93 
95  std::string ToString() const;
96 
98 
99  protected:
100 
101  private:
102  void _Copy(const PublisherStatus& source);
103 
104  std::string m_obj_id;
105  std::string m_pub_id;
106  PubStatus m_pub_status;
107  double m_start;
108  int64_t m_frames_handled;
109  int64_t m_volume_handled;
110  std::map<std::string, std::string> m_files_stored;
111  };
112 
114  class PubBase: public Base {
115  public:
116 
118  static const std::string& GenId(const std::string& proc_thread_name,
119  const std::string& pub_thread_name);
120 
122  template <class TYPE>
123  static void AddPubFactoryObj(TYPE& pub_factory_obj) {
124  LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
125 
126  if (pub_factory_obj.GetClassName() == "") {
127  CCFTHROW("Must define a classname for a Data Publisher Plug-In");
128  }
129 
130  BEGIN_CRIT_SEC("ccf::common::PubBase") {
131  if (s_pub_factory_objects.find(pub_factory_obj.GetClassName()) !=
132  s_pub_factory_objects.end()) {
133  CCFTHROW(fmt::format("Factory object with classname: {} already exists",
134  pub_factory_obj.GetClassName()));
135  }
136  LOG4CPLUS_INFO(Logger(), "Registering Data Pub factory object. Classname: " <<
137  pub_factory_obj.GetClassName());
138  s_pub_factory_objects[pub_factory_obj.GetClassName()] = std::make_shared<TYPE>();
139  } END_CRIT_SEC();
140 
141  }
142 
144  static const std::map<std::string, std::shared_ptr<PubBase>>& GetPubFactoryObjs();
145 
150  // static void CreatePubObj(const std::string& class_name,
151  // const std::string& proc_thread_name,
152  // const std::string& pub_thread_name,
153  // std::shared_ptr<PubBase>& new_object);
154  static void CreatePubObj(const std::string& class_name,
155  const std::string& proc_thread_name,
156  const std::string& pub_thread_name,
157  PubBase** new_object);
158 
162  // static void GetPubObj(const std::string& proc_thread_name,
163  // const std::string& pub_thread_name,
164  // std::shared_ptr<PubBase>& pub_obj,
165  // const bool initialise = true);
166  static void GetPubObj(const std::string& proc_thread_name,
167  const std::string& pub_thread_name,
168  PubBase** pub_obj,
169  const bool initialise = true);
170 
172  //static void GetPubObjs(std::vector<std::shared_ptr<PubBase>>& pub_objs);
173  static void GetPubObjs(std::vector<PubBase*>& pub_objs);
174 
176  // static bool HasPubObj(const std::string& proc_thread_name,
177  // const std::string& pub_thread_name,
178  // std::shared_ptr<PubBase>& pub_obj);
179  static bool HasPubObj(const std::string& proc_thread_name,
180  const std::string& pub_thread_name,
181  PubBase** pub_obj);
182 
183  PubBase(const std::string& proc_thread_name,
184  const std::string& pub_thread_name);
185  PubBase();
186  virtual ~PubBase();
187 
188  void Initialise();
189  bool GetInitialised() const;
190 
191  void Dismantle();
192 
193  void SetEnabled(const bool enabled);
194  bool GetEnabled() const;
195 
196  const std::string& GetProcThreadName() const;
197  const std::string& GetPubId() const;
198  const std::string& GetPubThreadName() const;
199 
200  void Publish(DataFrame& frame,
201  const bool force);
202 
203  PubType GetPublisherType() const;
204 
205  void Activate();
206  virtual void ActivateUser();
207  void Deactivate();
208  virtual void DeactivateUser();
209  void SetActivated(const bool activated);
210  bool GetActivated() const;
211  virtual void CheckForDeactivationUser();
212 
216 
219  void EstimateExecution(double& duration,
220  int64_t& nb_of_frames);
221 
223  void GetPubStatus(PublisherStatus& pub_stat) const;
224 
225  virtual void InitialiseUser();
226 
227  virtual void DismantleUser();
228 
229  virtual void PublishUser(DataFrame& frame);
230 
231  // virtual void CreateObjectUser(const std::string& proc_thread_name,
232  // const std::string& pub_thread_name,
233  // std::shared_ptr<PubBase>& new_object);
234 
235  virtual void CreateObjectUser(const std::string& proc_thread_name,
236  const std::string& pub_thread_name,
237  PubBase** new_object);
238 
239 
240  virtual void EstimateExecutionUser(double& duration,
241  int64_t& nb_of_frames);
242 
244  void ResetDbStatus() const;
245  void UpdateDbStatus() const;
246 
247  // TODO: Add:
248  // virtual void UpdateDbStatusUser().
249 
250  std::string ToString() const;
251 
252  // TODO: Add + invoke when a setup command is received.
253  // void HandleSetup();
254  // void HandleSetupUser();
255 
256 
257  protected:
262 
263  private:
264  static std::map<std::string, std::shared_ptr<PubBase>> s_pub_factory_objects;
265  //static std::map<std::string, std::shared_ptr<PubBase>> s_pub_objects;
266  static std::map<std::string, PubBase*> s_pub_objects;
267 
268  std::string m_pub_id;
269  std::string m_proc_thread_name;
270  std::string m_pub_thread_name;
271  double m_delay;
272  std::string m_db_path;
273 
274  std::shared_ptr<PublisherStatus> m_pub_status;
275  };
276 
277 }
278 
279 #endif // CCF_COMMON_PUB_BASE_HPP_H_
#define CCFTHROW(msg)
Guard for TRACE logs. Ensures log text is only generated when the given log level is enabled.
Definition: base.hpp:489
Class to be used as parent all CCF classes.
Definition: base.hpp:151
Frame class used to store the data and metadata for one frames received from the camera.
Definition: dataFrame.hpp:17
Class for implementing CCF Data Publishers.
Definition: pubBase.hpp:114
void Initialise()
Definition: pubBase.cpp:456
static const std::map< std::string, std::shared_ptr< PubBase > > & GetPubFactoryObjs()
Generate vector with references to the Publisher Factory Objects registered.
Definition: pubBase.cpp:188
bool m_stat_active
Definition: pubBase.hpp:261
virtual void DeactivateUser()
Definition: pubBase.cpp:599
void SetEnabled(const bool enabled)
Definition: pubBase.cpp:446
static void AddPubFactoryObj(TYPE &pub_factory_obj)
Static method to register a Data Publisher factory object in the internal registry.
Definition: pubBase.hpp:123
static const std::string & GenId(const std::string &proc_thread_name, const std::string &pub_thread_name)
Generate an ID for the Publisher.
Definition: pubBase.cpp:10
bool m_initialised
Definition: pubBase.hpp:259
PubType m_publisher_type
Definition: pubBase.hpp:258
static void CreatePubObj(const std::string &class_name, const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **new_object)
Definition: pubBase.cpp:211
static bool HasPubObj(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **pub_obj)
Check if a Publisher object is defined.
Definition: pubBase.cpp:298
virtual void EstimateExecutionUser(double &duration, int64_t &nb_of_frames)
Definition: pubBase.cpp:655
PublisherStatus & GetPubStatus()
Definition: pubBase.cpp:421
bool GetInitialised() const
Definition: pubBase.cpp:473
bool GetEnabled() const
Definition: pubBase.cpp:451
void ResetDbStatus() const
Update status for a given Publisher Thread in the OLDB.
Definition: pubBase.cpp:605
void SetActivated(const bool activated)
Definition: pubBase.cpp:484
virtual void CheckForDeactivationUser()
Definition: pubBase.cpp:548
std::string ToString() const
Definition: pubBase.cpp:662
static void GetPubObj(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **pub_obj, const bool initialise=true)
Definition: pubBase.cpp:255
virtual void PublishUser(DataFrame &frame)
Definition: pubBase.cpp:542
void EstimateExecution(double &duration, int64_t &nb_of_frames)
Definition: pubBase.cpp:645
void Dismantle()
Definition: pubBase.cpp:634
virtual void ActivateUser()
Definition: pubBase.cpp:583
PubType GetPublisherType() const
Definition: pubBase.cpp:426
bool GetActivated() const
Definition: pubBase.cpp:500
PubBase()
Definition: pubBase.cpp:390
void Activate()
Definition: pubBase.cpp:566
void Deactivate()
Definition: pubBase.cpp:589
static void GetPubObjs(std::vector< PubBase * > &pub_objs)
Get reference to all Data Publisher Objects registered.
Definition: pubBase.cpp:330
void Publish(DataFrame &frame, const bool force)
Definition: pubBase.cpp:505
virtual void InitialiseUser()
Definition: pubBase.cpp:478
bool m_setup_enabled
Definition: pubBase.hpp:260
const std::string & GetPubId() const
Definition: pubBase.cpp:431
virtual void CreateObjectUser(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **new_object)
Definition: pubBase.cpp:558
virtual ~PubBase()
Definition: pubBase.cpp:406
virtual void DismantleUser()
Definition: pubBase.cpp:641
void UpdateDbStatus() const
Definition: pubBase.cpp:621
const std::string & GetProcThreadName() const
Definition: pubBase.cpp:436
const std::string & GetPubThreadName() const
Definition: pubBase.cpp:441
Class used by a Publisher to handle its own publisher status.
Definition: pubBase.hpp:32
int64_t GetFramesHandled() const
Return the number of frames handled.
Definition: pubBase.cpp:94
PublisherStatus()
Definition: pubBase.cpp:39
void GetFilesStored(std::vector< std::string > &files_stored) const
Get the names of the output files stored.
Definition: pubBase.cpp:125
virtual ~PublisherStatus()
Definition: pubBase.cpp:61
const std::string & GetPubId() const
Return the ID of the Publisher Status object.
Definition: pubBase.cpp:65
void SetFilesStored(const std::vector< std::string > &files_stored)
Set the names of the files stored.
Definition: pubBase.cpp:158
uint64_t GetNbOfFilesStored() const
Get the number of files stored (for a Recording Publisher).
Definition: pubBase.cpp:118
void IncrFramesHandled()
Increment the number of frame handled by one.
Definition: pubBase.cpp:87
void SetStatus(const PubStatus status)
Set the status of the Publisher Status object.
Definition: pubBase.cpp:70
void Reset()
Reset the members in the publisher status.
Definition: pubBase.cpp:44
void AddFileStored(const std::string &new_file)
Definition: pubBase.cpp:111
int64_t GetVolumeHandled() const
Return the volume handled.
Definition: pubBase.cpp:106
PublisherStatus & operator=(const PublisherStatus &source)
Definition: pubBase.cpp:55
std::string ToString() const
Generate a summarising, one line status of the object instance.
Definition: pubBase.cpp:165
void SetFramesHandled(const int64_t nb_of_frames_handled)
Set the number of frames handled.
Definition: pubBase.cpp:148
PubStatus GetStatus() const
Return the status of the associated Data Publisher.
Definition: pubBase.cpp:77
void IncrVolumeHandled(const uint32_t vol)
Increase the volume handled by the Data Publisher with the given number.
Definition: pubBase.cpp:99
void SetVolumeHandled(const int64_t volume_handled)
Set the volume (in bytes) handled.
Definition: pubBase.cpp:153
double GetStartTime() const
Get the start time for the previous publishing started (seconds since epoch).
Definition: pubBase.cpp:82
Definition: appBase.cpp:8
const std::string DB_NODE_PUB_START
Definition: pubBase.hpp:23
const std::string DB_NODE_PUB_STATUS
Definition: pubBase.hpp:24
const std::string DB_NODE_PUB_NAME
Definition: pubBase.hpp:21
const std::string DB_NODE_PUB_VOLUME_HANDLED
Definition: pubBase.hpp:26
const std::string DB_NODE_ADAPTER
Definition: pubBase.hpp:22
const std::string DB_NODE_PUB_NB_OF_FILES_STORED
Definition: pubBase.hpp:27
const std::string DB_NODE_PUB_ID
Definition: pubBase.hpp:20
const std::string DB_NODE_PUB_FRAMES_HANDLED
Definition: pubBase.hpp:25
const std::string DB_NODE_PUB_FILES_STORED
Definition: pubBase.hpp:28
PubType
A Publisher may be Recording or Not-Recording. A Recording Publisher publishes data into files.
Definition: base.hpp:264
log4cplus::Logger & Logger()
Definition: base.cpp:9
PubStatus
Defines the various possible states of a Data Publisher.
Definition: base.hpp:271