DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
ipm
include
ipm
Sender.hpp
Go to the documentation of this file.
1
22
23
#ifndef IPM_INCLUDE_IPM_SENDER_HPP_
24
#define IPM_INCLUDE_IPM_SENDER_HPP_
25
26
#include "cetlib/BasicPluginFactory.h"
27
#include "cetlib/compiler_macros.h"
28
#include "
ers/Issue.hpp
"
29
#include "
logging/Logging.hpp
"
// NOTE: if ISSUES ARE DECLARED BEFORE include logging/Logging.hpp, TLOG_DEBUG<<issue wont work.
30
#include "
opmonlib/MonitorableObject.hpp
"
31
32
#include <atomic>
33
#include <memory>
34
#include <string>
35
#include <vector>
36
37
namespace
dunedaq
{
38
// Disable coverage collection LCOV_EXCL_START
39
ERS_DECLARE_ISSUE
(
ipm
, KnownStateForbidsSend,
"Sender not in a state to send data"
, )
40
ERS_DECLARE_ISSUE
(
ipm
,
41
NullPointerPassedToSend,
42
connection_name <<
": An null pointer to memory was passed to Sender::send"
,
43
((
std
::
string
)connection_name))
44
ERS_DECLARE_ISSUE
(
ipm
,
45
SendTimeoutExpired
,
46
connection_name <<
": Unable to send within timeout period (timeout period was "
<< timeout
47
<<
" milliseconds)"
,
48
((
std
::
string
)connection_name)((
int
)timeout))
// NOLINT
49
50
// Reenable coverage collection LCOV_EXCL_STOP
51
}
// namespace dunedaq
52
53
#ifndef EXTERN_C_FUNC_DECLARE_START
54
// NOLINTNEXTLINE(build/define_used)
55
#define EXTERN_C_FUNC_DECLARE_START \
56
extern "C" \
57
{
58
#endif
59
64
// NOLINTNEXTLINE
65
#define DEFINE_DUNE_IPM_SENDER(klass) \
66
EXTERN_C_FUNC_DECLARE_START \
67
std::shared_ptr<dunedaq::ipm::Sender> make() \
68
{ \
69
return std::shared_ptr<dunedaq::ipm::Sender>(new klass()); \
70
} \
71
}
72
73
namespace
dunedaq::ipm
{
74
75
class
Sender
:
public
opmonlib::MonitorableObject
76
{
77
78
public
:
79
struct
ConnectionInfo
80
{
81
std::string
connection_name
{
""
};
82
std::string
connection_string
{
"inproc://default"
};
83
int
capacity
{ 0 };
84
};
85
using
duration_t
= std::chrono::milliseconds;
86
static
constexpr
duration_t
s_block
= duration_t::max();
87
static
constexpr
duration_t
s_no_block
= duration_t::zero();
88
89
using
message_size_t
= int;
90
91
Sender
() =
default
;
92
virtual
~Sender
() =
default
;
93
94
virtual
std::string
connect_for_sends
(
const
ConnectionInfo
& connection_info) = 0;
95
96
virtual
bool
can_send
() const noexcept = 0;
97
98
// send() will perform some universally-desirable checks before calling user-implemented send_()
99
// -Throws KnownStateForbidsSend if can_send() == false
100
// -Throws NullPointerPassedToSend if message is a null pointer
101
// -If message_size == 0, function is a no-op
102
103
bool
send
(const
void
* message,
104
message_size_t
message_size,
105
const
duration_t
& timeout,
106
std
::
string
const& metadata =
""
,
107
bool
no_tmoexcept_mode = false);
108
109
Sender
(const
Sender
&) = delete;
110
Sender
& operator=(const
Sender
&) = delete;
111
112
Sender
(
Sender
&&) = delete;
113
Sender
& operator=(
Sender
&&) = delete;
114
115
protected:
116
ConnectionInfo
m_connection_info
;
117
void
generate_opmon_data
() override;
118
119
virtual
bool
send_
(const
void
* message,
120
message_size_t
N,
121
const
duration_t
& timeout,
122
std
::
string
const& metadata,
123
bool
no_tmoexcept_mode) = 0;
124
125
private:
126
mutable
std
::atomic<
size_t
>
m_bytes
= { 0 };
127
mutable
std::atomic<size_t>
m_messages
= { 0 };
128
};
129
130
inline
std::shared_ptr<Sender>
131
make_ipm_sender
(std::string
const
& plugin_name)
132
{
133
static
cet::BasicPluginFactory bpf(
"duneIPM"
,
"make"
);
134
return
bpf.makePlugin<std::shared_ptr<Sender>>(plugin_name);
135
}
136
137
}
// namespace dunedaq::ipm
138
139
#endif
// IPM_INCLUDE_IPM_SENDER_HPP_
Issue.hpp
MonitorableObject.hpp
dunedaq::ipm::Sender::s_block
static constexpr duration_t s_block
Definition
Sender.hpp:86
dunedaq::ipm::Sender::Sender
Sender()=default
dunedaq::ipm::Sender::duration_t
std::chrono::milliseconds duration_t
Definition
Sender.hpp:85
dunedaq::ipm::Sender::m_messages
std::atomic< size_t > m_messages
Definition
Sender.hpp:127
dunedaq::ipm::Sender::connect_for_sends
virtual std::string connect_for_sends(const ConnectionInfo &connection_info)=0
dunedaq::ipm::Sender::s_no_block
static constexpr duration_t s_no_block
Definition
Sender.hpp:87
dunedaq::ipm::Sender::message_size_t
int message_size_t
Definition
Sender.hpp:89
dunedaq::ipm::Sender::~Sender
virtual ~Sender()=default
dunedaq::ipm::Sender::generate_opmon_data
void generate_opmon_data() override
Definition
Sender.cpp:44
dunedaq::ipm::Sender::m_bytes
std::atomic< size_t > m_bytes
Definition
Sender.hpp:126
dunedaq::ipm::Sender::send
bool send(const void *message, message_size_t message_size, const duration_t &timeout, std::string const &metadata="", bool no_tmoexcept_mode=false)
Definition
Sender.cpp:17
dunedaq::ipm::Sender::send_
virtual bool send_(const void *message, message_size_t N, const duration_t &timeout, std::string const &metadata, bool no_tmoexcept_mode)=0
dunedaq::ipm::Sender::m_connection_info
ConnectionInfo m_connection_info
Definition
Sender.hpp:116
dunedaq::ipm::Sender::can_send
virtual bool can_send() const noexcept=0
dunedaq::opmonlib::MonitorableObject
Definition
MonitorableObject.hpp:71
Logging.hpp
dunedaq::ipm
An ERS Error indicating that an exception was thrown from ZMQ while performing an operation.
Definition
PluginInfo.hpp:26
dunedaq::ipm::make_ipm_sender
std::shared_ptr< Sender > make_ipm_sender(std::string const &plugin_name)
Definition
Sender.hpp:131
dunedaq
The DUNE-DAQ namespace.
Definition
cib_utilities.cpp:5
dunedaq::ERS_DECLARE_ISSUE
ERS_DECLARE_ISSUE(cibmodules, CIBCommunicationError, " CIB Hardware Communication Error: "<< descriptor,((std::string) descriptor)) ERS_DECLARE_ISSUE(cibmodules
dunedaq::SendTimeoutExpired
SendTimeoutExpired
Definition
Sender.hpp:45
std
Definition
SchemaUtils.hpp:118
dunedaq::ipm::Sender::ConnectionInfo
Definition
Sender.hpp:80
dunedaq::ipm::Sender::ConnectionInfo::connection_string
std::string connection_string
Definition
Sender.hpp:82
dunedaq::ipm::Sender::ConnectionInfo::connection_name
std::string connection_name
Definition
Sender.hpp:81
dunedaq::ipm::Sender::ConnectionInfo::capacity
int capacity
Definition
Sender.hpp:83
Generated on
for DUNE-DAQ by
1.18.0