Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::performance_monitor_adapter Class Reference

Adapter that wraps performance_monitor to implement IMonitor interface. More...

#include <performance_monitor_adapter.h>

Inheritance diagram for kcenon::monitoring::performance_monitor_adapter:
Inheritance graph
Collaboration diagram for kcenon::monitoring::performance_monitor_adapter:
Collaboration graph

Public Member Functions

 performance_monitor_adapter (std::shared_ptr< performance_monitor > monitor)
 Construct adapter with existing performance_monitor.
 
common::VoidResult record_metric (const std::string &name, double value) override
 Record a simple metric value.
 
common::VoidResult record_metric (const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags) override
 Record a metric with additional tags.
 
common::Result< common::interfaces::metrics_snapshot > get_metrics () override
 Get current metrics snapshot.
 
common::Result< common::interfaces::health_check_result > check_health () override
 Perform health check on the performance_monitor.
 
common::VoidResult reset () override
 Reset all metrics in the wrapped performance_monitor.
 
std::shared_ptr< performance_monitorget_wrapped_monitor () const
 Get the wrapped performance_monitor.
 

Private Attributes

std::shared_ptr< performance_monitormonitor_
 

Detailed Description

Adapter that wraps performance_monitor to implement IMonitor interface.

This adapter follows the Adapter design pattern to eliminate multiple inheritance. It provides a clean separation between the monitoring system's internal interface (metrics_collector) and the common system's standard interface (IMonitor).

Thread Safety:
Thread-safe if the wrapped performance_monitor is thread-safe

Example usage:

auto monitor = std::make_shared<performance_monitor>("my_monitor");
auto adapter = std::make_shared<performance_monitor_adapter>(monitor);
// Use through IMonitor interface
adapter->record_metric("requests_count", 42.0);
auto snapshot = adapter->get_metrics();

Definition at line 45 of file performance_monitor_adapter.h.

Constructor & Destructor Documentation

◆ performance_monitor_adapter()

kcenon::monitoring::performance_monitor_adapter::performance_monitor_adapter ( std::shared_ptr< performance_monitor > monitor)
inlineexplicit

Construct adapter with existing performance_monitor.

Parameters
monitorShared pointer to the performance_monitor to wrap
Exceptions
std::invalid_argumentif monitor is nullptr

Definition at line 52 of file performance_monitor_adapter.h.

53 : monitor_(std::move(monitor)) {
54 if (!monitor_) {
55 throw std::invalid_argument("performance_monitor cannot be null");
56 }
57 }

References monitor_.

Member Function Documentation

◆ check_health()

common::Result< common::interfaces::health_check_result > kcenon::monitoring::performance_monitor_adapter::check_health ( )
inlineoverride

Perform health check on the performance_monitor.

Returns
Result containing health check result @override

Definition at line 169 of file performance_monitor_adapter.h.

169 {
170 try {
171 common::interfaces::health_check_result result;
172 result.timestamp = std::chrono::system_clock::now();
173
174 if (monitor_->is_enabled()) {
175 result.status = common::interfaces::health_status::healthy;
176 result.message = "Performance monitor is operational";
177 } else {
178 result.status = common::interfaces::health_status::degraded;
179 result.message = "Performance monitor is disabled";
180 }
181
182 return common::ok(std::move(result));
183 } catch (const std::exception& e) {
184 common::interfaces::health_check_result result;
185 result.status = common::interfaces::health_status::unhealthy;
186 result.message = std::string("Health check failed: ") + e.what();
187 result.timestamp = std::chrono::system_clock::now();
188 return common::ok(std::move(result));
189 }
190 }

References monitor_.

◆ get_metrics()

common::Result< common::interfaces::metrics_snapshot > kcenon::monitoring::performance_monitor_adapter::get_metrics ( )
inlineoverride

Get current metrics snapshot.

Returns
Result containing metrics snapshot compatible with common::interfaces @override

Definition at line 112 of file performance_monitor_adapter.h.

