ifw-ccf 6.0.0
 
Loading...
Searching...
No Matches
pubBase.hpp
Go to the documentation of this file.
1
6
7#ifndef CCF_COMMON_PUB_BASE_HPP_H_
8#define CCF_COMMON_PUB_BASE_HPP_H_
9
10#include <Recif.hpp>
11
15#include <ifw/ccf/common/db.hpp>
17
18
19namespace ifw::ccf::common {
20
22 // @{
23 const std::string DB_NODE_PUB_ID = "id";
24 const std::string DB_NODE_PUB_NAME = "name";
25 const std::string DB_NODE_ADAPTER = "adapter";
26 const std::string DB_NODE_PUB_START = "start";
27 const std::string DB_NODE_PUB_STATUS = "status";
28 const std::string DB_NODE_PUB_FRAMES_HANDLED = "frames_handled";
29 const std::string DB_NODE_PUB_VOLUME_HANDLED = "volume_handled";
30 const std::string DB_NODE_PUB_NB_OF_FILES_STORED = "nb_of_files_stored";
31 const std::string DB_NODE_PUB_FILES_STORED = "files_stored";
32 // @}
33
35 class PublisherStatus: public Base {
36 public:
37
41 PublisherStatus(const std::string& pub_id,
42 const std::string obj_id = "ifw::ccf::common::PublisherStatus");
43
44 PublisherStatus(const PublisherStatus& source);
45
47
48 virtual ~PublisherStatus();
49
51 void Reset();
52
54 const std::string& GetPubId() const;
55
57 void SetStatus(const PubStatus status);
58
60 PubStatus GetStatus() const;
61
63 double GetStartTime() const;
64
66 void IncrFramesHandled();
67
69 int64_t GetFramesHandled() const;
70
72 void IncrVolumeHandled(const uint32_t vol);
73
75 int64_t GetVolumeHandled() const;
76
80 void AddFileStored(const std::string& new_file);
81
83 uint64_t GetNbOfFilesStored() const;
84
86 void GetFilesStored(std::vector<std::string>& files_stored) const;
87
89 void SetFramesHandled(const int64_t nb_of_frames_handled);
90
92 void SetVolumeHandled(const int64_t volume_handled);
93
95 void SetFilesStored(const std::vector<std::string>& files_stored);
96
98 std::string ToString() const;
99
101
102 protected:
103
104 private:
105 void _Copy(const PublisherStatus& source);
106
107 std::string m_obj_id;
108 std::string m_pub_id;
109 PubStatus m_pub_status;
110 double m_start;
111 int64_t m_frames_handled;
112 int64_t m_volume_handled;
113 std::map<std::string, std::string> m_files_stored;
114 };
115
117 class PubBase: public Base {
118 public:
119
121 static const std::string& GenId(const std::string& proc_thread_name,
122 const std::string& pub_thread_name);
123
125 template <class TYPE>
126 static void AddPubFactoryObj(TYPE& pub_factory_obj) {
127 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
128
129 if (pub_factory_obj.GetClassName() == "") {
130 CCFTHROW("Must define a classname for a Data Publisher Plug-In");
131 }
132
133 BEGIN_CRIT_SEC("ifw::ccf::common::PubBase") {
134 if (s_pub_factory_objects.find(pub_factory_obj.GetClassName()) !=
135 s_pub_factory_objects.end()) {
136 CCFTHROW(fmt::format("Factory object with classname: {} already exists",
137 pub_factory_obj.GetClassName()));
138 }
139 LOG4CPLUS_INFO(Logger(), "Registering Data Pub factory object. Classname: " <<
140 pub_factory_obj.GetClassName());
141 s_pub_factory_objects[pub_factory_obj.GetClassName()] = std::make_shared<TYPE>();
142 } END_CRIT_SEC();
143
144 }
145
147 static const std::map<std::string, std::shared_ptr<PubBase>>& GetPubFactoryObjs();
148
153 // static void CreatePubObj(const std::string& class_name,
154 // const std::string& proc_thread_name,
155 // const std::string& pub_thread_name,
156 // std::shared_ptr<PubBase>& new_object);
157 static void CreatePubObj(const std::string& class_name,
158 const std::string& proc_thread_name,
159 const std::string& pub_thread_name,
160 PubBase** new_object);
161
165 // static void GetPubObj(const std::string& proc_thread_name,
166 // const std::string& pub_thread_name,
167 // std::shared_ptr<PubBase>& pub_obj,
168 // const bool initialise = true);
169 static void GetPubObj(const std::string& proc_thread_name,
170 const std::string& pub_thread_name,
171 PubBase** pub_obj,
172 const bool initialise = true);
173
175 //static void GetPubObjs(std::vector<std::shared_ptr<PubBase>>& pub_objs);
176 static void GetPubObjs(std::vector<PubBase*>& pub_objs);
177
179 // static bool HasPubObj(const std::string& proc_thread_name,
180 // const std::string& pub_thread_name,
181 // std::shared_ptr<PubBase>& pub_obj);
182 static bool HasPubObj(const std::string& proc_thread_name,
183 const std::string& pub_thread_name,
184 PubBase** pub_obj);
185
186 PubBase(const std::string& proc_thread_name,
187 const std::string& pub_thread_name);
188 PubBase();
189 virtual ~PubBase();
190
191 void Initialise();
192 bool GetInitialised() const;
193
194 void Dismantle();
195
196 void SetEnabled(const bool enabled);
197 bool GetEnabled() const;
198
199 const std::string& GetProcThreadName() const;
200 const std::string& GetPubId() const;
201 const std::string& GetPubThreadName() const;
202
203 void Publish(DataFrame& frame,
204 const bool force);
205
207
208 void Activate();
209 virtual void ActivateUser();
210 void Deactivate();
211 virtual void DeactivateUser();
212 void SetActivated(const bool activated);
213 bool GetActivated() const;
214 virtual void CheckForDeactivationUser();
215
219
222 void EstimateExecution(double& duration,
223 int64_t& nb_of_frames);
224
226 void GetPubStatus(PublisherStatus& pub_stat) const;
227
228 virtual void InitialiseUser();
229
230 virtual void DismantleUser();
231
232 virtual void PublishUser(DataFrame& frame);
233
234 // virtual void CreateObjectUser(const std::string& proc_thread_name,
235 // const std::string& pub_thread_name,
236 // std::shared_ptr<PubBase>& new_object);
237
238 virtual void CreateObjectUser(const std::string& proc_thread_name,
239 const std::string& pub_thread_name,
240 PubBase** new_object);
241
242
243 virtual void EstimateExecutionUser(double& duration,
244 int64_t& nb_of_frames);
245
247 void ResetDbStatus() const;
248 void UpdateDbStatus(const bool force_update = false) const;
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:399
Base()
Definition base.cpp:121
Frame class used to store the data and metadata for one frames received from the camera.
Definition dataFrame.hpp:20
Class for implementing CCF Data Publishers.
Definition pubBase.hpp:117
PublisherStatus & GetPubStatus()
Definition pubBase.cpp:423
static void AddPubFactoryObj(TYPE &pub_factory_obj)
Static method to register a Data Publisher factory object in the internal registry.
Definition pubBase.hpp:126
virtual void ActivateUser()
Definition pubBase.cpp:606
void ResetDbStatus() const
Update status for a given Publisher Thread in the OLDB.
Definition pubBase.cpp:628
std::string ToString() const
Definition pubBase.cpp:683
virtual void DismantleUser()
Definition pubBase.cpp:662
const std::string & GetPubId() const
Definition pubBase.cpp:433
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:300
void EstimateExecution(double &duration, int64_t &nb_of_frames)
Definition pubBase.cpp:666
virtual void PublishUser(DataFrame &frame)
Definition pubBase.cpp:565
void SetEnabled(const bool enabled)
Definition pubBase.cpp:448
virtual void InitialiseUser()
Definition pubBase.cpp:484
static double GetRecTrigger()
Get the trigger for deferred recording.
Definition pubBase.cpp:698
static void SetRecTrigger(const double rec_trigger)
Set the trigger for deferred recording.
Definition pubBase.cpp:693
static bool GetDeferredStart()
Get the deferred start mode.
Definition pubBase.cpp:708
bool GetActivated() const
Definition pubBase.cpp:506
bool GetInitialised() const
Definition pubBase.cpp:479
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:12
PubType m_publisher_type
Definition pubBase.hpp:269
const std::string & GetProcThreadName() const
Definition pubBase.cpp:438
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:257
static const std::map< std::string, std::shared_ptr< PubBase > > & GetPubFactoryObjs()
Generate vector with references to the Publisher Factory Objects registered.
Definition pubBase.cpp:190
virtual ~PubBase()
Definition pubBase.cpp:408
virtual void EstimateExecutionUser(double &duration, int64_t &nb_of_frames)
Definition pubBase.cpp:676
void Activate()
Definition pubBase.cpp:589
static void GetPubObjs(std::vector< PubBase * > &pub_objs)
Get reference to all Data Publisher Objects registered.
Definition pubBase.cpp:332
PubType GetPublisherType() const
Definition pubBase.cpp:428
void Publish(DataFrame &frame, const bool force)
Definition pubBase.cpp:511
virtual void CreateObjectUser(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **new_object)
Definition pubBase.cpp:581
PubBase()
Definition pubBase.cpp:393
virtual void DeactivateUser()
Definition pubBase.cpp:622
bool m_setup_enabled
Definition pubBase.hpp:271
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:213
PubBase(const std::string &proc_thread_name, const std::string &pub_thread_name)
Definition pubBase.cpp:374
void Initialise()
Definition pubBase.cpp:458
virtual void CheckForDeactivationUser()
Definition pubBase.cpp:571
bool m_stat_active
Definition pubBase.hpp:272
void SetActivated(const bool activated)
Definition pubBase.cpp:490
const std::string & GetPubThreadName() const
Definition pubBase.cpp:443
void UpdateDbStatus(const bool force_update=false) const
Definition pubBase.cpp:640
void Deactivate()
Definition pubBase.cpp:612
bool m_initialised
Definition pubBase.hpp:270
void Dismantle()
Definition pubBase.cpp:655
static void SetDeferredStart(const bool def_start_active)
Set the deferred start mode.
Definition pubBase.cpp:703
bool GetEnabled() const
Definition pubBase.cpp:453
Class used by a Publisher to handle its own publisher status.
Definition pubBase.hpp:35
void SetStatus(const PubStatus status)
Set the status of the Publisher Status object.
Definition pubBase.cpp:72
void IncrFramesHandled()
Increment the number of frame handled by one.
Definition pubBase.cpp:89
virtual ~PublisherStatus()
Definition pubBase.cpp:63
void SetFilesStored(const std::vector< std::string > &files_stored)
Set the names of the files stored.
Definition pubBase.cpp:160
PubStatus GetStatus() const
Return the status of the associated Data Publisher.
Definition pubBase.cpp:79
const std::string & GetPubId() const
Return the ID of the Publisher Status object.
Definition pubBase.cpp:67
std::string ToString() const
Generate a summarising, one line status of the object instance.
Definition pubBase.cpp:167
void Reset()
Reset the members in the publisher status.
Definition pubBase.cpp:46
void GetFilesStored(std::vector< std::string > &files_stored) const
Get the names of the output files stored.
Definition pubBase.cpp:127
void IncrVolumeHandled(const uint32_t vol)
Increase the volume handled by the Data Publisher with the given number.
Definition pubBase.cpp:101
int64_t GetFramesHandled() const
Return the number of frames handled.
Definition pubBase.cpp:96
PublisherStatus(const std::string &pub_id, const std::string obj_id="ifw::ccf::common::PublisherStatus")
Definition pubBase.cpp:28
uint64_t GetNbOfFilesStored() const
Get the number of files stored (for a Recording Publisher).
Definition pubBase.cpp:120
PublisherStatus()
Definition pubBase.cpp:41
int64_t GetVolumeHandled() const
Return the volume handled.
Definition pubBase.cpp:108
void SetFramesHandled(const int64_t nb_of_frames_handled)
Set the number of frames handled.
Definition pubBase.cpp:150
void AddFileStored(const std::string &new_file)
Definition pubBase.cpp:113
void SetVolumeHandled(const int64_t volume_handled)
Set the volume (in bytes) handled.
Definition pubBase.cpp:155
double GetStartTime() const
Get the start time for the previous publishing started (seconds since epoch).
Definition pubBase.cpp:84
PublisherStatus & operator=(const PublisherStatus &source)
Definition pubBase.cpp:57
Definition appBase.cpp:10
const std::string DB_NODE_PUB_NB_OF_FILES_STORED
Definition pubBase.hpp:30
const std::string DB_NODE_ADAPTER
Definition pubBase.hpp:25
const std::string DB_NODE_PUB_FRAMES_HANDLED
Definition pubBase.hpp:28
const std::string DB_NODE_PUB_ID
Definition pubBase.hpp:23
const std::string DB_NODE_PUB_VOLUME_HANDLED
Definition pubBase.hpp:29
const std::string DB_NODE_PUB_START
Definition pubBase.hpp:26
const std::string DB_NODE_PUB_STATUS
Definition pubBase.hpp:27
const std::string DB_NODE_PUB_NAME
Definition pubBase.hpp:24
const std::string DB_NODE_PUB_FILES_STORED
Definition pubBase.hpp:31
PubStatus
Defines the various possible states of a Data Publisher.
Definition base.hpp:180
log4cplus::Logger & Logger()
Definition base.cpp:24
PubType
A Publisher may be Recording or Not-Recording. A Recording Publisher publishes data into files.
Definition base.hpp:173