ifw-ccf 5.0.2
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 <Recif.hpp>
9
13#include <ifw/ccf/common/db.hpp>
15
16
17namespace ifw::ccf::common {
18
20 // @{
21 const std::string DB_NODE_PUB_ID = "id";
22 const std::string DB_NODE_PUB_NAME = "name";
23 const std::string DB_NODE_ADAPTER = "adapter";
24 const std::string DB_NODE_PUB_START = "start";
25 const std::string DB_NODE_PUB_STATUS = "status";
26 const std::string DB_NODE_PUB_FRAMES_HANDLED = "frames_handled";
27 const std::string DB_NODE_PUB_VOLUME_HANDLED = "volume_handled";
28 const std::string DB_NODE_PUB_NB_OF_FILES_STORED = "nb_of_files_stored";
29 const std::string DB_NODE_PUB_FILES_STORED = "files_stored";
30 // @}
31
33 class PublisherStatus: public Base {
34 public:
35
39 PublisherStatus(const std::string& pub_id,
40 const std::string obj_id = "ifw::ccf::common::PublisherStatus");
41
42 PublisherStatus(const PublisherStatus& source);
43
45
46 virtual ~PublisherStatus();
47
49 void Reset();
50
52 const std::string& GetPubId() const;
53
55 void SetStatus(const PubStatus status);
56
58 PubStatus GetStatus() const;
59
61 double GetStartTime() const;
62
64 void IncrFramesHandled();
65
67 int64_t GetFramesHandled() const;
68
70 void IncrVolumeHandled(const uint32_t vol);
71
73 int64_t GetVolumeHandled() const;
74
78 void AddFileStored(const std::string& new_file);
79
81 uint64_t GetNbOfFilesStored() const;
82
84 void GetFilesStored(std::vector<std::string>& files_stored) const;
85
87 void SetFramesHandled(const int64_t nb_of_frames_handled);
88
90 void SetVolumeHandled(const int64_t volume_handled);
91
93 void SetFilesStored(const std::vector<std::string>& files_stored);
94
96 std::string ToString() const;
97
99
100 protected:
101
102 private:
103 void _Copy(const PublisherStatus& source);
104
105 std::string m_obj_id;
106 std::string m_pub_id;
107 PubStatus m_pub_status;
108 double m_start;
109 int64_t m_frames_handled;
110 int64_t m_volume_handled;
111 std::map<std::string, std::string> m_files_stored;
112 };
113
115 class PubBase: public Base {
116 public:
117
119 static const std::string& GenId(const std::string& proc_thread_name,
120 const std::string& pub_thread_name);
121
123 template <class TYPE>
124 static void AddPubFactoryObj(TYPE& pub_factory_obj) {
125 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
126
127 if (pub_factory_obj.GetClassName() == "") {
128 CCFTHROW("Must define a classname for a Data Publisher Plug-In");
129 }
130
131 BEGIN_CRIT_SEC("ifw::ccf::common::PubBase") {
132 if (s_pub_factory_objects.find(pub_factory_obj.GetClassName()) !=
133 s_pub_factory_objects.end()) {
134 CCFTHROW(fmt::format("Factory object with classname: {} already exists",
135 pub_factory_obj.GetClassName()));
136 }
137 LOG4CPLUS_INFO(Logger(), "Registering Data Pub factory object. Classname: " <<
138 pub_factory_obj.GetClassName());
139 s_pub_factory_objects[pub_factory_obj.GetClassName()] = std::make_shared<TYPE>();
140 } END_CRIT_SEC();
141
142 }
143
145 static const std::map<std::string, std::shared_ptr<PubBase>>& GetPubFactoryObjs();
146
151 // static void CreatePubObj(const std::string& class_name,
152 // const std::string& proc_thread_name,
153 // const std::string& pub_thread_name,
154 // std::shared_ptr<PubBase>& new_object);
155 static void CreatePubObj(const std::string& class_name,
156 const std::string& proc_thread_name,
157 const std::string& pub_thread_name,
158 PubBase** new_object);
159
163 // static void GetPubObj(const std::string& proc_thread_name,
164 // const std::string& pub_thread_name,
165 // std::shared_ptr<PubBase>& pub_obj,
166 // const bool initialise = true);
167 static void GetPubObj(const std::string& proc_thread_name,
168 const std::string& pub_thread_name,
169 PubBase** pub_obj,
170 const bool initialise = true);
171
173 //static void GetPubObjs(std::vector<std::shared_ptr<PubBase>>& pub_objs);
174 static void GetPubObjs(std::vector<PubBase*>& pub_objs);
175
177 // static bool HasPubObj(const std::string& proc_thread_name,
178 // const std::string& pub_thread_name,
179 // std::shared_ptr<PubBase>& pub_obj);
180 static bool HasPubObj(const std::string& proc_thread_name,
181 const std::string& pub_thread_name,
182 PubBase** pub_obj);
183
184 PubBase(const std::string& proc_thread_name,
185 const std::string& pub_thread_name);
186 PubBase();
187 virtual ~PubBase();
188
189 void Initialise();
190 bool GetInitialised() const;
191
192 void Dismantle();
193
194 void SetEnabled(const bool enabled);
195 bool GetEnabled() const;
196
197 const std::string& GetProcThreadName() const;
198 const std::string& GetPubId() const;
199 const std::string& GetPubThreadName() const;
200
201 void Publish(DataFrame& frame,
202 const bool force);
203
205
206 void Activate();
207 virtual void ActivateUser();
208 void Deactivate();
209 virtual void DeactivateUser();
210 void SetActivated(const bool activated);
211 bool GetActivated() const;
212 virtual void CheckForDeactivationUser();
213
217
220 void EstimateExecution(double& duration,
221 int64_t& nb_of_frames);
222
224 void GetPubStatus(PublisherStatus& pub_stat) const;
225
226 virtual void InitialiseUser();
227
228 virtual void DismantleUser();
229
230 virtual void PublishUser(DataFrame& frame);
231
232 // virtual void CreateObjectUser(const std::string& proc_thread_name,
233 // const std::string& pub_thread_name,
234 // std::shared_ptr<PubBase>& new_object);
235
236 virtual void CreateObjectUser(const std::string& proc_thread_name,
237 const std::string& pub_thread_name,
238 PubBase** new_object);
239
240
241 virtual void EstimateExecutionUser(double& duration,
242 int64_t& nb_of_frames);
243
245 void ResetDbStatus() const;
246 void UpdateDbStatus(const bool force_update = false) const;
247
248 std::string ToString() const;
249
250 // TODO: Add + invoke when a setup command is received.
251 // void HandleSetup();
252 // void HandleSetupUser();
253
255 static void SetRecTrigger(const double rec_trigger);
256
258 static double GetRecTrigger();
259
261 static void SetDeferredStart(const bool def_start_active);
262
264 static bool GetDeferredStart();
265
266 protected:
271
272 private:
273 static std::map<std::string, std::shared_ptr<PubBase>> s_pub_factory_objects;
274 //static std::map<std::string, std::shared_ptr<PubBase>> s_pub_objects;
275 static std::map<std::string, PubBase*> s_pub_objects;
276
277 std::string m_pub_id;
278 std::string m_proc_thread_name;
279 std::string m_pub_thread_name;
280 double m_delay;
281 std::string m_db_path;
282
283 std::shared_ptr<PublisherStatus> m_pub_status;
284
285 inline static bool m_rec_deferred_start = false;
286 inline static double m_rec_deferred_start_time = 0.0;
287 };
288
289}
290
291#endif // CCF_COMMON_PUB_BASE_HPP_H_
#define CCFTHROW(msg)
Definition base.hpp:366
Class to be used as parent all CCF classes.
Definition base.hpp:120
Frame class used to store the data and metadata for one frames received from the camera.
Definition dataFrame.hpp:18
Class for implementing CCF Data Publishers.
Definition pubBase.hpp:115
PublisherStatus & GetPubStatus()
Definition pubBase.cpp:422
static void AddPubFactoryObj(TYPE &pub_factory_obj)
Static method to register a Data Publisher factory object in the internal registry.
Definition pubBase.hpp:124
virtual void ActivateUser()
Definition pubBase.cpp:605
void ResetDbStatus() const
Update status for a given Publisher Thread in the OLDB.
Definition pubBase.cpp:627
std::string ToString() const
Definition pubBase.cpp:682
virtual void DismantleUser()
Definition pubBase.cpp:661
const std::string & GetPubId() const
Definition pubBase.cpp:432
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:299
void EstimateExecution(double &duration, int64_t &nb_of_frames)
Definition pubBase.cpp:665
virtual void PublishUser(DataFrame &frame)
Definition pubBase.cpp:564
void SetEnabled(const bool enabled)
Definition pubBase.cpp:447
virtual void InitialiseUser()
Definition pubBase.cpp:483
static double GetRecTrigger()
Get the trigger for deferred recording.
Definition pubBase.cpp:697
static void SetRecTrigger(const double rec_trigger)
Set the trigger for deferred recording.
Definition pubBase.cpp:692
static bool GetDeferredStart()
Get the deferred start mode.
Definition pubBase.cpp:707
bool GetActivated() const
Definition pubBase.cpp:505
bool GetInitialised() const
Definition pubBase.cpp:478
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:11
PubType m_publisher_type
Definition pubBase.hpp:267
const std::string & GetProcThreadName() const
Definition pubBase.cpp:437
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:256
static const std::map< std::string, std::shared_ptr< PubBase > > & GetPubFactoryObjs()
Generate vector with references to the Publisher Factory Objects registered.
Definition pubBase.cpp:189
virtual ~PubBase()
Definition pubBase.cpp:407
virtual void EstimateExecutionUser(double &duration, int64_t &nb_of_frames)
Definition pubBase.cpp:675
void Activate()
Definition pubBase.cpp:588
static void GetPubObjs(std::vector< PubBase * > &pub_objs)
Get reference to all Data Publisher Objects registered.
Definition pubBase.cpp:331
PubType GetPublisherType() const
Definition pubBase.cpp:427
void Publish(DataFrame &frame, const bool force)
Definition pubBase.cpp:510
virtual void CreateObjectUser(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **new_object)
Definition pubBase.cpp:580
PubBase()
Definition pubBase.cpp:392
virtual void DeactivateUser()
Definition pubBase.cpp:621
bool m_setup_enabled
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:212
void Initialise()
Definition pubBase.cpp:457
virtual void CheckForDeactivationUser()
Definition pubBase.cpp:570
bool m_stat_active
Definition pubBase.hpp:270
void SetActivated(const bool activated)
Definition pubBase.cpp:489
const std::string & GetPubThreadName() const
Definition pubBase.cpp:442
void UpdateDbStatus(const bool force_update=false) const
Definition pubBase.cpp:639
void Deactivate()
Definition pubBase.cpp:611
bool m_initialised
Definition pubBase.hpp:268
void Dismantle()
Definition pubBase.cpp:654
static void SetDeferredStart(const bool def_start_active)
Set the deferred start mode.
Definition pubBase.cpp:702
bool GetEnabled() const
Definition pubBase.cpp:452
Class used by a Publisher to handle its own publisher status.
Definition pubBase.hpp:33
void SetStatus(const PubStatus status)
Set the status of the Publisher Status object.
Definition pubBase.cpp:71
void IncrFramesHandled()
Increment the number of frame handled by one.
Definition pubBase.cpp:88
virtual ~PublisherStatus()
Definition pubBase.cpp:62
void SetFilesStored(const std::vector< std::string > &files_stored)
Set the names of the files stored.
Definition pubBase.cpp:159
PubStatus GetStatus() const
Return the status of the associated Data Publisher.
Definition pubBase.cpp:78
const std::string & GetPubId() const
Return the ID of the Publisher Status object.
Definition pubBase.cpp:66
std::string ToString() const
Generate a summarising, one line status of the object instance.
Definition pubBase.cpp:166
void Reset()
Reset the members in the publisher status.
Definition pubBase.cpp:45
void GetFilesStored(std::vector< std::string > &files_stored) const
Get the names of the output files stored.
Definition pubBase.cpp:126
void IncrVolumeHandled(const uint32_t vol)
Increase the volume handled by the Data Publisher with the given number.
Definition pubBase.cpp:100
int64_t GetFramesHandled() const
Return the number of frames handled.
Definition pubBase.cpp:95
uint64_t GetNbOfFilesStored() const
Get the number of files stored (for a Recording Publisher).
Definition pubBase.cpp:119
PublisherStatus()
Definition pubBase.cpp:40
int64_t GetVolumeHandled() const
Return the volume handled.
Definition pubBase.cpp:107
void SetFramesHandled(const int64_t nb_of_frames_handled)
Set the number of frames handled.
Definition pubBase.cpp:149
void AddFileStored(const std::string &new_file)
Definition pubBase.cpp:112
void SetVolumeHandled(const int64_t volume_handled)
Set the volume (in bytes) handled.
Definition pubBase.cpp:154
double GetStartTime() const
Get the start time for the previous publishing started (seconds since epoch).
Definition pubBase.cpp:83
PublisherStatus & operator=(const PublisherStatus &source)
Definition pubBase.cpp:56
Definition appBase.cpp:9
const std::string DB_NODE_PUB_NB_OF_FILES_STORED
Definition pubBase.hpp:28
const std::string DB_NODE_ADAPTER
Definition pubBase.hpp:23
const std::string DB_NODE_PUB_FRAMES_HANDLED
Definition pubBase.hpp:26
const std::string DB_NODE_PUB_ID
Definition pubBase.hpp:21
const std::string DB_NODE_PUB_VOLUME_HANDLED
Definition pubBase.hpp:27
const std::string DB_NODE_PUB_START
Definition pubBase.hpp:24
const std::string DB_NODE_PUB_STATUS
Definition pubBase.hpp:25
const std::string DB_NODE_PUB_NAME
Definition pubBase.hpp:22
const std::string DB_NODE_PUB_FILES_STORED
Definition pubBase.hpp:29
PubStatus
Defines the various possible states of a Data Publisher.
Definition base.hpp:178
log4cplus::Logger & Logger()
Definition base.cpp:23
PubType
A Publisher may be Recording or Not-Recording. A Recording Publisher publishes data into files.
Definition base.hpp:171