112 {
113 try {
114 // Get all recorded metrics from the performance_monitor
115 common::interfaces::metrics_snapshot snapshot;
116 snapshot.source_id = monitor_->get_name();
117 snapshot.capture_time = std::chrono::system_clock::now();
118
119 // Get performance metrics from the monitor's profiler
120 const auto& perf_metrics = monitor_->get_profiler().get_all_metrics();
121
122 // Convert each performance_metrics (operation timing) into multiple metric_value entries
123 for (const auto& perf : perf_metrics) {
124 // Add various duration metrics as gauges
125 snapshot.add_metric(perf.operation_name + "_min_ns",
126 static_cast<double>(perf.min_duration.count()));
127 snapshot.add_metric(perf.operation_name + "_max_ns",
128 static_cast<double>(perf.max_duration.count()));
129 snapshot.add_metric(perf.operation_name + "_mean_ns",
130 static_cast<double>(perf.mean_duration.count()));
131 snapshot.add_metric(perf.operation_name + "_median_ns",
132 static_cast<double>(perf.median_duration.count()));
133 snapshot.add_metric(perf.operation_name + "_p95_ns",
134 static_cast<double>(perf.p95_duration.count()));
135 snapshot.add_metric(perf.operation_name + "_p99_ns",
136 static_cast<double>(perf.p99_duration.count()));
137
138 // Add count metrics as counters (conceptually)
139 snapshot.add_metric(perf.operation_name + "_call_count",
140 static_cast<double>(perf.call_count));
141 snapshot.add_metric(perf.operation_name + "_error_count",
142 static_cast<double>(perf.error_count));
143 }
144
145 // Add tagged metrics (counters, gauges, histograms with tags)
146 const auto& tagged_metrics = monitor_->get_all_tagged_metrics();
147 for (const auto& metric : tagged_metrics) {
148 // Create metric_value with tags directly
149 common::interfaces::metric_value mv(metric.name, metric.value);
150 mv.tags = std::unordered_map<std::string, std::string>(
151 metric.tags.begin(), metric.tags.end());
152 mv.timestamp = metric.timestamp;
153 snapshot.metrics.push_back(std::move(mv));
154 }
155
156 return common::ok(std::move(snapshot));
157 } catch (const std::exception& e) {
158 return common::Result<common::interfaces::metrics_snapshot>(
159 common::error_info{3, std::string("Exception in get_metrics: ") + e.what(), "performance_monitor_adapter"}
160 );
161 }
162 }

References monitor_, kcenon::monitoring::metric::name, kcenon::monitoring::metric::tags, kcenon::monitoring::metric::timestamp, and kcenon::monitoring::metric::value.

◆ get_wrapped_monitor()

std::shared_ptr< performance_monitor > kcenon::monitoring::performance_monitor_adapter::get_wrapped_monitor ( ) const
inline

Get the wrapped performance_monitor.

Returns
Shared pointer to the wrapped monitor

Definition at line 212 of file performance_monitor_adapter.h.

212 {
213 return monitor_;
214 }

References monitor_.

◆ record_metric() [1/2]

common::VoidResult kcenon::monitoring::performance_monitor_adapter::record_metric ( const std::string & name,
double value )
inlineoverride

Record a simple metric value.

Parameters
nameMetric name
valueMetric value
Returns
VoidResult indicating success or error @override
Note
performance_monitor is designed for operation timing, not arbitrary metrics. This method is a no-op for compatibility with IMonitor interface. Use start_operation() / scoped_timer for actual performance monitoring.

Definition at line 70 of file performance_monitor_adapter.h.

70 {
71 // performance_monitor is specifically designed for timing operations,
72 // not recording arbitrary metric values. For IMonitor compatibility,
73 // we accept the call but don't store it.
74 (void)name; // Suppress unused parameter warning
75 (void)value;
76 return common::ok();
77 }

◆ record_metric() [2/2]

common::VoidResult kcenon::monitoring::performance_monitor_adapter::record_metric ( const std::string & name,
double value,
const std::unordered_map< std::string, std::string > & tags )
inlineoverride

Record a metric with additional tags.

Parameters
nameMetric name
valueMetric value
tagsMetadata tags for the metric
Returns
VoidResult indicating success or error @override

Records the metric using the underlying performance_monitor's tag-aware counter recording. Tags are preserved and passed through to enable multi-dimensional metric analysis.

Definition at line 91 of file performance_monitor_adapter.h.

94 {
95 // Convert to tag_map and record as counter with tags
96 tag_map converted_tags(tags.begin(), tags.end());
97 auto result = monitor_->record_counter(name, value, converted_tags);
98 if (result.is_err()) {
99 const auto& err = result.error();
100 return common::VoidResult(
101 common::error_info{static_cast<int>(err.code), err.message, "performance_monitor_adapter"}
102 );
103 }
104 return common::ok();
105 }
std::unordered_map< std::string, std::string > tag_map
Type alias for metric tags/labels.

References monitor_.

◆ reset()

common::VoidResult kcenon::monitoring::performance_monitor_adapter::reset ( )
inlineoverride

Reset all metrics in the wrapped performance_monitor.

Returns
VoidResult indicating success or error @override

Definition at line 197 of file performance_monitor_adapter.h.

197 {
198 try {
199 monitor_->reset();
200 return common::ok();
201 } catch (const std::exception& e) {
202 return common::VoidResult(
203 common::error_info{4, std::string("Failed to reset monitor: ") + e.what(), "performance_monitor_adapter"}
204 );
205 }
206 }

References monitor_.

Member Data Documentation

◆ monitor_

std::shared_ptr<performance_monitor> kcenon::monitoring::performance_monitor_adapter::monitor_
private

The documentation for this class was generated from the following file: