Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
kcenon::thread::metrics::metrics_service Class Reference

Centralized metrics service for thread pool metrics management. More...

#include <metrics_service.h>

Collaboration diagram for kcenon::thread::metrics::metrics_service:
Collaboration graph

Public Member Functions

 metrics_service ()
 Default constructor.
 
 ~metrics_service ()=default
 Destructor.
 
 metrics_service (const metrics_service &)=delete
 
metrics_serviceoperator= (const metrics_service &)=delete
 
 metrics_service (metrics_service &&)=delete
 
metrics_serviceoperator= (metrics_service &&)=delete
 
void record_submission (std::size_t count=1)
 Record task submission(s).
 
void record_enqueue (std::size_t count=1)
 Record enqueue operation(s).
 
void record_enqueue_with_latency (std::chrono::nanoseconds latency, std::size_t count=1)
 Record enqueue operation with latency measurement.
 
void record_execution (std::uint64_t duration_ns, bool success)
 Record task execution completion.
 
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 record_idle_time (std::uint64_t duration_ns)
 Record idle time.
 
void record_queue_depth (std::size_t depth)
 Record current queue depth.
 
void record_worker_state (std::size_t worker_id, bool busy, std::uint64_t duration_ns=0)
 Update worker state for per-worker metrics.
 
void set_enhanced_metrics_enabled (bool enabled, std::size_t worker_count=0)
 Enable or disable enhanced metrics collection.
 
bool is_enhanced_metrics_enabled () const
 Check if enhanced metrics is enabled.
 
void update_worker_count (std::size_t count)
 Update the worker count for enhanced metrics.
 
void set_active_workers (std::size_t count)
 Set the number of active workers.
 
const ThreadPoolMetricsbasic_metrics () const noexcept
 Access basic metrics (read-only reference).
 
const EnhancedThreadPoolMetricsenhanced_metrics () const
 Access enhanced metrics (read-only reference).
 
EnhancedSnapshot enhanced_snapshot () const
 Get enhanced metrics snapshot.
 
std::shared_ptr< ThreadPoolMetricsget_basic_metrics () const noexcept
 Get the shared pointer to basic metrics.
 
void reset ()
 Reset all metrics to their initial state.
 

Private Attributes

std::shared_ptr< ThreadPoolMetricsbasic_metrics_
 Basic metrics collector.
 
std::shared_ptr< EnhancedThreadPoolMetricsenhanced_metrics_
 Enhanced metrics collector.
 
std::atomic< bool > enhanced_enabled_ {false}
 Flag indicating if enhanced metrics collection is enabled.
 
std::mutex init_mutex_
 Mutex for thread-safe enhanced metrics initialization.
 

Detailed Description

Centralized metrics service for thread pool metrics management.

This class provides a unified interface for metrics handling, consolidating metrics management that was previously duplicated between thread_pool and thread_worker classes.

Ownership Semantics

Thread Safety

All methods are thread-safe using lock-free atomic operations and internal synchronization.

Performance Characteristics

  • record_* overhead: < 100ns
  • Minimal memory footprint due to lazy initialization

Usage Example

// In thread_pool constructor
metrics_service_ = std::make_shared<metrics_service>();
// In thread_pool::set_enhanced_metrics_enabled
metrics_service_->set_enhanced_metrics_enabled(true, worker_count);
// In thread_worker (non-owning reference)
metrics_service_->record_execution(duration_ns, success);
See also
ThreadPoolMetrics
EnhancedThreadPoolMetrics

Definition at line 60 of file metrics_service.h.

Constructor & Destructor Documentation

◆ metrics_service() [1/3]

kcenon::thread::metrics::metrics_service::metrics_service ( )

Default constructor.

Creates the basic ThreadPoolMetrics immediately. EnhancedThreadPoolMetrics is lazily initialized when enabled.

Definition at line 11 of file metrics_service.cpp.

12 : basic_metrics_(std::make_shared<ThreadPoolMetrics>()) {
13}
std::shared_ptr< ThreadPoolMetrics > basic_metrics_
Basic metrics collector.

