DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::asiolibs::SourceModel< TargetPayloadType > Class Template Reference

#include <SourceModel.hpp>

Inheritance diagram for dunedaq::asiolibs::SourceModel< TargetPayloadType >:
[legend]
Collaboration diagram for dunedaq::asiolibs::SourceModel< TargetPayloadType >:
[legend]

Public Types

using sink_t = iomanager::SenderConcept<TargetPayloadType>
using inherited = SourceConcept
using data_t = nlohmann::json
Public Types inherited from dunedaq::opmonlib::MonitorableObject
using NodePtr = std::weak_ptr<MonitorableObject>
using NewNodePtr = std::shared_ptr<MonitorableObject>
using ElementId = std::string

Public Member Functions

 SourceModel ()
 SourceModel Constructor.
 ~SourceModel ()
void acquire_callback () override
void handle_daq_frame (char *buffer) override
std::size_t get_expected_frame_size () const override
void generate_opmon_data () override
Public Member Functions inherited from dunedaq::asiolibs::SourceConcept
 SourceConcept ()
virtual ~SourceConcept ()
 SourceConcept (const SourceConcept &)=delete
 SourceConcept is not copy-constructible.
SourceConceptoperator= (const SourceConcept &)=delete
 SourceConcept is not copy-assginable.
 SourceConcept (SourceConcept &&)=delete
 SourceConcept is not move-constructible.
SourceConceptoperator= (SourceConcept &&)=delete
 SourceConcept is not move-assignable.
void set_sink_config (const appmodel::DataMoveCallbackConf *sink_conf)
Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject (const MonitorableObject &)=delete
MonitorableObjectoperator= (const MonitorableObject &)=delete
 MonitorableObject (MonitorableObject &&)=delete
MonitorableObjectoperator= (MonitorableObject &&)=delete
virtual ~MonitorableObject ()=default
auto get_opmon_id () const noexcept
auto get_opmon_level () const noexcept

Private Types

using sink_cb_t = std::shared_ptr<std::function<void(TargetPayloadType&&)>>

Private Attributes

const std::size_t m_expected_frame_size = sizeof(TargetPayloadType)
bool m_callback_is_acquired { false }
sink_cb_t m_sink_callback
std::atomic< uint64_t > m_leftover_bytes_encountered {0}

Additional Inherited Members

Static Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
static bool publishable_metric (OpMonLevel entry, OpMonLevel system) noexcept
Public Attributes inherited from dunedaq::asiolibs::SourceConcept
const appmodel::DataMoveCallbackConfm_sink_conf
Protected Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject ()=default
void register_node (ElementId name, NewNodePtr)
void publish (google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept

Detailed Description

template<class TargetPayloadType>
class dunedaq::asiolibs::SourceModel< TargetPayloadType >

Definition at line 36 of file SourceModel.hpp.

Member Typedef Documentation

◆ data_t

template<class TargetPayloadType>
using dunedaq::asiolibs::SourceModel< TargetPayloadType >::data_t = nlohmann::json

Definition at line 41 of file SourceModel.hpp.

◆ inherited

template<class TargetPayloadType>
using dunedaq::asiolibs::SourceModel< TargetPayloadType >::inherited = SourceConcept

Definition at line 40 of file SourceModel.hpp.

◆ sink_cb_t

template<class TargetPayloadType>
using dunedaq::asiolibs::SourceModel< TargetPayloadType >::sink_cb_t = std::shared_ptr<std::function<void(TargetPayloadType&&)>>
private

Definition at line 96 of file SourceModel.hpp.

◆ sink_t

template<class TargetPayloadType>
using dunedaq::asiolibs::SourceModel< TargetPayloadType >::sink_t = iomanager::SenderConcept<TargetPayloadType>

Definition at line 39 of file SourceModel.hpp.

Constructor & Destructor Documentation

◆ SourceModel()

template<class TargetPayloadType>
dunedaq::asiolibs::SourceModel< TargetPayloadType >::SourceModel ( )
inline

SourceModel Constructor.

Parameters
nameInstance name for this SourceModel instance

Definition at line 47 of file SourceModel.hpp.

◆ ~SourceModel()

template<class TargetPayloadType>
dunedaq::asiolibs::SourceModel< TargetPayloadType >::~SourceModel ( )
inline

Definition at line 50 of file SourceModel.hpp.

50{}

Member Function Documentation

◆ acquire_callback()

template<class TargetPayloadType>
void dunedaq::asiolibs::SourceModel< TargetPayloadType >::acquire_callback ( )
inlineoverridevirtual

Implements dunedaq::asiolibs::SourceConcept.

Definition at line 52 of file SourceModel.hpp.

53 {
55 TLOG_DEBUG(5) << "SourceModel callback is already acquired!";
56 } else {
57 // Getting DataMoveCBRegistry
61 }
62 }
const appmodel::DataMoveCallbackConf * m_sink_conf
static std::shared_ptr< DataMoveCallbackRegistry > get()
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112

