12#ifndef RTCTK_COMPONENTFRAMEWORK_BUFFERMONITOR_HPP
13#define RTCTK_COMPONENTFRAMEWORK_BUFFERMONITOR_HPP
15#include <boost/accumulators/accumulators.hpp>
16#include <boost/accumulators/statistics/count.hpp>
17#include <boost/accumulators/statistics/max.hpp>
18#include <boost/accumulators/statistics/mean.hpp>
19#include <boost/accumulators/statistics/min.hpp>
20#include <boost/accumulators/statistics/stats.hpp>
27namespace ba = boost::accumulators;
36template <
typename ClockType = std::chrono::steady_clock>
47 const std::string&
desc,
48 const std::string&
prefix =
"")
49 : m_start_time(ClockType::now()), m_accumulator{} {
52 path =
"buffer_occupancy";
54 path =
prefix +
"/buffer_occupancy";
57 m_pc_occupancy_min_reg =
metrics.AddCounter(
60 m_pc_occupancy_mean_reg =
metrics.AddCounter(
63 m_pc_occupancy_max_reg =
metrics.AddCounter(
66 m_pc_occupancy_global_max_reg =
67 metrics.AddCounter(&m_pc_occupancy_global_max,
83 using namespace std::chrono_literals;
90 m_pc_occupancy_min.Store(ba::min(m_accumulator));
91 m_pc_occupancy_max.Store(ba::max(m_accumulator));
92 m_pc_occupancy_mean.Store(ba::mean(m_accumulator));
93 m_pc_occupancy_global_max.Store(
94 std::max(m_pc_occupancy_max.Load(), m_pc_occupancy_global_max.Load()));
122 res.
min = m_pc_occupancy_min.Load();
123 res.mean = m_pc_occupancy_mean.Load();
124 res.max = m_pc_occupancy_max.Load();
125 res.global_max = m_pc_occupancy_global_max.Load();
136 m_pc_occupancy_min.Store(0);
137 m_pc_occupancy_mean.Store(0);
138 m_pc_occupancy_max.Store(0);
139 m_pc_occupancy_global_max.Store(0);
143 typename ClockType::time_point m_start_time;
145 ba::accumulator_set<
double,
146 ba::stats<ba::tag::mean, ba::tag::min, ba::tag::max, ba::tag::count>>
149 perfc::CounterDouble m_pc_occupancy_min;
150 perfc::ScopedRegistration m_pc_occupancy_min_reg;
152 perfc::CounterDouble m_pc_occupancy_max;
153 perfc::ScopedRegistration m_pc_occupancy_max_reg;
155 perfc::CounterDouble m_pc_occupancy_global_max;
156 perfc::ScopedRegistration m_pc_occupancy_global_max_reg;
158 perfc::CounterDouble m_pc_occupancy_mean;
159 perfc::ScopedRegistration m_pc_occupancy_mean_reg;
Monitors min, mean and max occupation of a buffer and publishes them to OLDB.
Definition bufferMonitor.hpp:37
Result GetValue() const
Method to get the measured durations in microseconds.
Definition bufferMonitor.hpp:120
void Reset()
Method to reset the monitor.
Definition bufferMonitor.hpp:134
BufferMonitor(ComponentMetricsIf &metrics, const std::string &desc, const std::string &prefix="")
Construct instance.
Definition bufferMonitor.hpp:46
void Tick(size_t elements, size_t capacity) noexcept
Method to be called repeatedly from within the hot loop that should be measured.
Definition bufferMonitor.hpp:82
Component metrics interface.
Definition componentMetricsIf.hpp:85
Defines auxiliary information associated with each counter registered with ComponentMetricsIf.
Definition componentMetricsIf.hpp:46
Header file for ComponentMetricsIf.
Definition commandReplier.cpp:22
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
Definition bufferMonitor.hpp:103
size_t min
Definition bufferMonitor.hpp:104
size_t global_max
Definition bufferMonitor.hpp:107
size_t mean
Definition bufferMonitor.hpp:105
size_t max
Definition bufferMonitor.hpp:106