◆ ~metrics_service()

kcenon::thread::metrics::metrics_service::~metrics_service ( )
default

Destructor.

◆ metrics_service() [2/3]

kcenon::thread::metrics::metrics_service::metrics_service ( const metrics_service & )
delete

◆ metrics_service() [3/3]

kcenon::thread::metrics::metrics_service::metrics_service ( metrics_service && )
delete

Member Function Documentation

◆ basic_metrics()

const ThreadPoolMetrics & kcenon::thread::metrics::metrics_service::basic_metrics ( ) const
nodiscardnoexcept

Access basic metrics (read-only reference).

Returns
Reference to ThreadPoolMetrics.

Definition at line 112 of file metrics_service.cpp.

112 {
113 return *basic_metrics_;
114}

References basic_metrics_.

◆ enhanced_metrics()

const EnhancedThreadPoolMetrics & kcenon::thread::metrics::metrics_service::enhanced_metrics ( ) const
nodiscard

Access enhanced metrics (read-only reference).

Returns
Reference to EnhancedThreadPoolMetrics.
Exceptions
std::runtime_errorif enhanced metrics is not enabled.

Definition at line 116 of file metrics_service.cpp.

116 {
117 if (!enhanced_metrics_) {
118 throw std::runtime_error(
119 "Enhanced metrics is not enabled. "
120 "Call set_enhanced_metrics_enabled(true) first.");
121 }
122 return *enhanced_metrics_;
123}
std::shared_ptr< EnhancedThreadPoolMetrics > enhanced_metrics_
Enhanced metrics collector.

References enhanced_metrics_.

◆ enhanced_snapshot()

EnhancedSnapshot kcenon::thread::metrics::metrics_service::enhanced_snapshot ( ) const
nodiscard

Get enhanced metrics snapshot.

Returns
EnhancedSnapshot with all current metric values.

Returns empty snapshot if enhanced metrics is not enabled.

Definition at line 125 of file metrics_service.cpp.

125 {
126 if (!enhanced_enabled_.load(std::memory_order_acquire) || !enhanced_metrics_) {
127 return EnhancedSnapshot{};
128 }
129 return enhanced_metrics_->snapshot();
130}
std::atomic< bool > enhanced_enabled_
Flag indicating if enhanced metrics collection is enabled.

References enhanced_enabled_, and enhanced_metrics_.

◆ get_basic_metrics()

std::shared_ptr< ThreadPoolMetrics > kcenon::thread::metrics::metrics_service::get_basic_metrics ( ) const
nodiscardnoexcept

Get the shared pointer to basic metrics.

Returns
Shared pointer to ThreadPoolMetrics.

Used by thread_worker for direct metrics recording.

Definition at line 132 of file metrics_service.cpp.

132 {
133 return basic_metrics_;
134}

References basic_metrics_.

◆ is_enhanced_metrics_enabled()

bool kcenon::thread::metrics::metrics_service::is_enhanced_metrics_enabled ( ) const
nodiscard

Check if enhanced metrics is enabled.

Returns
True if enhanced metrics collection is enabled.

Definition at line 96 of file metrics_service.cpp.

96 {
97 return enhanced_enabled_.load(std::memory_order_acquire);
98}

References enhanced_enabled_.

◆ operator=() [1/2]

metrics_service & kcenon::thread::metrics::metrics_service::operator= ( const metrics_service & )
delete

◆ operator=() [2/2]

metrics_service & kcenon::thread::metrics::metrics_service::operator= ( metrics_service && )
delete

◆ record_enqueue()

void kcenon::thread::metrics::metrics_service::record_enqueue ( std::size_t count = 1)

Record enqueue operation(s).

Parameters
countNumber of tasks enqueued (default: 1).

Definition at line 25 of file metrics_service.cpp.

25 {
26 basic_metrics_->record_enqueue(count);
27}

References basic_metrics_.

◆ record_enqueue_with_latency()

void kcenon::thread::metrics::metrics_service::record_enqueue_with_latency ( std::chrono::nanoseconds latency,
std::size_t count = 1 )