◆ generate_opmon_data()

template<class TargetPayloadType>
void dunedaq::asiolibs::SourceModel< TargetPayloadType >::generate_opmon_data ( )
inlineoverridevirtual

Hook for customisable pubblication. The function can throw, exception will be caught by the monitoring thread

Reimplemented from dunedaq::opmonlib::MonitorableObject.

Definition at line 82 of file SourceModel.hpp.

82 {
83
85 info.set_leftover_bytes_encountered( m_leftover_bytes_encountered.exchange(0) );
86
88 }
std::atomic< uint64_t > m_leftover_bytes_encountered
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept

◆ get_expected_frame_size()

template<class TargetPayloadType>
std::size_t dunedaq::asiolibs::SourceModel< TargetPayloadType >::get_expected_frame_size ( ) const
inlineoverridevirtual

Implements dunedaq::asiolibs::SourceConcept.

Definition at line 78 of file SourceModel.hpp.

78 {
80 }
const std::size_t m_expected_frame_size

◆ handle_daq_frame()

template<class TargetPayloadType>
void dunedaq::asiolibs::SourceModel< TargetPayloadType >::handle_daq_frame ( char * buffer)
inlineoverridevirtual

Implements dunedaq::asiolibs::SourceConcept.

Definition at line 65 of file SourceModel.hpp.

66 {
67 // Materialize a real TargetPayloadType object by copying bytes from the buffer.
68 // This is defined behavior, alignment-safe, and fast, without pointer vodoo
69 // Previously reinterpret_cast to TargetPayloadType* introduced alignment traps
70 // “pretend there’s a constructed object there” UB.
73
74 // Pass by value (moved); no references into 'buffer', so no UAF.
75 (*m_sink_callback)(std::move(frame));
76 }

Member Data Documentation

◆ m_callback_is_acquired

template<class TargetPayloadType>
bool dunedaq::asiolibs::SourceModel< TargetPayloadType >::m_callback_is_acquired { false }
private

Definition at line 95 of file SourceModel.hpp.

95{ false };

◆ m_expected_frame_size

template<class TargetPayloadType>
const std::size_t dunedaq::asiolibs::SourceModel< TargetPayloadType >::m_expected_frame_size = sizeof(TargetPayloadType)
private

Definition at line 92 of file SourceModel.hpp.

◆ m_leftover_bytes_encountered

template<class TargetPayloadType>
std::atomic<uint64_t> dunedaq::asiolibs::SourceModel< TargetPayloadType >::m_leftover_bytes_encountered {0}
private

Definition at line 100 of file SourceModel.hpp.

100{0}; // NOLINT(build/unsigned)

◆ m_sink_callback

template<class TargetPayloadType>
sink_cb_t dunedaq::asiolibs::SourceModel< TargetPayloadType >::m_sink_callback
private

Definition at line 97 of file SourceModel.hpp.


The documentation for this class was generated from the following file: