RTC Toolkit 4.0.1
Loading...
Searching...
No Matches
componentMetrics.hpp
Go to the documentation of this file.
1
12#ifndef RTCTK_COMPONENTFRAMEWORK_COMPONENTMETRICS_HPP
13#define RTCTK_COMPONENTFRAMEWORK_COMPONENTMETRICS_HPP
14
15#include <condition_variable>
16#include <optional>
17#include <thread>
18
19#include <log4cplus/logger.h>
20
23
25
26class RepositoryIf;
27class OldbIf;
28
44public:
54 ComponentMetricsConfigurator(std::weak_ptr<ComponentMetricsIf> service,
55 std::shared_ptr<RepositoryIf> repo,
56 DataPointPath root,
57 log4cplus::Logger logger,
58 std::chrono::seconds interval = std::chrono::seconds(10));
60
61private:
62 void ConfigurationLoop();
63
64 std::weak_ptr<ComponentMetricsIf> m_service;
65 std::shared_ptr<RepositoryIf> m_repo;
66 const DataPointPath m_root;
67 const std::chrono::seconds m_interval;
68
69 bool m_stop_flag;
70 std::condition_variable m_cond;
71 std::mutex m_mutex;
72 std::thread m_thread;
73 log4cplus::Logger m_logger;
74};
75
104public:
107
116 explicit ComponentMetrics(std::shared_ptr<OldbIf> oldb,
117 DataPointPath root,
118 log4cplus::Logger logger,
119 ComponentMetricsParams const& initial_params = {});
123 ~ComponentMetrics() noexcept;
124
125 void StartMonitoring() override;
126 void StopMonitoring() noexcept override;
127 bool IsMonitoring() noexcept override;
128 void UpdateParams(ComponentMetricsParams const& params) override;
129
130 [[nodiscard]] virtual perfc::ScopedRegistration
131 AddCounter(CounterVariant counter, CounterMetricInfo info) override;
132 bool RemoveCounter(CounterVariant counter) override;
133
134 void AddThread(pid_t pid, ThreadMetricInfo info) override;
135 void RemoveThread(pid_t thread) override;
136
137 struct Thread {
138 pid_t pid;
140 };
141
142private:
147 struct Parameters {
148 std::chrono::milliseconds counter_poll_interval = std::chrono::milliseconds(5000);
149 std::chrono::milliseconds thread_poll_interval = std::chrono::milliseconds(5000);
150 int thread_nice = 5;
151 };
152
153 struct MonitoringThread {
154 MonitoringThread(std::thread t) : stop_flag(false), id(0), thread(std::move(t)) {
155 }
159 bool stop_flag;
163 pid_t id;
164 std::thread thread;
165 };
166
173 void MonitoringLoop();
174
178 std::shared_ptr<OldbIf> m_oldb;
179 DataPointPath m_root;
180
188 std::recursive_mutex m_api_mtx;
189
195 std::mutex m_mon_mtx;
196
201 std::condition_variable m_cond;
202
206 Parameters m_params;
207
208 perfc::Register<CounterTypes, CounterMetricInfo> m_counters;
209 std::vector<Thread> m_threads;
210 std::optional<MonitoringThread> m_monitoring_thread;
211 log4cplus::Logger m_logger;
212};
213
214} // namespace rtctk::componentFramework
215
216#endif // RTCTK_COMPONENTFRAMEWORK_COMPONENTMETRICS_HPP
Configures ComponentMetrics from a runtime repository.
Definition: componentMetrics.hpp:43
~ComponentMetricsConfigurator() noexcept
Definition: componentMetrics.cpp:338
Component metrics interface.
Definition: componentMetricsIf.hpp:184
typename CounterTypes::CounterVariant CounterVariant
std::variant of pointers to each supported type in CounterTypes.
Definition: componentMetricsIf.hpp:243
perfc::CounterTypes< perfc::CounterDouble, perfc::CounterU64, perfc::CounterI64 > CounterTypes
Defines standard performance counter types:
Definition: componentMetricsIf.hpp:237
Implementation of ComponentMetricsIf.
Definition: componentMetrics.hpp:103
void StopMonitoring() noexcept override
Stop monitoring.
Definition: componentMetrics.cpp:390
void RemoveThread(pid_t thread) override
Remove previously registered thread.
Definition: componentMetrics.cpp:505
bool RemoveCounter(CounterVariant counter) override
Remove counter from register.
Definition: componentMetrics.cpp:470
virtual perfc::ScopedRegistration AddCounter(CounterVariant counter, CounterMetricInfo info) override
Add a counter to be included in component metrics, identified by its address, together with info to t...
Definition: componentMetrics.cpp:427
bool IsMonitoring() noexcept override
Query whether monitoring is active.
Definition: componentMetrics.cpp:406
void StartMonitoring() override
Start monitoring and publishing metrics.
Definition: componentMetrics.cpp:361
void UpdateParams(ComponentMetricsParams const &params) override
Updates parameters from params.
Definition: componentMetrics.cpp:412
void AddThread(pid_t pid, ThreadMetricInfo info) override
Add a thread to be included in component metrics.
Definition: componentMetrics.cpp:476
~ComponentMetrics() noexcept
Destructor will automatically stop monitoring.
Definition: componentMetrics.cpp:357
Defines auxiliary information associated with each counter registered with ComponentMetricsIf.
Definition: componentMetricsIf.hpp:46
This class provides a wrapper for a data point path.
Definition: dataPointPath.hpp:73
Defines auxiliary information associated with each thread registered with ComponentMetricsIf.
Definition: componentMetricsIf.hpp:85
Header file for ComponentMetricsIf.
Header file for DataPointPath.
Definition: commandReplier.cpp:22
Dynamic parameters for ComponentMetrics.
Definition: componentMetricsIf.hpp:118
Definition: componentMetrics.hpp:137
ThreadMetricInfo info
Definition: componentMetrics.hpp:139
pid_t pid
Definition: componentMetrics.hpp:138