DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
opmonlib
include
opmonlib
MonitorableObject.hpp
Go to the documentation of this file.
1
8
9
#ifndef OPMONLIB_INCLUDE_OPMONLIB_MONITORABLEOBJECT_HPP_
10
#define OPMONLIB_INCLUDE_OPMONLIB_MONITORABLEOBJECT_HPP_
11
12
#include "
opmonlib/OpMonFacility.hpp
"
13
#include "
opmonlib/Utils.hpp
"
14
#include <
opmonlib/opmon/monitoring_tree.pb.h
>
15
16
#include "
confmodel/OpMonConf.hpp
"
17
#include "
logging/Logging.hpp
"
// NOTE: if ISSUES ARE DECLARED BEFORE include logging/Logging.hpp, TLOG_DEBUG<<issue wont work.
18
19
#include <google/protobuf/message.h>
20
21
#include <limits>
22
#include <map>
23
#include <memory>
24
#include <mutex>
25
#include <string>
26
#include <type_traits>
27
28
namespace
dunedaq
{
29
30
ERS_DECLARE_ISSUE
(
opmonlib
,
31
NonUniqueNodeName,
32
name <<
" already present in the node list of "
<< opmon_id,
33
((std::string)name)((std::string)opmon_id))
34
35
ERS_DECLARE_ISSUE
(
opmonlib
,
EntryWithNoData
,
"OpMonEntry of type "
<<
type
<<
" has no data"
, ((
std
::
string
)
type
))
36
37
ERS_DECLARE_ISSUE
(
opmonlib
,
38
ErrorWhileCollecting,
39
"OpMon data collection failed in "
<< opmon_id,
40
((
std
::
string
)opmon_id))
41
42
}
43
44
namespace
dunedaq
::
opmonlib
{
45
46
using
OpMonLevel
=
47
std::invoke_result<
decltype
(&
dunedaq::confmodel::OpMonConf::get_level
),
dunedaq::confmodel::OpMonConf
>
::type
;
48
49
enum class
SystemOpMonLevel
:
OpMonLevel
50
{
51
kDisabled
= std::numeric_limits<OpMonLevel>::min(),
52
kAll
= std::numeric_limits<OpMonLevel>::max()
53
};
54
55
enum class
EntryOpMonLevel
:
OpMonLevel
56
{
57
kTopPriority
= std::numeric_limits<OpMonLevel>::min(),
58
kEventDriven
= std::numeric_limits<OpMonLevel>::max() / 4,
59
kDefault
= std::numeric_limits<OpMonLevel>::max() / 2,
60
kLowestPrioriry
= std::numeric_limits<OpMonLevel>::max() - 1
61
};
62
63
template
<
class
T>
64
constexpr
auto
65
to_level
(T
v
)
66
{
67
return
static_cast<
typename std::underlying_type<T>::type
>
(
v
);
68
}
69
70
class
MonitorableObject
71
{
72
public
:
73
using
NodePtr
= std::weak_ptr<MonitorableObject>;
74
using
NewNodePtr
= std::shared_ptr<MonitorableObject>;
75
using
ElementId
= std::string;
76
77
friend
class
OpMonManager
;
78
82
MonitorableObject
(
const
MonitorableObject
&) =
delete
;
83
MonitorableObject
&
operator=
(
const
MonitorableObject
&) =
delete
;
84
MonitorableObject
(
MonitorableObject
&&) =
delete
;
85
MonitorableObject
&
operator=
(
MonitorableObject
&&) =
delete
;
86
87
virtual
~MonitorableObject
() =
default
;
88
89
auto
get_opmon_id
() const noexcept {
return
m_parent_id
+
m_opmon_name
; }
90
91
auto
get_opmon_level
() const noexcept {
return
m_opmon_level
.load(); }
92
93
static
bool
publishable_metric
(
OpMonLevel
entry,
OpMonLevel
system)
noexcept
{
return
(entry < system); }
94
95
protected
:
100
MonitorableObject
() =
default
;
101
106
void
register_node
(
ElementId
name,
NewNodePtr
);
107
120
void
publish
(google::protobuf::Message&&,
121
CustomOrigin
&& co = {},
122
OpMonLevel
l =
to_level
(
EntryOpMonLevel::kDefault
))
const
noexcept
;
123
128
virtual
void
generate_opmon_data
() {
return
; }
129
130
private
:
137
opmon::MonitoringTreeInfo
collect() noexcept;
138
142
void
set_opmon_level(
OpMonLevel
) noexcept;
143
147
void
inherit_parent_properties(const
MonitorableObject
& parent);
// funcion called on the children as well
148
152
MonitorableObject
(
ElementId
name,
ElementId
parent_id =
""
)
153
:
m_parent_id
()
154
,
m_opmon_name
(name)
155
{
156
m_parent_id
.set_session(parent_id);
157
}
158
159
std::map<ElementId, NodePtr>
m_nodes
;
160
std::mutex
m_node_mutex
;
161
162
using
facility_ptr_t
= std::shared_ptr<opmonlib::OpMonFacility>;
163
std::atomic<facility_ptr_t>
m_facility
{
s_default_facility
};
164
dunedaq::opmon::OpMonId
m_parent_id
;
165
std::atomic<OpMonLevel>
m_opmon_level
=
to_level
(
SystemOpMonLevel::kAll
);
166
ElementId
m_opmon_name
;
167
168
static
facility_ptr_t
s_default_facility
;
169
170
// info for monitoring the monitoring structure
171
using
const_metric_counter_t
=
172
std::invoke_result<
decltype
(&
dunedaq::opmonlib::opmon::MonitoringTreeInfo::n_published_measurements
),
173
dunedaq::opmonlib::opmon::MonitoringTreeInfo
>
::type
;
174
using
metric_counter_t
= std::remove_const<const_metric_counter_t>::type;
175
mutable
std::atomic<metric_counter_t>
m_published_counter
{ 0 };
176
mutable
std::atomic<metric_counter_t>
m_ignored_counter
{ 0 };
177
mutable
std::atomic<metric_counter_t>
m_error_counter
{ 0 };
178
179
using
const_time_counter_t
=
180
std::invoke_result<
decltype
(&
dunedaq::opmonlib::opmon::MonitoringTreeInfo::cpu_elapsed_time_us
),
181
dunedaq::opmonlib::opmon::MonitoringTreeInfo
>
::type
;
182
using
time_counter_t
= std::remove_const<const_metric_counter_t>::type;
183
mutable
std::atomic<time_counter_t>
m_cpu_us_counter
{ 0 };
184
};
185
186
class
OpMonLink
:
public
MonitorableObject
187
{
188
public
:
189
using
MonitorableObject::register_node
;
190
};
191
192
}
// namespace dunedaq::opmonlib
193
194
#endif
// OPMONLIB_INCLUDE_OPMONLIB_MONITORABLEOBJECT_HPP_
OpMonFacility.hpp
type
type
Definition
TriggerActivity_serialization.hpp:48
dunedaq::confmodel::OpMonConf
Definition
OpMonConf.hpp:24
dunedaq::confmodel::OpMonConf::get_level
uint32_t get_level() const
Get "level" attribute value. SystemOpMonLevel.
Definition
OpMonConf.hpp:98
dunedaq::opmon::OpMonId
Definition
opmon_entry.pb.h:427
dunedaq::opmonlib::MonitorableObject
Definition
MonitorableObject.hpp:71
dunedaq::opmonlib::MonitorableObject::NewNodePtr
std::shared_ptr< MonitorableObject > NewNodePtr
Definition
MonitorableObject.hpp:74
dunedaq::opmonlib::MonitorableObject::get_opmon_level
auto get_opmon_level() const noexcept
Definition
MonitorableObject.hpp:91
dunedaq::opmonlib::MonitorableObject::m_published_counter
std::atomic< metric_counter_t > m_published_counter
Definition
MonitorableObject.hpp:175
dunedaq::opmonlib::MonitorableObject::generate_opmon_data
virtual void generate_opmon_data()
Definition
MonitorableObject.hpp:128
dunedaq::opmonlib::MonitorableObject::const_time_counter_t
std::invoke_result< decltype(&dunedaq::opmonlib::opmon::MonitoringTreeInfo::cpu_elapsed_time_us), dunedaq::opmonlib::opmon::MonitoringTreeInfo >::type const_time_counter_t
Definition
MonitorableObject.hpp:179
dunedaq::opmonlib::MonitorableObject::facility_ptr_t
std::shared_ptr< opmonlib::OpMonFacility > facility_ptr_t
Definition
MonitorableObject.hpp:162
dunedaq::opmonlib::MonitorableObject::MonitorableObject
MonitorableObject()=default
dunedaq::opmonlib::MonitorableObject::~MonitorableObject
virtual ~MonitorableObject()=default
dunedaq::opmonlib::MonitorableObject::m_ignored_counter
std::atomic< metric_counter_t > m_ignored_counter
Definition
MonitorableObject.hpp:176
dunedaq::opmonlib::MonitorableObject::get_opmon_id
auto get_opmon_id() const noexcept
Definition
MonitorableObject.hpp:89
dunedaq::opmonlib::MonitorableObject::m_parent_id
dunedaq::opmon::OpMonId m_parent_id
Definition
MonitorableObject.hpp:164
dunedaq::opmonlib::MonitorableObject::m_error_counter
std::atomic< metric_counter_t > m_error_counter
Definition
MonitorableObject.hpp:177
dunedaq::opmonlib::MonitorableObject::operator=
MonitorableObject & operator=(MonitorableObject &&)=delete
dunedaq::opmonlib::MonitorableObject::operator=
MonitorableObject & operator=(const MonitorableObject &)=delete
dunedaq::opmonlib::MonitorableObject::ElementId
std::string ElementId
Definition
MonitorableObject.hpp:75
dunedaq::opmonlib::MonitorableObject::metric_counter_t
std::remove_const< const_metric_counter_t >::type metric_counter_t
Definition
MonitorableObject.hpp:174
dunedaq::opmonlib::MonitorableObject::m_opmon_level
std::atomic< OpMonLevel > m_opmon_level
Definition
MonitorableObject.hpp:165
dunedaq::opmonlib::MonitorableObject::m_facility
std::atomic< facility_ptr_t > m_facility
Definition
MonitorableObject.hpp:163
dunedaq::opmonlib::MonitorableObject::register_node
void register_node(ElementId name, NewNodePtr)
Definition
MonitorableObject.cpp:33
dunedaq::opmonlib::MonitorableObject::publish
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
Definition
MonitorableObject.cpp:59
dunedaq::opmonlib::MonitorableObject::time_counter_t
std::remove_const< const_metric_counter_t >::type time_counter_t
Definition
MonitorableObject.hpp:182
dunedaq::opmonlib::MonitorableObject::publishable_metric
static bool publishable_metric(OpMonLevel entry, OpMonLevel system) noexcept
Definition
MonitorableObject.hpp:93
dunedaq::opmonlib::MonitorableObject::m_opmon_name
ElementId m_opmon_name
Definition
MonitorableObject.hpp:166
dunedaq::opmonlib::MonitorableObject::m_node_mutex
std::mutex m_node_mutex
Definition
MonitorableObject.hpp:160
dunedaq::opmonlib::MonitorableObject::m_cpu_us_counter
std::atomic< time_counter_t > m_cpu_us_counter
Definition
MonitorableObject.hpp:183
dunedaq::opmonlib::MonitorableObject::const_metric_counter_t
std::invoke_result< decltype(&dunedaq::opmonlib::opmon::MonitoringTreeInfo::n_published_measurements), dunedaq::opmonlib::opmon::MonitoringTreeInfo >::type const_metric_counter_t
Definition
MonitorableObject.hpp:171
dunedaq::opmonlib::MonitorableObject::m_nodes
std::map< ElementId, NodePtr > m_nodes
Definition
MonitorableObject.hpp:159
dunedaq::opmonlib::MonitorableObject::MonitorableObject
MonitorableObject(const MonitorableObject &)=delete
dunedaq::opmonlib::MonitorableObject::MonitorableObject
MonitorableObject(MonitorableObject &&)=delete
dunedaq::opmonlib::MonitorableObject::NodePtr
std::weak_ptr< MonitorableObject > NodePtr
Definition
MonitorableObject.hpp:73
dunedaq::opmonlib::MonitorableObject::s_default_facility
static facility_ptr_t s_default_facility
Definition
MonitorableObject.hpp:168
dunedaq::opmonlib::MonitorableObject::OpMonManager
friend class OpMonManager
Definition
MonitorableObject.hpp:77
dunedaq::opmonlib::OpMonLink
Definition
MonitorableObject.hpp:187
dunedaq::opmonlib::opmon::MonitoringTreeInfo
Definition
monitoring_tree.pb.h:80
dunedaq::opmonlib::opmon::MonitoringTreeInfo::cpu_elapsed_time_us
::uint64_t cpu_elapsed_time_us() const
Definition
monitoring_tree.pb.h:495
dunedaq::opmonlib::opmon::MonitoringTreeInfo::n_published_measurements
::uint32_t n_published_measurements() const
Definition
monitoring_tree.pb.h:407
OpMonConf.hpp
Logging.hpp
monitoring_tree.pb.h
dunedaq::opmonlib::OpMonLevel
std::invoke_result< decltype(&dunedaq::confmodel::OpMonConf::get_level), dunedaq::confmodel::OpMonConf >::type OpMonLevel
Definition
MonitorableObject.hpp:46
dunedaq::opmonlib::EntryOpMonLevel
EntryOpMonLevel
Definition
MonitorableObject.hpp:56
dunedaq::opmonlib::EntryOpMonLevel::kLowestPrioriry
@ kLowestPrioriry
Definition
MonitorableObject.hpp:60
dunedaq::opmonlib::EntryOpMonLevel::kEventDriven
@ kEventDriven
Definition
MonitorableObject.hpp:58
dunedaq::opmonlib::EntryOpMonLevel::kDefault
@ kDefault
Definition
MonitorableObject.hpp:59
dunedaq::opmonlib::EntryOpMonLevel::kTopPriority
@ kTopPriority
Definition
MonitorableObject.hpp:57
dunedaq::opmonlib::to_level
constexpr auto to_level(T v)
Definition
MonitorableObject.hpp:65
dunedaq::opmonlib::SystemOpMonLevel
SystemOpMonLevel
Definition
MonitorableObject.hpp:50
dunedaq::opmonlib::SystemOpMonLevel::kAll
@ kAll
Definition
MonitorableObject.hpp:52
dunedaq::opmonlib::SystemOpMonLevel::kDisabled
@ kDisabled
Definition
MonitorableObject.hpp:51
dunedaq::opmonlib::CustomOrigin
std::map< std::string, std::string > CustomOrigin
Definition
Utils.hpp:46
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::EntryWithNoData
EntryWithNoData
Definition
MonitorableObject.hpp:35
dunedaq::v
default char v[0]
Definition
Serialization.hpp:261
opmonlib
Definition
__init__.py:1
std
Definition
SchemaUtils.hpp:118
Utils.hpp
Generated on
for DUNE-DAQ by
1.18.0