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/Utils.hpp
"
13
#include "
opmonlib/OpMonFacility.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 <type_traits>
23
#include <map>
24
#include <memory>
25
#include <string>
26
#include <mutex>
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
36
ERS_DECLARE_ISSUE
(
opmonlib
,
37
EntryWithNoData
,
38
"OpMonEntry of type "
<<
type
<<
" has no data"
,
39
((std::string)
type
)
40
)
41
42
ERS_DECLARE_ISSUE
(
opmonlib
,
43
ErrorWhileCollecting,
44
"OpMon data collection failed in "
<< opmon_id,
45
((std::string)opmon_id) )
46
47
}
48
49
50
namespace
dunedaq::opmonlib
{
51
52
using
OpMonLevel
= std::invoke_result<
decltype
(&
dunedaq::confmodel::OpMonConf::get_level
),
53
dunedaq::confmodel::OpMonConf
>
::type
;
54
55
enum class
SystemOpMonLevel
:
OpMonLevel
{
56
kDisabled
= std::numeric_limits<OpMonLevel>::min(),
57
kAll
= std::numeric_limits<OpMonLevel>::max()
58
};
59
60
enum class
EntryOpMonLevel
:
OpMonLevel
{
61
kTopPriority
= std::numeric_limits<OpMonLevel>::min(),
62
kEventDriven
= std::numeric_limits<OpMonLevel>::max()/4,
63
kDefault
= std::numeric_limits<OpMonLevel>::max()/2,
64
kLowestPrioriry
= std::numeric_limits<OpMonLevel>::max()-1
65
};
66
67
template
<
class
T>
68
constexpr
auto
to_level
( T
v
) {
69
return
static_cast<
typename std::underlying_type<T>::type
>
(
v
);
70
}
71
72
73
class
MonitorableObject
74
{
75
public
:
76
77
using
NodePtr
= std::weak_ptr<MonitorableObject>;
78
using
NewNodePtr
= std::shared_ptr<MonitorableObject>;
79
using
ElementId
= std::string;
80
81
friend
class
OpMonManager
;
82
86
MonitorableObject
(
const
MonitorableObject
& ) = delete ;
87
MonitorableObject
&
operator =
(
const
MonitorableObject
&) =
delete
;
88
MonitorableObject
(
MonitorableObject
&& ) =
delete
;
89
MonitorableObject
&
operator =
(
MonitorableObject
&&) =
delete
;
90
91
virtual
~MonitorableObject
() =
default
;
92
93
auto
get_opmon_id
() const noexcept {
return
m_parent_id
+
m_opmon_name
; }
94
95
auto
get_opmon_level
() const noexcept {
return
m_opmon_level
.load(); }
96
97
static
bool
publishable_metric
(
OpMonLevel
entry,
OpMonLevel
system )
noexcept
{
98
return
(entry < system);
99
}
100
101
protected
:
102
107
MonitorableObject
() =
default
;
108
113
void
register_node
(
ElementId
name,
NewNodePtr
) ;
114
127
void
publish
( google::protobuf::Message &&,
128
CustomOrigin
&& co = {},
129
OpMonLevel
l =
to_level
(
EntryOpMonLevel::kDefault
) )
const
noexcept
;
130
135
virtual
void
generate_opmon_data
() {
return
;}
136
137
138
private
:
139
146
opmon::MonitoringTreeInfo
collect
() noexcept ;
147
151
void
set_opmon_level
(
OpMonLevel
) noexcept;
152
156
void
inherit_parent_properties
( const
MonitorableObject
& parent );
// funcion called on the children as well
157
161
MonitorableObject
(
ElementId
name,
ElementId
parent_id =
""
)
162
:
m_parent_id
()
163
,
m_opmon_name
(name) {
164
m_parent_id
.set_session(parent_id);
165
}
166
167
std::map<ElementId, NodePtr>
m_nodes
;
168
std::mutex
m_node_mutex
;
169
170
using
facility_ptr_t
= std::shared_ptr<opmonlib::OpMonFacility>;
171
std::atomic<facility_ptr_t>
m_facility
{
s_default_facility
};
172
dunedaq::opmon::OpMonId
m_parent_id
;
173
std::atomic<OpMonLevel>
m_opmon_level
=
to_level
(
SystemOpMonLevel::kAll
);
174
ElementId
m_opmon_name
;
175
176
static
facility_ptr_t
s_default_facility
;
177
178
// info for monitoring the monitoring structure
179
using
const_metric_counter_t
= std::invoke_result<
decltype
(&
dunedaq::opmonlib::opmon::MonitoringTreeInfo::n_published_measurements
),
180
dunedaq::opmonlib::opmon::MonitoringTreeInfo
>
::type
;
181
using
metric_counter_t
= std::remove_const<const_metric_counter_t>::type;
182
mutable
std::atomic<metric_counter_t>
m_published_counter
{0};
183
mutable
std::atomic<metric_counter_t>
m_ignored_counter
{0};
184
mutable
std::atomic<metric_counter_t>
m_error_counter
{0};
185
186
using
const_time_counter_t
= std::invoke_result<
decltype
(&
dunedaq::opmonlib::opmon::MonitoringTreeInfo::cpu_elapsed_time_us
),
187
dunedaq::opmonlib::opmon::MonitoringTreeInfo
>
::type
;
188
using
time_counter_t
= std::remove_const<const_metric_counter_t>::type;
189
mutable
std::atomic<time_counter_t>
m_cpu_us_counter
{0};
190
};
191
192
193
class
OpMonLink
:
public
MonitorableObject
{
194
public
:
195
using
MonitorableObject::register_node
;
196
};
197
198
}
// namespace dunedaq::opmonlib
199
200
#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:74
dunedaq::opmonlib::MonitorableObject::NewNodePtr
std::shared_ptr< MonitorableObject > NewNodePtr
Definition
MonitorableObject.hpp:78
dunedaq::opmonlib::MonitorableObject::inherit_parent_properties
void inherit_parent_properties(const MonitorableObject &parent)
Definition
MonitorableObject.cpp:193
dunedaq::opmonlib::MonitorableObject::get_opmon_level
auto get_opmon_level() const noexcept
Definition
MonitorableObject.hpp:95
dunedaq::opmonlib::MonitorableObject::m_published_counter
std::atomic< metric_counter_t > m_published_counter
Definition
MonitorableObject.hpp:182
dunedaq::opmonlib::MonitorableObject::generate_opmon_data
virtual void generate_opmon_data()
Definition
MonitorableObject.hpp:135
dunedaq::opmonlib::MonitorableObject::facility_ptr_t
std::shared_ptr< opmonlib::OpMonFacility > facility_ptr_t
Definition
MonitorableObject.hpp:170
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:183
dunedaq::opmonlib::MonitorableObject::collect
opmon::MonitoringTreeInfo collect() noexcept
Definition
MonitorableObject.cpp:101
dunedaq::opmonlib::MonitorableObject::get_opmon_id
auto get_opmon_id() const noexcept
Definition
MonitorableObject.hpp:93
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:186
dunedaq::opmonlib::MonitorableObject::m_parent_id
dunedaq::opmon::OpMonId m_parent_id
Definition
MonitorableObject.hpp:172
dunedaq::opmonlib::MonitorableObject::m_error_counter
std::atomic< metric_counter_t > m_error_counter
Definition
MonitorableObject.hpp:184
dunedaq::opmonlib::MonitorableObject::operator=
MonitorableObject & operator=(const MonitorableObject &)=delete
dunedaq::opmonlib::MonitorableObject::ElementId
std::string ElementId
Definition
MonitorableObject.hpp:79
dunedaq::opmonlib::MonitorableObject::metric_counter_t
std::remove_const< const_metric_counter_t >::type metric_counter_t
Definition
MonitorableObject.hpp:181
dunedaq::opmonlib::MonitorableObject::m_opmon_level
std::atomic< OpMonLevel > m_opmon_level
Definition
MonitorableObject.hpp:173
dunedaq::opmonlib::MonitorableObject::set_opmon_level
void set_opmon_level(OpMonLevel) noexcept
Definition
MonitorableObject.cpp:180
dunedaq::opmonlib::MonitorableObject::m_facility
std::atomic< facility_ptr_t > m_facility
Definition
MonitorableObject.hpp:171
dunedaq::opmonlib::MonitorableObject::register_node
void register_node(ElementId name, NewNodePtr)
Definition
MonitorableObject.cpp:32
dunedaq::opmonlib::MonitorableObject::publish
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
Definition
MonitorableObject.cpp:58
dunedaq::opmonlib::MonitorableObject::time_counter_t
std::remove_const< const_metric_counter_t >::type time_counter_t
Definition
MonitorableObject.hpp:188
dunedaq::opmonlib::MonitorableObject::publishable_metric
static bool publishable_metric(OpMonLevel entry, OpMonLevel system) noexcept
Definition
MonitorableObject.hpp:97
dunedaq::opmonlib::MonitorableObject::m_opmon_name
ElementId m_opmon_name
Definition
MonitorableObject.hpp:174
dunedaq::opmonlib::MonitorableObject::m_node_mutex
std::mutex m_node_mutex
Definition
MonitorableObject.hpp:168
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:179
dunedaq::opmonlib::MonitorableObject::m_cpu_us_counter
std::atomic< time_counter_t > m_cpu_us_counter
Definition
MonitorableObject.hpp:189
dunedaq::opmonlib::MonitorableObject::m_nodes
std::map< ElementId, NodePtr > m_nodes
Definition
MonitorableObject.hpp:167
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:77
dunedaq::opmonlib::MonitorableObject::s_default_facility
static facility_ptr_t s_default_facility
Definition
MonitorableObject.hpp:176
dunedaq::opmonlib::MonitorableObject::OpMonManager
friend class OpMonManager
Definition
MonitorableObject.hpp:81
dunedaq::opmonlib::OpMonLink
Definition
MonitorableObject.hpp:193
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
ERS_DECLARE_ISSUE
#define ERS_DECLARE_ISSUE( namespace_name, class_name, message_, attributes)
Definition
macro.hpp:65
monitoring_tree.pb.h
dunedaq::opmonlib
Definition
BackendOpMonFacility.hpp:11
dunedaq::opmonlib::EntryOpMonLevel
EntryOpMonLevel
Definition
MonitorableObject.hpp:60
dunedaq::opmonlib::EntryOpMonLevel::kLowestPrioriry
@ kLowestPrioriry
Definition
MonitorableObject.hpp:64
dunedaq::opmonlib::EntryOpMonLevel::kEventDriven
@ kEventDriven
Definition
MonitorableObject.hpp:62
dunedaq::opmonlib::EntryOpMonLevel::kDefault
@ kDefault
Definition
MonitorableObject.hpp:63
dunedaq::opmonlib::EntryOpMonLevel::kTopPriority
@ kTopPriority
Definition
MonitorableObject.hpp:61
dunedaq::opmonlib::OpMonLevel
std::invoke_result< decltype(&dunedaq::confmodel::OpMonConf::get_level), dunedaq::confmodel::OpMonConf >::type OpMonLevel
Definition
MonitorableObject.hpp:52
dunedaq::opmonlib::to_level
constexpr auto to_level(T v)
Definition
MonitorableObject.hpp:68
dunedaq::opmonlib::SystemOpMonLevel
SystemOpMonLevel
Definition
MonitorableObject.hpp:55
dunedaq::opmonlib::SystemOpMonLevel::kAll
@ kAll
Definition
MonitorableObject.hpp:57
dunedaq::opmonlib::SystemOpMonLevel::kDisabled
@ kDisabled
Definition
MonitorableObject.hpp:56
dunedaq::opmonlib::CustomOrigin
std::map< std::string, std::string > CustomOrigin
Definition
Utils.hpp:53
dunedaq
Including Qt Headers.
Definition
module.cpp:16
dunedaq::EntryWithNoData
EntryWithNoData
Definition
MonitorableObject.hpp:37
dunedaq::v
default char v[0]
Definition
Serialization.hpp:266
opmonlib
Definition
__init__.py:1
Utils.hpp
Generated on
for DUNE-DAQ by
1.17.0