5 #ifndef CCF_COMMON_PUB_BASE_HPP_H_
6 #define CCF_COMMON_PUB_BASE_HPP_H_
39 const std::string obj_id =
"ccf::common::PublisherStatus");
104 std::string m_obj_id;
105 std::string m_pub_id;
108 int64_t m_frames_handled;
109 int64_t m_volume_handled;
110 std::map<std::string, std::string> m_files_stored;
118 static const std::string&
GenId(
const std::string& proc_thread_name,
119 const std::string& pub_thread_name);
122 template <
class TYPE>
124 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
126 if (pub_factory_obj.GetClassName() ==
"") {
127 CCFTHROW(
"Must define a classname for a Data Publisher Plug-In");
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()));
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>();
144 static const std::map<std::string, std::shared_ptr<PubBase>>&
GetPubFactoryObjs();
155 const std::string& proc_thread_name,
156 const std::string& pub_thread_name,
166 static void GetPubObj(
const std::string& proc_thread_name,
167 const std::string& pub_thread_name,
169 const bool initialise =
true);
173 static void GetPubObjs(std::vector<PubBase*>& pub_objs);
179 static bool HasPubObj(
const std::string& proc_thread_name,
180 const std::string& pub_thread_name,
183 PubBase(
const std::string& proc_thread_name,
184 const std::string& pub_thread_name);
197 const std::string&
GetPubId()
const;
220 int64_t& nb_of_frames);
236 const std::string& pub_thread_name,
241 int64_t& nb_of_frames);
264 static std::map<std::string, std::shared_ptr<PubBase>> s_pub_factory_objects;
266 static std::map<std::string, PubBase*> s_pub_objects;
268 std::string m_pub_id;
269 std::string m_proc_thread_name;
270 std::string m_pub_thread_name;
272 std::string m_db_path;
274 std::shared_ptr<PublisherStatus> m_pub_status;
#define CCFTHROW(msg)
Guard for TRACE logs. Ensures log text is only generated when the given log level is enabled.
Definition: base.hpp:489
Class to be used as parent all CCF classes.
Definition: base.hpp:151
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:261
virtual void DeactivateUser()
Definition: pubBase.cpp:599
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:259
PubType m_publisher_type
Definition: pubBase.hpp:258
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:655
PublisherStatus & GetPubStatus()
Definition: pubBase.cpp:421
bool GetInitialised() const
Definition: pubBase.cpp:473
bool GetEnabled() const
Definition: pubBase.cpp:451
void ResetDbStatus() const
Update status for a given Publisher Thread in the OLDB.
Definition: pubBase.cpp:605
void SetActivated(const bool activated)
Definition: pubBase.cpp:484
virtual void CheckForDeactivationUser()
Definition: pubBase.cpp:548
std::string ToString() const
Definition: pubBase.cpp:662
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:542
void EstimateExecution(double &duration, int64_t &nb_of_frames)
Definition: pubBase.cpp:645
void Dismantle()
Definition: pubBase.cpp:634
virtual void ActivateUser()
Definition: pubBase.cpp:583
PubType GetPublisherType() const
Definition: pubBase.cpp:426
bool GetActivated() const
Definition: pubBase.cpp:500
PubBase()
Definition: pubBase.cpp:390
void Activate()
Definition: pubBase.cpp:566
void Deactivate()
Definition: pubBase.cpp:589
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:505
virtual void InitialiseUser()
Definition: pubBase.cpp:478
bool m_setup_enabled
Definition: pubBase.hpp:260
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:558
virtual ~PubBase()
Definition: pubBase.cpp:406
virtual void DismantleUser()
Definition: pubBase.cpp:641
void UpdateDbStatus() const
Definition: pubBase.cpp:621
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:264
log4cplus::Logger & Logger()
Definition: base.cpp:9
PubStatus
Defines the various possible states of a Data Publisher.
Definition: base.hpp:271