Record enqueue operation with latency measurement.

Parameters
latencyTime taken to enqueue the task.
countNumber of tasks enqueued (default: 1).

Used when enhanced metrics are enabled to track enqueue latency histogram.

Definition at line 29 of file metrics_service.cpp.

31 {
32 basic_metrics_->record_enqueue(count);
33
34 if (enhanced_enabled_.load(std::memory_order_relaxed) && enhanced_metrics_) {
35 // Distribute latency across batch items for more accurate per-job tracking
36 auto per_item_latency = latency / static_cast<long>(count);
37 for (std::size_t i = 0; i < count; ++i) {
38 enhanced_metrics_->record_enqueue(per_item_latency);
39 }
40 }
41}
@ latency
Latency threshold exceeded.

References basic_metrics_, enhanced_enabled_, enhanced_metrics_, and kcenon::thread::latency.

◆ record_execution()

void kcenon::thread::metrics::metrics_service::record_execution ( std::uint64_t duration_ns,
bool success )

Record task execution completion.

Parameters
duration_nsExecution duration in nanoseconds.
successWhether the task completed successfully.

Definition at line 43 of file metrics_service.cpp.

43 {
44 basic_metrics_->record_execution(duration_ns, success);
45
46 if (enhanced_enabled_.load(std::memory_order_relaxed) && enhanced_metrics_) {
47 enhanced_metrics_->record_execution(
48 std::chrono::nanoseconds{duration_ns}, success);
49 }
50}

References basic_metrics_, enhanced_enabled_, enhanced_metrics_, and kcenon::thread::success.

◆ record_execution_with_wait_time()

void kcenon::thread::metrics::metrics_service::record_execution_with_wait_time ( std::chrono::nanoseconds duration,
std::chrono::nanoseconds wait_time,
bool success )

Record task execution with wait time tracking.

Parameters
durationExecution duration.
wait_timeTime the task waited in queue.
successWhether the task completed successfully.

Used when enhanced metrics are enabled.

Definition at line 52 of file metrics_service.cpp.

55 {
56 basic_metrics_->record_execution(
57 static_cast<std::uint64_t>(duration.count()), success);
58
59 if (enhanced_enabled_.load(std::memory_order_relaxed) && enhanced_metrics_) {
60 enhanced_metrics_->record_execution(duration, success);
61 enhanced_metrics_->record_wait_time(wait_time);
62 }
63}

References basic_metrics_, enhanced_enabled_, enhanced_metrics_, and kcenon::thread::success.

◆ record_idle_time()

void kcenon::thread::metrics::metrics_service::record_idle_time ( std::uint64_t duration_ns)

Record idle time.

Parameters
duration_nsIdle duration in nanoseconds.

Definition at line 65 of file metrics_service.cpp.

65 {
66 basic_metrics_->record_idle_time(duration_ns);
67}

References basic_metrics_.

◆ record_queue_depth()

void kcenon::thread::metrics::metrics_service::record_queue_depth ( std::size_t depth)

Record current queue depth.

Parameters
depthThe current number of tasks in the queue.

Definition at line 69 of file metrics_service.cpp.

69 {
70 if (enhanced_enabled_.load(std::memory_order_relaxed) && enhanced_metrics_) {
71 enhanced_metrics_->record_queue_depth(depth);
72 }
73}

References enhanced_enabled_, and enhanced_metrics_.

◆ record_submission()

void kcenon::thread::metrics::metrics_service::record_submission ( std::size_t count = 1)

Record task submission(s).

Parameters
countNumber of tasks submitted (default: 1).

Definition at line 15 of file metrics_service.cpp.

15 {
16 basic_metrics_->record_submission(count);
17
18 if (enhanced_enabled_.load(std::memory_order_relaxed) && enhanced_metrics_) {
19 for (std::size_t i = 0; i < count; ++i) {
20 enhanced_metrics_->record_submission();
21 }
22 }
23}

References basic_metrics_, enhanced_enabled_, and enhanced_metrics_.

◆ record_worker_state()

