92 const std::string& name,
94 const std::unordered_map<std::string, std::string>& tags)
override {
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"}
112 common::Result<common::interfaces::metrics_snapshot>
get_metrics()
override {
115 common::interfaces::metrics_snapshot snapshot;
116 snapshot.source_id =
monitor_->get_name();
117 snapshot.capture_time = std::chrono::system_clock::now();
120 const auto& perf_metrics =
monitor_->get_profiler().get_all_metrics();
123 for (
const auto& perf : perf_metrics) {
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()));
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));
146 const auto& tagged_metrics =
monitor_->get_all_tagged_metrics();
147 for (
const auto&
metric : tagged_metrics) {
150 mv.tags = std::unordered_map<std::string, std::string>(
153 snapshot.metrics.push_back(std::move(mv));
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"}
169 common::Result<common::interfaces::health_check_result>
check_health()
override {
171 common::interfaces::health_check_result result;
172 result.timestamp = std::chrono::system_clock::now();
175 result.status = common::interfaces::health_status::healthy;
176 result.message =
"Performance monitor is operational";
178 result.status = common::interfaces::health_status::degraded;
179 result.message =
"Performance monitor is disabled";
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));