ifw-ccf  2.0.0
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  CCFINFO(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_
ccf::Base
Class to be used as parent all CCF classes.
Definition: base.hpp:152
ccf::common::PubBase::CreateObjectUser
virtual void CreateObjectUser(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **new_object)
Definition: pubBase.cpp:582
ccf::common::DB_NODE_PUB_VOLUME_HANDLED
const std::string DB_NODE_PUB_VOLUME_HANDLED
Definition: pubBase.hpp:26
ccf::common::PubBase::GetInitialised
bool GetInitialised() const
Definition: pubBase.cpp:497
ccf::common::PubBase::CheckForDeactivationUser
virtual void CheckForDeactivationUser()
Definition: pubBase.cpp:572
CCFTHROW
#define CCFTHROW(msg)
Definition: base.hpp:568
ccf::common::PubBase::GetPubStatus
PublisherStatus & GetPubStatus()
Definition: pubBase.cpp:445
ccf::common::PublisherStatus::SetVolumeHandled
void SetVolumeHandled(const int64_t volume_handled)
Set the volume (in bytes) handled.
Definition: pubBase.cpp:155
ccf::common::PubBase::InitialiseUser
virtual void InitialiseUser()
Definition: pubBase.cpp:502
CCFINFO
#define CCFINFO(logger, msg)
INFO log macro. Includes the location ("CCFLOC") in the log message.
Definition: base.hpp:552
ccf::common::PublisherStatus::~PublisherStatus
virtual ~PublisherStatus()
Definition: pubBase.cpp:61
ccf::common::PubBase::EstimateExecution
void EstimateExecution(double &duration, int64_t &nb_of_frames)
Definition: pubBase.cpp:669
ccf::common::PubBase::ActivateUser
virtual void ActivateUser()
Definition: pubBase.cpp:607
ccf::PubType
PubType
A Publisher may be Recording or Not-Recording. A Recording Publisher publishes data into files.
Definition: base.hpp:278
db.hpp
ccf::common::PublisherStatus::GetPubId
const std::string & GetPubId() const
Return the ID of the Publisher Status object.
Definition: pubBase.cpp:65
ccf::common::PubBase::GenId
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
ccf::common::DB_NODE_PUB_NAME
const std::string DB_NODE_PUB_NAME
Definition: pubBase.hpp:21
ccf::common::PubBase::Deactivate
void Deactivate()
Definition: pubBase.cpp:613
ccf::common::PubBase::EstimateExecutionUser
virtual void EstimateExecutionUser(double &duration, int64_t &nb_of_frames)
Definition: pubBase.cpp:679
ccf::common::PublisherStatus::Reset
void Reset()
Reset the members in the publisher status.
Definition: pubBase.cpp:44
ccf::common::PubBase::m_setup_enabled
bool m_setup_enabled
Definition: pubBase.hpp:260
ccf::common::PublisherStatus::GetFilesStored
void GetFilesStored(std::vector< std::string > &files_stored) const
Get the names of the output files stored.
Definition: pubBase.cpp:127
setup.hpp
ccf::common::PublisherStatus
Class used by a Publisher to handle its own publisher status.
Definition: pubBase.hpp:32
ccf::common::PubBase::GetPubThreadName
const std::string & GetPubThreadName() const
Definition: pubBase.cpp:465
ccf::common::PubBase::CreatePubObj
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:233
ccf::common::PublisherStatus::ToString
std::string ToString() const
Generate a summarising, one line status of the object instance.
Definition: pubBase.cpp:167
ccf::common::PubBase::GetPubFactoryObjs
static const std::map< std::string, std::shared_ptr< PubBase > > & GetPubFactoryObjs()
Generate vector with references to the Publisher Factory Objects registered.
Definition: pubBase.cpp:210
ccf::common::PublisherStatus::GetStatus
PubStatus GetStatus() const
Return the status of the associated Data Publisher.
Definition: pubBase.cpp:77
ccf::PubStatus
PubStatus
Defines the various possible states of a Data Publisher.
Definition: base.hpp:285
ccf::common::PubBase::~PubBase
virtual ~PubBase()
Definition: pubBase.cpp:430
ccf::common::PubBase::GetPubId
const std::string & GetPubId() const
Definition: pubBase.cpp:455
ccf::common::PubBase::DismantleUser
virtual void DismantleUser()
Definition: pubBase.cpp:665
ccf::common::PublisherStatus::IncrFramesHandled
void IncrFramesHandled()
Increment the number of frame handled by one.
Definition: pubBase.cpp:87
ccf::common::PublisherStatus::SetFramesHandled
void SetFramesHandled(const int64_t nb_of_frames_handled)
Set the number of frames handled.
Definition: pubBase.cpp:150
ccf::common::PubBase::GetPublisherType
PubType GetPublisherType() const
Definition: pubBase.cpp:450
ccf::common::PublisherStatus::GetNbOfFilesStored
uint64_t GetNbOfFilesStored() const
Get the number of files stored (for a Recording Publisher).
Definition: pubBase.cpp:120
ccf::common::PublisherStatus::GetStartTime
double GetStartTime() const
Get the start time for the previous publishing started (seconds since epoch).
Definition: pubBase.cpp:82
ccf::common::DB_NODE_PUB_FRAMES_HANDLED
const std::string DB_NODE_PUB_FRAMES_HANDLED
Definition: pubBase.hpp:25
dataFrame.hpp
ccf::common::DB_NODE_PUB_NB_OF_FILES_STORED
const std::string DB_NODE_PUB_NB_OF_FILES_STORED
Definition: pubBase.hpp:27
ccf::common::PublisherStatus::IncrVolumeHandled
void IncrVolumeHandled(const uint32_t vol)
Increase the volume handled by the Data Publisher with the given number.
Definition: pubBase.cpp:99
ccf::common::DB_NODE_PUB_STATUS
const std::string DB_NODE_PUB_STATUS
Definition: pubBase.hpp:24
ccf::common::PubBase::PubBase
PubBase()
Definition: pubBase.cpp:414
ccf::common::PubBase::m_stat_active
bool m_stat_active
Definition: pubBase.hpp:261
ccf::common::PubBase::Activate
void Activate()
Definition: pubBase.cpp:590
ccf::common::PubBase
Class for implementing CCF Data Publishers.
Definition: pubBase.hpp:114
ccf::common::PubBase::SetEnabled
void SetEnabled(const bool enabled)
Definition: pubBase.cpp:470
ccf::common::PublisherStatus::SetFilesStored
void SetFilesStored(const std::vector< std::string > &files_stored)
Set the names of the files stored.
Definition: pubBase.cpp:160
ccf::common::PubBase::GetEnabled
bool GetEnabled() const
Definition: pubBase.cpp:475
ccf::common::PubBase::UpdateDbStatus
void UpdateDbStatus() const
Definition: pubBase.cpp:645
base.hpp
ccf::common::PublisherStatus::GetFramesHandled
int64_t GetFramesHandled() const
Return the number of frames handled.
Definition: pubBase.cpp:94
ccf::common
Definition: appBase.cpp:8
ccf::common::DB_NODE_PUB_START
const std::string DB_NODE_PUB_START
Definition: pubBase.hpp:23
appBase.hpp
ccf::common::PublisherStatus::PublisherStatus
PublisherStatus()
Definition: pubBase.cpp:39
ccf::common::PubBase::GetPubObjs
static void GetPubObjs(std::vector< PubBase * > &pub_objs)
Get reference to all Data Publisher Objects registered.
Definition: pubBase.cpp:352
ccf::common::DB_NODE_PUB_ID
const std::string DB_NODE_PUB_ID
Definition: pubBase.hpp:20
ccf::common::PublisherStatus::SetStatus
void SetStatus(const PubStatus status)
Set the status of the Publisher Status object.
Definition: pubBase.cpp:70
ccf::common::PubBase::Dismantle
void Dismantle()
Definition: pubBase.cpp:658
ccf::common::DB_NODE_ADAPTER
const std::string DB_NODE_ADAPTER
Definition: pubBase.hpp:22
ccf::common::PubBase::AddPubFactoryObj
static void AddPubFactoryObj(TYPE &pub_factory_obj)
Static method to register a Data Publisher factory object in the internal registry.
Definition: pubBase.hpp:123
ccf::common::PubBase::SetActivated
void SetActivated(const bool activated)
Definition: pubBase.cpp:508
ccf::common::PubBase::ResetDbStatus
void ResetDbStatus() const
Update status for a given Publisher Thread in the OLDB.
Definition: pubBase.cpp:629
ccf::common::PubBase::GetActivated
bool GetActivated() const
Definition: pubBase.cpp:524
ccf::common::PubBase::ToString
std::string ToString() const
Definition: pubBase.cpp:686
ccf::common::PubBase::GetPubObj
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:277
ccf::common::PublisherStatus::GetVolumeHandled
int64_t GetVolumeHandled() const
Return the volume handled.
Definition: pubBase.cpp:106
ccf::common::PubBase::HasPubObj
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:320
ccf::common::PubBase::Publish
void Publish(DataFrame &frame, const bool force)
Definition: pubBase.cpp:529
ccf::common::PublisherStatus::operator=
PublisherStatus & operator=(const PublisherStatus &source)
Definition: pubBase.cpp:55
ccf::common::PubBase::GetProcThreadName
const std::string & GetProcThreadName() const
Definition: pubBase.cpp:460
ccf::common::PublisherStatus::AddFileStored
void AddFileStored(const std::string &new_file)
Definition: pubBase.cpp:113
ccf::common::DB_NODE_PUB_FILES_STORED
const std::string DB_NODE_PUB_FILES_STORED
Definition: pubBase.hpp:28
ccf::common::PubBase::m_publisher_type
PubType m_publisher_type
Definition: pubBase.hpp:258
ccf::common::PubBase::PublishUser
virtual void PublishUser(DataFrame &frame)
Definition: pubBase.cpp:566
ccf::common::PubBase::Initialise
void Initialise()
Definition: pubBase.cpp:480
ccf::common::DataFrame
Frame class used to store the data and metadata for one frames received from the camera.
Definition: dataFrame.hpp:17
ccf::common::PubBase::m_initialised
bool m_initialised
Definition: pubBase.hpp:259
ccf::common::PubBase::DeactivateUser
virtual void DeactivateUser()
Definition: pubBase.cpp:623
ccf::Logger
log4cplus::Logger & Logger()
Definition: base.cpp:9