7#ifndef CCF_COMMON_PUB_BASE_HPP_H_
8#define CCF_COMMON_PUB_BASE_HPP_H_
42 const std::string obj_id =
"ifw::ccf::common::PublisherStatus");
107 std::string m_obj_id;
108 std::string m_pub_id;
111 int64_t m_frames_handled;
112 int64_t m_volume_handled;
113 std::map<std::string, std::string> m_files_stored;
121 static const std::string&
GenId(
const std::string& proc_thread_name,
122 const std::string& pub_thread_name);
125 template <
class TYPE>
127 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
129 if (pub_factory_obj.GetClassName() ==
"") {
130 CCFTHROW(
"Must define a classname for a Data Publisher Plug-In");
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()));
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>();
147 static const std::map<std::string, std::shared_ptr<PubBase>>&
GetPubFactoryObjs();
158 const std::string& proc_thread_name,
159 const std::string& pub_thread_name,
169 static void GetPubObj(
const std::string& proc_thread_name,
170 const std::string& pub_thread_name,
172 const bool initialise =
true);
176 static void GetPubObjs(std::vector<PubBase*>& pub_objs);
182 static bool HasPubObj(
const std::string& proc_thread_name,
183 const std::string& pub_thread_name,
186 PubBase(
const std::string& proc_thread_name,
187 const std::string& pub_thread_name);
200 const std::string&
GetPubId()
const;
223 int64_t& nb_of_frames);
239 const std::string& pub_thread_name,
244 int64_t& nb_of_frames);
275 static std::map<std::string, std::shared_ptr<PubBase>> s_pub_factory_objects;
277 static std::map<std::string, PubBase*> s_pub_objects;
279 std::string m_pub_id;
280 std::string m_proc_thread_name;
281 std::string m_pub_thread_name;
283 std::string m_db_path;
285 std::shared_ptr<PublisherStatus> m_pub_status;
287 inline static bool m_rec_deferred_start =
false;
288 inline static double m_rec_deferred_start_time = 0.0;
#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