void kcenon::thread::metrics::metrics_service::record_worker_state ( std::size_t worker_id,
bool busy,
std::uint64_t duration_ns = 0 )

Update worker state for per-worker metrics.

Parameters
worker_idThe worker's identifier.
busyWhether the worker is currently busy.
duration_nsDuration in the previous state.

Definition at line 75 of file metrics_service.cpp.

78 {
79 if (enhanced_enabled_.load(std::memory_order_relaxed) && enhanced_metrics_) {
80 enhanced_metrics_->record_worker_state(worker_id, busy, duration_ns);
81 }
82}

References enhanced_enabled_, and enhanced_metrics_.

◆ reset()

void kcenon::thread::metrics::metrics_service::reset ( )

Reset all metrics to their initial state.

Resets both basic and enhanced metrics (if enabled).

Definition at line 136 of file metrics_service.cpp.

136 {
137 basic_metrics_->reset();
138 if (enhanced_metrics_) {
139 enhanced_metrics_->reset();
140 }
141}

References basic_metrics_, and enhanced_metrics_.

◆ set_active_workers()

void kcenon::thread::metrics::metrics_service::set_active_workers ( std::size_t count)

Set the number of active workers.

Parameters
countNumber of currently active workers.

Definition at line 106 of file metrics_service.cpp.

106 {
107 if (enhanced_metrics_) {
108 enhanced_metrics_->set_active_workers(count);
109 }
110}

References enhanced_metrics_.

◆ set_enhanced_metrics_enabled()

void kcenon::thread::metrics::metrics_service::set_enhanced_metrics_enabled ( bool enabled,
std::size_t worker_count = 0 )

Enable or disable enhanced metrics collection.

Parameters
enabledTrue to enable enhanced metrics.
worker_countNumber of workers to track (for initialization).

When enabled for the first time, initializes EnhancedThreadPoolMetrics. Subsequent calls only toggle the enabled flag.

Definition at line 84 of file metrics_service.cpp.

84 {
85 if (enabled && !enhanced_metrics_) {
86 std::scoped_lock<std::mutex> lock(init_mutex_);
87 // Double-check after acquiring lock
88 if (!enhanced_metrics_) {
89 enhanced_metrics_ = std::make_shared<EnhancedThreadPoolMetrics>(worker_count);
90 enhanced_metrics_->set_active_workers(worker_count);
91 }
92 }
93 enhanced_enabled_.store(enabled, std::memory_order_release);
94}
std::mutex init_mutex_
Mutex for thread-safe enhanced metrics initialization.

References enhanced_enabled_, enhanced_metrics_, and init_mutex_.

◆ update_worker_count()

void kcenon::thread::metrics::metrics_service::update_worker_count ( std::size_t count)

Update the worker count for enhanced metrics.

Parameters
countNew number of workers.

Call this when the thread pool scales up or down.

Definition at line 100 of file metrics_service.cpp.

100 {
101 if (enhanced_metrics_) {
102 enhanced_metrics_->update_worker_count(count);
103 }
104}

References enhanced_metrics_.

Member Data Documentation

◆ basic_metrics_

std::shared_ptr<ThreadPoolMetrics> kcenon::thread::metrics::metrics_service::basic_metrics_
private

Basic metrics collector.

Always initialized; provides core metrics functionality.

Definition at line 233 of file metrics_service.h.

Referenced by basic_metrics(), get_basic_metrics(), record_enqueue(), record_enqueue_with_latency(), record_execution(), record_execution_with_wait_time(), record_idle_time(), record_submission(), and reset().

◆ enhanced_enabled_

std::atomic<bool> kcenon::thread::metrics::metrics_service::enhanced_enabled_ {false}
private

◆ enhanced_metrics_

std::shared_ptr<EnhancedThreadPoolMetrics> kcenon::thread::metrics::metrics_service::enhanced_metrics_
private

◆ init_mutex_

std::mutex kcenon::thread::metrics::metrics_service::init_mutex_
mutableprivate

Mutex for thread-safe enhanced metrics initialization.

Definition at line 250 of file metrics_service.h.

Referenced by set_enhanced_metrics_enabled().


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