14#include <google/protobuf/util/time_util.h>
22#define TRACE_NAME "MonitorableObject"
41 if ( it -> second.expired() ) {
62 auto timestamp = google::protobuf::util::TimeUtil::GetCurrentTime();
64 auto start_time = std::chrono::high_resolution_clock::now();
74 if ( e.data().empty() ) {
79 *e.mutable_origin() = get_opmon_id() ;
81 *e.mutable_time() = timestamp;
86 m_facility.load()->publish(std::move(e));
87 ++m_published_counter;
88 }
catch (
const OpMonPublishFailure & e ) {
93 auto stop_time = std::chrono::high_resolution_clock::now();
95 auto duration = std::chrono::duration_cast<std::chrono::microseconds>( stop_time -
start_time );
96 m_cpu_us_counter += duration.count();
103 auto start_time = std::chrono::high_resolution_clock::now();
109 info.set_n_invalid_links(0);
115 auto cause_ptr = i.
cause();
116 while ( cause_ptr ) {
118 cause_ptr = cause_ptr->cause();
121 }
catch (
const std::exception & e ) {
132 if (
info.n_published_measurements() > 0) {
133 info.set_n_publishing_nodes(1);
142 unsigned int n_invalid_links = 0;
146 auto ptr = it->second.lock();
149 auto child_info = ptr->collect();
150 info.set_n_registered_nodes(
info.n_registered_nodes() + child_info.n_registered_nodes() );
151 info.set_n_publishing_nodes(
info.n_publishing_nodes() + child_info.n_publishing_nodes() );
152 info.set_n_invalid_links(
info.n_invalid_links() + child_info.n_invalid_links() );
153 info.set_n_published_measurements(
info.n_published_measurements() + child_info.n_published_measurements() );
154 info.set_n_ignored_measurements(
info.n_ignored_measurements() + child_info.n_ignored_measurements() );
155 info.set_n_errors(
info.n_errors() + child_info.n_errors() );
156 info.set_cpu_elapsed_time_us(
info.cpu_elapsed_time_us() + child_info.cpu_elapsed_time_us() );
160 if ( it->second.expired() ) {
168 info.set_n_invalid_links(
info.n_invalid_links() + n_invalid_links );
171 auto stop_time = std::chrono::high_resolution_clock::now();
173 auto duration = std::chrono::duration_cast<std::chrono::microseconds>( stop_time -
start_time );
174 info.set_clockwall_elapsed_time_us( duration.count() );
184 std::lock_guard<std::mutex> lock(m_node_mutex);
185 for (
const auto & [key,wp] : m_nodes ) {
188 p->set_opmon_level(l);
201 for (
const auto & [key,wp] :
m_nodes ) {
205 p->inherit_parent_properties(*
this);
std::shared_ptr< MonitorableObject > NewNodePtr
void inherit_parent_properties(const MonitorableObject &parent)
auto get_opmon_level() const noexcept
std::atomic< metric_counter_t > m_published_counter
virtual void generate_opmon_data()
std::atomic< metric_counter_t > m_ignored_counter
opmon::MonitoringTreeInfo collect() noexcept
auto get_opmon_id() const noexcept
dunedaq::opmon::OpMonId m_parent_id
std::atomic< metric_counter_t > m_error_counter
std::atomic< OpMonLevel > m_opmon_level
void set_opmon_level(OpMonLevel) noexcept
std::atomic< facility_ptr_t > m_facility
void register_node(ElementId name, NewNodePtr)
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept
static bool publishable_metric(OpMonLevel entry, OpMonLevel system) noexcept
std::atomic< time_counter_t > m_cpu_us_counter
std::map< ElementId, NodePtr > m_nodes
static facility_ptr_t s_default_facility
Base class for any user define issue.
const Issue * cause() const
return the cause Issue of this Issue
#define TLOG_DEBUG(lvl,...)
dunedaq::opmon::OpMonEntry to_entry(const google::protobuf::Message &m, const CustomOrigin &co)
std::invoke_result< decltype(&dunedaq::confmodel::OpMonConf::get_level), dunedaq::confmodel::OpMonConf >::type OpMonLevel
std::string to_string(const dunedaq::opmon::OpMonId &)
std::map< std::string, std::string > CustomOrigin
Cannot add TPSet with start_time
void warning(const Issue &issue)
void error(const Issue &issue)