19#include <kcenon/common/interfaces/monitoring_interface.h>
23namespace kcenon {
namespace monitoring {
52 static common::Result<std::shared_ptr<performance_monitor_adapter>>
create(
53 std::shared_ptr<performance_monitor> monitor) {
55 return common::Result<std::shared_ptr<performance_monitor_adapter>>::err(
58 "performance_monitor cannot be null",
59 "performance_monitor_adapter"});
61 return common::ok(std::shared_ptr<performance_monitor_adapter>(
74 throw std::invalid_argument(
"performance_monitor cannot be null");
89 common::VoidResult
record_metric(
const std::string& name,
double value)
override {
111 const std::string& name,
113 const std::unordered_map<std::string, std::string>& tags)
override {
115 tag_map converted_tags(tags.begin(), tags.end());
116 auto result =
monitor_->record_counter(name, value, converted_tags);
117 if (result.is_err()) {
118 const auto& err = result.error();
119 return common::VoidResult(
120 common::error_info{
static_cast<int>(err.code), err.message,
"performance_monitor_adapter"}
131 common::Result<common::interfaces::metrics_snapshot>
get_metrics()
override {
134 common::interfaces::metrics_snapshot snapshot;
135 snapshot.source_id =
monitor_->get_name();
136 snapshot.capture_time = std::chrono::system_clock::now();
139 const auto& perf_metrics =
monitor_->get_profiler().get_all_metrics();
142 for (
const auto& perf : perf_metrics) {
144 snapshot.add_metric(perf.operation_name +
"_min_ns",
145 static_cast<double>(perf.min_duration.count()));
146 snapshot.add_metric(perf.operation_name +
"_max_ns",
147 static_cast<double>(perf.max_duration.count()));
148 snapshot.add_metric(perf.operation_name +
"_mean_ns",
149 static_cast<double>(perf.mean_duration.count()));
150 snapshot.add_metric(perf.operation_name +
"_median_ns",
151 static_cast<double>(perf.median_duration.count()));
152 snapshot.add_metric(perf.operation_name +
"_p95_ns",
153 static_cast<double>(perf.p95_duration.count()));
154 snapshot.add_metric(perf.operation_name +
"_p99_ns",
155 static_cast<double>(perf.p99_duration.count()));
158 snapshot.add_metric(perf.operation_name +
"_call_count",
159 static_cast<double>(perf.call_count));
160 snapshot.add_metric(perf.operation_name +
"_error_count",
161 static_cast<double>(perf.error_count));
165 const auto& tagged_metrics =
monitor_->get_all_tagged_metrics();
166 for (
const auto&
metric : tagged_metrics) {
169 mv.tags = std::unordered_map<std::string, std::string>(
172 snapshot.metrics.push_back(std::move(mv));
175 return common::ok(std::move(snapshot));
176 }
catch (
const std::exception& e) {
177 return common::Result<common::interfaces::metrics_snapshot>(
178 common::error_info{3, std::string(
"Exception in get_metrics: ") + e.what(),
"performance_monitor_adapter"}
188 common::Result<common::interfaces::health_check_result>
check_health()
override {
190 common::interfaces::health_check_result result;
191 result.timestamp = std::chrono::system_clock::now();
194 result.status = common::interfaces::health_status::healthy;
195 result.message =
"Performance monitor is operational";
197 result.status = common::interfaces::health_status::degraded;
198 result.message =
"Performance monitor is disabled";
201 return common::ok(std::move(result));
202 }
catch (
const std::exception& e) {
203 common::interfaces::health_check_result result;
204 result.status = common::interfaces::health_status::unhealthy;
205 result.message = std::string(
"Health check failed: ") + e.what();
206 result.timestamp = std::chrono::system_clock::now();
207 return common::ok(std::move(result));
216 common::VoidResult
reset()
override {
220 }
catch (
const std::exception& e) {
221 return common::VoidResult(
222 common::error_info{4, std::string(
"Failed to reset monitor: ") + e.what(),
"performance_monitor_adapter"}
251 std::shared_ptr<performance_monitor> monitor) {
253 if (result.is_err()) {
254 return common::Result<std::shared_ptr<common::interfaces::IMonitor>>::err(
258 std::shared_ptr<common::interfaces::IMonitor>(result.value()));
common::Result< std::shared_ptr< common::interfaces::IMonitor > > make_monitor_adapter(std::shared_ptr< performance_monitor > monitor)
Factory function to create performance_monitor_adapter.
std::unordered_map< std::string, std::string > tag_map
Type alias for metric tags/labels.
Basic metric structure for interface compatibility.
std::chrono::system_clock::time_point timestamp
std::variant< double, int64_t, std::string > value
std::unordered_map< std::string, std::string > tags