DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
datahandlinglibs
include
datahandlinglibs
models
DataSubscriberModel.hpp
Go to the documentation of this file.
1
8
#ifndef DATAHANDLINGLIBS_SRC_SOURCEMODEL_HPP_
9
#define DATAHANDLINGLIBS_SRC_SOURCEMODEL_HPP_
10
11
#include "
datahandlinglibs/concepts/SourceConcept.hpp
"
12
#include "
datahandlinglibs/opmon/datahandling_info.pb.h
"
13
14
#include "
iomanager/IOManager.hpp
"
15
#include "
iomanager/Sender.hpp
"
16
#include "
iomanager/Receiver.hpp
"
17
#include "
logging/Logging.hpp
"
18
//#include "utilities/ReusableThread.hpp"
19
20
#include "
confmodel/Connection.hpp
"
21
22
//#include <folly/ProducerConsumerQueue.h>
23
//#include <nlohmann/json.hpp>
24
25
//#include <atomic>
26
//#include <memory>
27
//#include <mutex>
28
#include <functional>
29
30
namespace
dunedaq::datahandlinglibs
{
31
32
template
<
class
PayloadType>
33
class
DataSubscriberModel
:
public
SourceConcept
34
{
35
public
:
36
using
inherited
=
SourceConcept
;
37
42
DataSubscriberModel
():
SourceConcept
() {}
43
~DataSubscriberModel
() {}
44
45
void
init
(
const
confmodel::DaqModule
* cfg)
override
{
46
if
(cfg->
get_outputs
().size() != 1) {
47
throw
datahandlinglibs::InitializationError(
ERS_HERE
,
"Only 1 output supported for subscribers"
);
48
}
49
m_data_sender
=
get_iom_sender<PayloadType>
(cfg->
get_outputs
()[0]->UID());
50
51
if
(cfg->
get_inputs
().size() != 1) {
52
throw
datahandlinglibs::InitializationError(
ERS_HERE
,
"Only 1 input supported for subscribers"
);
53
}
54
m_data_receiver
=
get_iom_receiver<PayloadType>
(cfg->
get_inputs
()[0]->UID());
55
}
56
57
void
start
() {
58
m_packets
= 0;
59
m_sum_packets
= 0;
60
m_dropped_packets
= 0;
61
m_data_receiver
->add_callback(std::bind(&
DataSubscriberModel::handle_payload
,
this
, std::placeholders::_1));
62
}
63
64
void
stop
() {
65
m_data_receiver
->remove_callback();
66
}
67
68
bool
handle_payload
(PayloadType& message)
// NOLINT(build/unsigned)
69
{
70
++
m_packets
;
71
++
m_sum_packets
;
72
if
(!
m_data_sender
->try_send(std::move(message),
iomanager::Sender::s_no_block
)) {
73
++
m_dropped_packets
;
74
}
75
return
true
;
76
}
77
protected
:
78
virtual
void
generate_opmon_data
()
override
{
79
opmon::DataSourceInfo
info;
80
info.set_num_packets(
m_packets
.exchange(0));
81
info.set_sum_packets(
m_sum_packets
) ;
82
info.set_num_dropped_packets(
m_dropped_packets
.exchange(0));
83
84
this->
publish
(std::move(info));
85
}
86
87
private
:
88
using
source_t
=
dunedaq::iomanager::ReceiverConcept<PayloadType>
;
89
std::shared_ptr<source_t>
m_data_receiver
;
90
91
using
sink_t
=
dunedaq::iomanager::SenderConcept<PayloadType>
;
92
std::shared_ptr<sink_t>
m_data_sender
;
93
94
std::atomic<uint64_t>
m_packets
{0};
95
std::atomic<uint64_t>
m_sum_packets
{0};
96
std::atomic<uint64_t>
m_dropped_packets
{0};
97
};
98
99
}
// namespace dunedaq::datahandlinglibs
100
101
#endif
// DATAHANDLINGLIBS_SRC_SOURCEMODEL_HPP_
IOManager.hpp
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
dunedaq::confmodel::DaqModule
Definition
DaqModule.hpp:34
dunedaq::confmodel::DaqModule::get_inputs
const std::vector< const dunedaq::confmodel::Connection * > & get_inputs() const
Get "inputs" relationship value. List of connections to/from this module.
Definition
DaqModule.hpp:111
dunedaq::confmodel::DaqModule::get_outputs
const std::vector< const dunedaq::confmodel::Connection * > & get_outputs() const
Get "outputs" relationship value. Output connections from this module.
Definition
DaqModule.hpp:138
dunedaq::datahandlinglibs::DataSubscriberModel::init
void init(const confmodel::DaqModule *cfg) override
Definition
DataSubscriberModel.hpp:45
dunedaq::datahandlinglibs::DataSubscriberModel::generate_opmon_data
virtual void generate_opmon_data() override
Definition
DataSubscriberModel.hpp:78
dunedaq::datahandlinglibs::DataSubscriberModel::~DataSubscriberModel
~DataSubscriberModel()
Definition
DataSubscriberModel.hpp:43
dunedaq::datahandlinglibs::DataSubscriberModel::source_t
dunedaq::iomanager::ReceiverConcept< PayloadType > source_t
Definition
DataSubscriberModel.hpp:88
dunedaq::datahandlinglibs::DataSubscriberModel::m_sum_packets
std::atomic< uint64_t > m_sum_packets
Definition
DataSubscriberModel.hpp:95
dunedaq::datahandlinglibs::DataSubscriberModel::m_dropped_packets
std::atomic< uint64_t > m_dropped_packets
Definition
DataSubscriberModel.hpp:96
dunedaq::datahandlinglibs::DataSubscriberModel::sink_t
dunedaq::iomanager::SenderConcept< PayloadType > sink_t
Definition
DataSubscriberModel.hpp:91
dunedaq::datahandlinglibs::DataSubscriberModel::m_packets
std::atomic< uint64_t > m_packets
Definition
DataSubscriberModel.hpp:94
dunedaq::datahandlinglibs::DataSubscriberModel::m_data_receiver
std::shared_ptr< source_t > m_data_receiver
Definition
DataSubscriberModel.hpp:89
dunedaq::datahandlinglibs::DataSubscriberModel::stop
void stop()
Definition
DataSubscriberModel.hpp:64
dunedaq::datahandlinglibs::DataSubscriberModel::m_data_sender
std::shared_ptr< sink_t > m_data_sender
Definition
DataSubscriberModel.hpp:92
dunedaq::datahandlinglibs::DataSubscriberModel::inherited
SourceConcept inherited
Definition
DataSubscriberModel.hpp:36
dunedaq::datahandlinglibs::DataSubscriberModel::handle_payload
bool handle_payload(PayloadType &message)
Definition
DataSubscriberModel.hpp:68
dunedaq::datahandlinglibs::DataSubscriberModel::DataSubscriberModel
DataSubscriberModel()
SourceModel Constructor.
Definition
DataSubscriberModel.hpp:42
dunedaq::datahandlinglibs::DataSubscriberModel::start
void start()
Definition
DataSubscriberModel.hpp:57
dunedaq::datahandlinglibs::SourceConcept::SourceConcept
SourceConcept()
Definition
SourceConcept.hpp:29
dunedaq::datahandlinglibs::opmon::DataSourceInfo
Definition
datahandling_info.pb.h:268
dunedaq::iomanager::ReceiverConcept
Definition
Receiver.hpp:48
dunedaq::iomanager::SenderConcept
Definition
Sender.hpp:44
dunedaq::iomanager::Sender::s_no_block
static constexpr timeout_t s_no_block
Definition
Sender.hpp:26
dunedaq::opmonlib::MonitorableObject::publish
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
Definition
MonitorableObject.cpp:58
datahandling_info.pb.h
SourceConcept.hpp
Connection.hpp
Receiver.hpp
Sender.hpp
Logging.hpp
dunedaq::datahandlinglibs
Definition
DataHandlingConcept.hpp:16
dunedaq::get_iom_sender
static std::shared_ptr< iomanager::SenderConcept< Datatype > > get_iom_sender(iomanager::ConnectionId const &id)
Definition
IOManager.hxx:171
dunedaq::get_iom_receiver
static std::shared_ptr< iomanager::ReceiverConcept< Datatype > > get_iom_receiver(iomanager::ConnectionId const &id)
Definition
IOManager.hxx:178
Generated on
for DUNE-DAQ by
1.17.0