ifw-ccf 4.0.0
Loading...
Searching...
No Matches
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>
13
14#include <Recif.hpp>
15
16namespace 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
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
257 static void SetRecTrigger(const double rec_trigger);
258
260 static double GetRecTrigger();
261
263 static void SetDeferredStart(const bool def_start_active);
264
266 static bool GetDeferredStart();
267
268 protected:
273
274 private:
275 static std::map<std::string, std::shared_ptr<PubBase>> s_pub_factory_objects;
276 //static std::map<std::string, std::shared_ptr<PubBase>> s_pub_objects;
277 static std::map<std::string, PubBase*> s_pub_objects;
278
279 std::string m_pub_id;
280 std::string m_proc_thread_name;
281 std::string m_pub_thread_name;
282 double m_delay;
283 std::string m_db_path;
284
285 std::shared_ptr<PublisherStatus> m_pub_status;
286
287 inline static bool m_rec_deferred_start = false;
288 inline static double m_rec_deferred_start_time = 0.0;
289 };
290
291}
292
293#endif // CCF_COMMON_PUB_BASE_HPP_H_
#define CCFTHROW(msg)
Definition: base.hpp:416
Class to be used as parent all CCF classes.
Definition: base.hpp:107
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:272
virtual void DeactivateUser()
Definition: pubBase.cpp:608
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:270
PubType m_publisher_type
Definition: pubBase.hpp:269
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:664
PublisherStatus & GetPubStatus()
Definition: pubBase.cpp:421
bool GetInitialised() const
Definition: pubBase.cpp:479
bool GetEnabled() const
Definition: pubBase.cpp:451
void ResetDbStatus() const
Update status for a given Publisher Thread in the OLDB.
Definition: pubBase.cpp:614
static void SetDeferredStart(const bool def_start_active)
Set the deferred start mode.
Definition: pubBase.cpp:691
void SetActivated(const bool activated)
Definition: pubBase.cpp:490
virtual void CheckForDeactivationUser()
Definition: pubBase.cpp:557
std::string ToString() const
Definition: pubBase.cpp:671
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:551
void EstimateExecution(double &duration, int64_t &nb_of_frames)
Definition: pubBase.cpp:654
void Dismantle()
Definition: pubBase.cpp:643
virtual void ActivateUser()
Definition: pubBase.cpp:592
PubType GetPublisherType() const
Definition: pubBase.cpp:426
bool GetActivated() const
Definition: pubBase.cpp:506
static bool GetDeferredStart()
Get the deferred start mode.
Definition: pubBase.cpp:696
PubBase()
Definition: pubBase.cpp:391
void Activate()
Definition: pubBase.cpp:575
void Deactivate()
Definition: pubBase.cpp:598
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:511
virtual void InitialiseUser()
Definition: pubBase.cpp:484
static void SetRecTrigger(const double rec_trigger)
Set the trigger for deferred recording.
Definition: pubBase.cpp:681
bool m_setup_enabled
Definition: pubBase.hpp:271
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:567
virtual ~PubBase()
Definition: pubBase.cpp:406
virtual void DismantleUser()
Definition: pubBase.cpp:650
static double GetRecTrigger()
Get the trigger for deferred recording.
Definition: pubBase.cpp:686
void UpdateDbStatus() const
Definition: pubBase.cpp:630
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:206
log4cplus::Logger & Logger()
Definition: base.cpp:11
PubStatus
Defines the various possible states of a Data Publisher.
Definition: base.hpp:213