Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
metrics_service.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
12#pragma once
13
16
17#include <atomic>
18#include <chrono>
19#include <memory>
20#include <mutex>
21
23
61public:
69
73 ~metrics_service() = default;
74
75 // Non-copyable, non-movable for thread safety
80
81 // =========================================================================
82 // Recording Methods (called by thread_pool and thread_worker)
83 // =========================================================================
84
89 void record_submission(std::size_t count = 1);
90
95 void record_enqueue(std::size_t count = 1);
96
104 void record_enqueue_with_latency(std::chrono::nanoseconds latency, std::size_t count = 1);
105
111 void record_execution(std::uint64_t duration_ns, bool success);
112
122 std::chrono::nanoseconds duration,
123 std::chrono::nanoseconds wait_time,
124 bool success);
125
130 void record_idle_time(std::uint64_t duration_ns);
131
136 void record_queue_depth(std::size_t depth);
137
145 std::size_t worker_id,
146 bool busy,
147 std::uint64_t duration_ns = 0);
148
149 // =========================================================================
150 // Enhanced Metrics Control
151 // =========================================================================
152
161 void set_enhanced_metrics_enabled(bool enabled, std::size_t worker_count = 0);
162
167 [[nodiscard]] bool is_enhanced_metrics_enabled() const;
168
175 void update_worker_count(std::size_t count);
176
181 void set_active_workers(std::size_t count);
182
183 // =========================================================================
184 // Query Methods
185 // =========================================================================
186
191 [[nodiscard]] const ThreadPoolMetrics& basic_metrics() const noexcept;
192
198 [[nodiscard]] const EnhancedThreadPoolMetrics& enhanced_metrics() const;
199
206 [[nodiscard]] EnhancedSnapshot enhanced_snapshot() const;
207
214 [[nodiscard]] std::shared_ptr<ThreadPoolMetrics> get_basic_metrics() const noexcept;
215
216 // =========================================================================
217 // Management Methods
218 // =========================================================================
219
225 void reset();
226
227private:
234
241
245 std::atomic<bool> enhanced_enabled_{false};
246
250 mutable std::mutex init_mutex_;
251};
252
253} // namespace kcenon::thread::metrics
Enhanced thread pool metrics with histograms and percentiles.
Lightweight metrics container shared between thread_pool and workers.
Centralized metrics service for thread pool metrics management.
void record_execution_with_wait_time(std::chrono::nanoseconds duration, std::chrono::nanoseconds wait_time, bool success)
Record task execution with wait time tracking.
void set_enhanced_metrics_enabled(bool enabled, std::size_t worker_count=0)
Enable or disable enhanced metrics collection.
std::shared_ptr< EnhancedThreadPoolMetrics > enhanced_metrics_
Enhanced metrics collector.
std::mutex init_mutex_
Mutex for thread-safe enhanced metrics initialization.
void reset()
Reset all metrics to their initial state.
void record_execution(std::uint64_t duration_ns, bool success)
Record task execution completion.
void record_enqueue(std::size_t count=1)
Record enqueue operation(s).
metrics_service(const metrics_service &)=delete
void record_enqueue_with_latency(std::chrono::nanoseconds latency, std::size_t count=1)
Record enqueue operation with latency measurement.
std::shared_ptr< ThreadPoolMetrics > basic_metrics_
Basic metrics collector.
void record_worker_state(std::size_t worker_id, bool busy, std::uint64_t duration_ns=0)
Update worker state for per-worker metrics.
const ThreadPoolMetrics & basic_metrics() const noexcept
Access basic metrics (read-only reference).
void update_worker_count(std::size_t count)
Update the worker count for enhanced metrics.
void record_submission(std::size_t count=1)
Record task submission(s).
bool is_enhanced_metrics_enabled() const
Check if enhanced metrics is enabled.
void record_queue_depth(std::size_t depth)
Record current queue depth.
void record_idle_time(std::uint64_t duration_ns)
Record idle time.
std::atomic< bool > enhanced_enabled_
Flag indicating if enhanced metrics collection is enabled.
std::shared_ptr< ThreadPoolMetrics > get_basic_metrics() const noexcept
Get the shared pointer to basic metrics.
void set_active_workers(std::size_t count)
Set the number of active workers.
metrics_service(metrics_service &&)=delete
EnhancedSnapshot enhanced_snapshot() const
Get enhanced metrics snapshot.
metrics_service & operator=(const metrics_service &)=delete
const EnhancedThreadPoolMetrics & enhanced_metrics() const
Access enhanced metrics (read-only reference).
metrics_service & operator=(metrics_service &&)=delete
Enhanced metrics snapshot with latency percentiles and throughput.
@ latency
Latency threshold exceeded.
STL namespace.
Enhanced snapshot with latency percentiles and throughput.
Lightweight metrics container shared between thread_pool and workers.