5#ifndef CCF_COMMON_PUB_BASE_HPP_H_
6#define CCF_COMMON_PUB_BASE_HPP_H_
40 const std::string obj_id =
"ifw::ccf::common::PublisherStatus");
105 std::string m_obj_id;
106 std::string m_pub_id;
109 int64_t m_frames_handled;
110 int64_t m_volume_handled;
111 std::map<std::string, std::string> m_files_stored;
119 static const std::string&
GenId(
const std::string& proc_thread_name,
120 const std::string& pub_thread_name);
123 template <
class TYPE>
125 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
127 if (pub_factory_obj.GetClassName() ==
"") {
128 CCFTHROW(
"Must define a classname for a Data Publisher Plug-In");
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()));
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>();
145 static const std::map<std::string, std::shared_ptr<PubBase>>&
GetPubFactoryObjs();
156 const std::string& proc_thread_name,
157 const std::string& pub_thread_name,
167 static void GetPubObj(
const std::string& proc_thread_name,
168 const std::string& pub_thread_name,
170 const bool initialise =
true);
174 static void GetPubObjs(std::vector<PubBase*>& pub_objs);
180 static bool HasPubObj(
const std::string& proc_thread_name,
181 const std::string& pub_thread_name,
184 PubBase(
const std::string& proc_thread_name,
185 const std::string& pub_thread_name);
198 const std::string&
GetPubId()
const;
221 int64_t& nb_of_frames);
237 const std::string& pub_thread_name,
242 int64_t& nb_of_frames);
273 static std::map<std::string, std::shared_ptr<PubBase>> s_pub_factory_objects;
275 static std::map<std::string, PubBase*> s_pub_objects;
277 std::string m_pub_id;
278 std::string m_proc_thread_name;
279 std::string m_pub_thread_name;
281 std::string m_db_path;
283 std::shared_ptr<PublisherStatus> m_pub_status;
285 inline static bool m_rec_deferred_start =
false;
286 inline static double m_rec_deferred_start_time = 0.0;
#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
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