21 std::ostringstream oss;
24 for (
const auto& [key, value] :
labels_) {
28 oss << key <<
"=\"" << value <<
"\"";
36 std::ostringstream oss;
37 oss << std::fixed << std::setprecision(6);
42 oss <<
"# HELP " << p <<
"_tasks_submitted_total Total tasks submitted\n";
43 oss <<
"# TYPE " << p <<
"_tasks_submitted_total counter\n";
46 oss <<
"# HELP " << p <<
"_tasks_executed_total Total tasks executed\n";
47 oss <<
"# TYPE " << p <<
"_tasks_executed_total counter\n";
50 oss <<
"# HELP " << p <<
"_tasks_failed_total Total tasks failed\n";
51 oss <<
"# TYPE " << p <<
"_tasks_failed_total counter\n";
55 oss <<
"# HELP " << p <<
"_busy_time_nanoseconds_total Total busy time\n";
56 oss <<
"# TYPE " << p <<
"_busy_time_nanoseconds_total counter\n";
59 oss <<
"# HELP " << p <<
"_idle_time_nanoseconds_total Total idle time\n";
60 oss <<
"# TYPE " << p <<
"_idle_time_nanoseconds_total counter\n";
67 std::ostringstream oss;
68 oss << std::fixed << std::setprecision(6);
73 oss <<
"# HELP " << p <<
"_tasks_submitted_total Total tasks submitted\n";
74 oss <<
"# TYPE " << p <<
"_tasks_submitted_total counter\n";
77 oss <<
"# HELP " << p <<
"_tasks_executed_total Total tasks executed\n";
78 oss <<
"# TYPE " << p <<
"_tasks_executed_total counter\n";
81 oss <<
"# HELP " << p <<
"_tasks_failed_total Total tasks failed\n";
82 oss <<
"# TYPE " << p <<
"_tasks_failed_total counter\n";
86 oss <<
"# HELP " << p <<
"_enqueue_latency_us Enqueue latency in microseconds\n";
87 oss <<
"# TYPE " << p <<
"_enqueue_latency_us summary\n";
93 oss <<
"# HELP " << p <<
"_execution_latency_us Execution latency in microseconds\n";
94 oss <<
"# TYPE " << p <<
"_execution_latency_us summary\n";
100 oss <<
"# HELP " << p <<
"_wait_time_us Queue wait time in microseconds\n";
101 oss <<
"# TYPE " << p <<
"_wait_time_us summary\n";
107 oss <<
"# HELP " << p <<
"_throughput_1s Tasks per second (1s window)\n";
108 oss <<
"# TYPE " << p <<
"_throughput_1s gauge\n";
111 oss <<
"# HELP " << p <<
"_throughput_1m Tasks per second (1m window)\n";
112 oss <<
"# TYPE " << p <<
"_throughput_1m gauge\n";
116 oss <<
"# HELP " << p <<
"_queue_depth_current Current queue depth\n";
117 oss <<
"# TYPE " << p <<
"_queue_depth_current gauge\n";
120 oss <<
"# HELP " << p <<
"_queue_depth_peak Peak queue depth\n";
121 oss <<
"# TYPE " << p <<
"_queue_depth_peak gauge\n";
125 oss <<
"# HELP " << p <<
"_worker_utilization Overall worker utilization\n";
126 oss <<
"# TYPE " << p <<
"_worker_utilization gauge\n";
129 oss <<
"# HELP " << p <<
"_active_workers Number of active workers\n";
130 oss <<
"# TYPE " << p <<
"_active_workers gauge\n";
134 oss <<
"# HELP " << p <<
"_worker_utilization_per_worker Per-worker utilization\n";
135 oss <<
"# TYPE " << p <<
"_worker_utilization_per_worker gauge\n";
137 oss << p <<
"_worker_utilization_per_worker{worker=\"" << i <<
"\"";
139 for (
const auto& [key, value] :
labels_) {
140 oss <<
"," << key <<
"=\"" << value <<
"\"";
154 std::ostringstream oss;
155 oss << std::fixed << std::setprecision(2);
159 oss <<
" \"tasks\": {\n";
162 oss <<
" \"failed\": " << snapshot.
tasks_failed <<
"\n";
164 oss <<
" \"timing_ns\": {\n";
181 std::ostringstream oss;
182 oss << std::fixed << std::setprecision(2);
186 oss <<
" \"tasks\": {\n";
189 oss <<
" \"failed\": " << snapshot.
tasks_failed <<
"\n";
192 oss <<
" \"latency_us\": {\n";
204 oss <<
" \"throughput\": {\n";
209 oss <<
" \"queue\": {\n";
215 oss <<
" \"workers\": {\n";
218 oss <<
" \"per_worker_utilization\": [";
242 <<
"}},\"throughput\":{\"rate_1s\":" << snapshot.
throughput_1s
249 <<
",\"per_worker_utilization\":[";
267 std::ostringstream oss;
268 oss << std::fixed << std::setprecision(2);
270 oss <<
"[" <<
prefix_ <<
"] Metrics Summary:\n";
276 double utilization = (total > 0)
277 ? 100.0 *
static_cast<double>(snapshot.
total_busy_time_ns) /
static_cast<double>(total)
281 <<
" (utilization=" << utilization <<
"%)";
287 std::ostringstream oss;
288 oss << std::fixed << std::setprecision(2);
290 oss <<
"[" <<
prefix_ <<
"] Enhanced Metrics:\n";
295 oss <<
" Latency (P50/P90/P99):\n";
303 oss <<
" Throughput: " << snapshot.
throughput_1s <<
" ops/sec (1s), "
std::string export_base(const BaseSnapshot &snapshot) const override
Export base metrics snapshot.
std::string export_enhanced(const EnhancedSnapshot &snapshot) const override
Export enhanced metrics snapshot.
std::string export_enhanced(const EnhancedSnapshot &snapshot) const override
Export enhanced metrics snapshot.
std::string export_base(const BaseSnapshot &snapshot) const override
Export base metrics snapshot.
const std::map< std::string, std::string > & labels() const
Get all configured labels.
std::string prefix_
Metric name prefix.
std::map< std::string, std::string > labels_
Labels to attach to all metrics.
std::string export_base(const BaseSnapshot &snapshot) const override
Export base metrics snapshot.
std::string format_labels() const
Format labels for Prometheus output.
std::string export_enhanced(const EnhancedSnapshot &snapshot) const override
Export enhanced metrics snapshot.
Abstract interface for metrics export backends.
Base snapshot structure containing common metric values.
std::uint64_t tasks_executed
Total tasks successfully executed.
std::uint64_t tasks_failed
Total tasks that failed during execution.
std::uint64_t total_idle_time_ns
Total idle time across all workers in nanoseconds.
std::uint64_t total_busy_time_ns
Total busy time across all workers in nanoseconds.
std::uint64_t tasks_submitted
Total tasks submitted to the pool.
Enhanced snapshot with latency percentiles and throughput.
double throughput_1s
Tasks completed per second (1-second window).
std::size_t peak_queue_depth
Peak queue depth since last reset.
double worker_utilization
Overall worker utilization (0.0 - 1.0).
std::size_t active_workers
Number of active workers.
double enqueue_latency_p50_us
Median (P50) enqueue latency in microseconds.
std::uint64_t tasks_failed
Total tasks that failed during execution.
double enqueue_latency_p90_us
90th percentile enqueue latency in microseconds.
double wait_time_p90_us
90th percentile wait time in microseconds.
double execution_latency_p99_us
99th percentile execution latency in microseconds.
std::uint64_t tasks_executed
Total tasks successfully executed.
std::uint64_t tasks_submitted
Total tasks submitted to the pool.
double avg_queue_depth
Average queue depth over the sampling period.
double execution_latency_p50_us
Median execution latency in microseconds.
double wait_time_p50_us
Median wait time (queue time) in microseconds.
double throughput_1m
Tasks completed per second (1-minute window average).
double execution_latency_p90_us
90th percentile execution latency in microseconds.
std::size_t current_queue_depth
Current queue depth.
double wait_time_p99_us
99th percentile wait time in microseconds.
std::vector< double > per_worker_utilization
Per-worker utilization (0.0 - 1.0 each).
double enqueue_latency_p99_us
99th percentile enqueue latency in microseconds.