Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
database::integrated::adapters::monitoring_adapter Class Reference

Monitoring adapter for database operations. More...

#include <monitoring_adapter.h>

Collaboration diagram for database::integrated::adapters::monitoring_adapter:
Collaboration graph

Public Member Functions

 monitoring_adapter (const db_monitoring_config &config, monitoring_backend_type backend_type=monitoring_backend_type::auto_select)
 Construct monitoring adapter with configuration.
 
 ~monitoring_adapter ()
 Destructor - ensures graceful shutdown.
 
 monitoring_adapter (const monitoring_adapter &)=delete
 
monitoring_adapteroperator= (const monitoring_adapter &)=delete
 
 monitoring_adapter (monitoring_adapter &&) noexcept
 
monitoring_adapteroperator= (monitoring_adapter &&)=delete
 
common::VoidResult initialize ()
 Initialize monitoring system.
 
common::VoidResult shutdown ()
 Shutdown monitoring system.
 
bool is_initialized () const
 Check if monitoring is initialized.
 
common::VoidResult record_metric (const std::string &name, double value)
 Record a metric value.
 
common::VoidResult record_metric (const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags)
 Record a metric value with tags.
 
common::Result< backends::metrics_snapshotget_metrics ()
 Get current metrics snapshot.
 
common::Result< backends::health_check_resultcheck_health ()
 Perform health check.
 
common::VoidResult reset ()
 Reset all metrics.
 
void record_query_execution (std::chrono::microseconds duration, bool success)
 Record query execution.
 
void record_connection_acquired ()
 Record connection acquisition.
 
void record_connection_released ()
 Record connection release.
 
void update_pool_stats (std::size_t active, std::size_t idle, std::size_t total)
 Update connection pool statistics.
 
void record_transaction_begin ()
 Record transaction begin.
 
void record_transaction_commit ()
 Record transaction commit.
 
void record_transaction_rollback ()
 Record transaction rollback.
 
common::Result< database_metricsget_database_metrics ()
 Get database-specific metrics.
 
std::string export_prometheus_metrics ()
 Export metrics in Prometheus format.
 

Static Private Member Functions

static std::unique_ptr< backends::monitoring_backendcreate_backend (const db_monitoring_config &config, monitoring_backend_type backend_type)
 Create appropriate backend based on type.
 

Private Attributes

const db_monitoring_configconfig_
 
std::unique_ptr< backends::monitoring_backendbackend_
 Monitoring backend implementation.
 

Detailed Description

Monitoring adapter for database operations.

Provides comprehensive monitoring capabilities with runtime backend selection. No longer uses conditional compilation - backend is selected at runtime.

Features:

  • Connection pool monitoring
  • Query performance tracking with percentiles
  • Transaction lifecycle tracking
  • Health checks with configurable thresholds
  • Prometheus metrics export

Thread Safety: Thread-safe with internal synchronization

Examples
/home/runner/work/database_system/database_system/database/integrated/core/database_coordinator.h.

Definition at line 156 of file monitoring_adapter.h.

Constructor & Destructor Documentation

◆ monitoring_adapter() [1/3]

database::integrated::adapters::monitoring_adapter::monitoring_adapter ( const db_monitoring_config & config,
monitoring_backend_type backend_type = monitoring_backend_type::auto_select )
explicit

Construct monitoring adapter with configuration.

Parameters
configMonitoring configuration
backend_typeBackend type to use (default: auto_select)
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 63 of file monitoring_adapter.cpp.

66 : config_(config)
68{
69}
static std::unique_ptr< backends::monitoring_backend > create_backend(const db_monitoring_config &config, monitoring_backend_type backend_type)
Create appropriate backend based on type.
std::unique_ptr< backends::monitoring_backend > backend_
Monitoring backend implementation.
backend_type
Database backend type enumeration.

◆ ~monitoring_adapter()

database::integrated::adapters::monitoring_adapter::~monitoring_adapter ( )

Destructor - ensures graceful shutdown.

Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 71 of file monitoring_adapter.cpp.

72{
73 if (backend_ && backend_->is_initialized())
74 {
75 backend_->shutdown();
76 }
77}

References backend_.

◆ monitoring_adapter() [2/3]

database::integrated::adapters::monitoring_adapter::monitoring_adapter ( const monitoring_adapter & )
delete

◆ monitoring_adapter() [3/3]

database::integrated::adapters::monitoring_adapter::monitoring_adapter ( monitoring_adapter && )
defaultnoexcept

Member Function Documentation

◆ check_health()

common::Result< backends::health_check_result > database::integrated::adapters::monitoring_adapter::check_health ( )

Perform health check.

Returns
Health check result
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 146 of file monitoring_adapter.cpp.

147{
148 if (!backend_)
149 {
151 common::error_info{ -1, "Backend not initialized", "" });
152 }
153
154 return backend_->check_health();
155}

References backend_.

Referenced by test_api_availability_health().

Here is the caller graph for this function:

◆ create_backend()

std::unique_ptr< backends::monitoring_backend > database::integrated::adapters::monitoring_adapter::create_backend ( const db_monitoring_config & config,
monitoring_backend_type backend_type )
staticprivate

Create appropriate backend based on type.

Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 26 of file monitoring_adapter.cpp.

29{
30 switch (backend_type)
31 {
33 // Prefer system_monitoring_backend if available
34#ifdef HAVE_SYSTEM_MONITORING_BACKEND
35 return std::make_unique<backends::system_monitoring_backend>(config);
36#else
37 return std::make_unique<backends::fallback_monitoring_backend>(config);
38#endif
39
41#ifdef HAVE_SYSTEM_MONITORING_BACKEND
42 return std::make_unique<backends::system_monitoring_backend>(config);
43#else
44 // Fallback to fallback backend if system backend not available
45 return std::make_unique<backends::fallback_monitoring_backend>(config);
46#endif
47
49 return std::make_unique<backends::fallback_monitoring_backend>(config);
50
52 return std::make_unique<backends::null_monitoring_backend>(config);
53
54 default:
55 return std::make_unique<backends::fallback_monitoring_backend>(config);
56 }
57}
@ null
No-op backend (discard all metrics)
@ auto_select
Automatically select best available backend.
@ system
Use monitoring_system (requires HAVE_SYSTEM_MONITORING_BACKEND)

References database::integrated::adapters::auto_select, database::integrated::adapters::fallback, database::integrated::adapters::null, and database::integrated::adapters::system.

◆ export_prometheus_metrics()

std::string database::integrated::adapters::monitoring_adapter::export_prometheus_metrics ( )

Export metrics in Prometheus format.

Returns
Prometheus-formatted metrics string
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 239 of file monitoring_adapter.cpp.

240{
241 if (!backend_)
242 {
243 return "# Backend not initialized\n";
244 }
245
246 return backend_->export_prometheus_metrics();
247}

References backend_.

Referenced by test_api_availability_prometheus().

Here is the caller graph for this function:

◆ get_database_metrics()

common::Result< database_metrics > database::integrated::adapters::monitoring_adapter::get_database_metrics ( )

Get database-specific metrics.

Returns
Database metrics on success
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 228 of file monitoring_adapter.cpp.

229{
230 if (!backend_)
231 {
233 common::error_info{ -1, "Backend not initialized", "" });
234 }
235
236 return backend_->get_database_metrics();
237}

References backend_.

Referenced by test_api_availability_metrics().

Here is the caller graph for this function:

◆ get_metrics()

common::Result< backends::metrics_snapshot > database::integrated::adapters::monitoring_adapter::get_metrics ( )

Get current metrics snapshot.

Returns
Metrics snapshot on success
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 135 of file monitoring_adapter.cpp.

136{
137 if (!backend_)
138 {
140 common::error_info{ -1, "Backend not initialized", "" });
141 }
142
143 return backend_->get_metrics();
144}

References backend_.

Referenced by test_api_availability_metrics().

Here is the caller graph for this function:

◆ initialize()

common::VoidResult database::integrated::adapters::monitoring_adapter::initialize ( )

Initialize monitoring system.

Returns
Ok on success, error otherwise
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 81 of file monitoring_adapter.cpp.

82{
83 if (!backend_)
84 {
85 return common::VoidResult(
86 common::error_info{ -1, "Backend not created", "" });
87 }
88
89 return backend_->initialize();
90}
Result< std::monostate > VoidResult

References initialize().

Referenced by initialize().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_initialized()

bool database::integrated::adapters::monitoring_adapter::is_initialized ( ) const

Check if monitoring is initialized.

Returns
true if initialized
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 102 of file monitoring_adapter.cpp.

103{
104 return backend_ && backend_->is_initialized();
105}

References backend_.

◆ operator=() [1/2]

monitoring_adapter & database::integrated::adapters::monitoring_adapter::operator= ( const monitoring_adapter & )
delete

◆ operator=() [2/2]

monitoring_adapter & database::integrated::adapters::monitoring_adapter::operator= ( monitoring_adapter && )
delete

◆ record_connection_acquired()

void database::integrated::adapters::monitoring_adapter::record_connection_acquired ( )

Record connection acquisition.

Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 180 of file monitoring_adapter.cpp.

181{
182 if (backend_)
183 {
184 backend_->record_connection_acquired();
185 }
186}

References backend_.

Referenced by test_api_availability_basic(), test_destructor_safety(), test_move_semantics(), and test_multiple_instances().

Here is the caller graph for this function:

◆ record_connection_released()

void database::integrated::adapters::monitoring_adapter::record_connection_released ( )

Record connection release.

Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 188 of file monitoring_adapter.cpp.

189{
190 if (backend_)
191 {
192 backend_->record_connection_released();
193 }
194}

References backend_.

Referenced by test_api_availability_basic().

Here is the caller graph for this function:

◆ record_metric() [1/2]

common::VoidResult database::integrated::adapters::monitoring_adapter::record_metric ( const std::string & name,
double value )

Record a metric value.

Parameters
nameMetric name
valueMetric value
Returns
Ok on success
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 111 of file monitoring_adapter.cpp.

112{
113 if (!backend_)
114 {
115 return common::VoidResult(
116 common::error_info{ -1, "Backend not initialized", "" });
117 }
118
119 return backend_->record_metric(name, value);
120}

References backend_.

◆ record_metric() [2/2]

common::VoidResult database::integrated::adapters::monitoring_adapter::record_metric ( const std::string & name,
double value,
const std::unordered_map< std::string, std::string > & tags )

Record a metric value with tags.

Parameters
nameMetric name
valueMetric value
tagsMetric tags/labels
Returns
Ok on success

Definition at line 122 of file monitoring_adapter.cpp.

125{
126 if (!backend_)
127 {
128 return common::VoidResult(
129 common::error_info{ -1, "Backend not initialized", "" });
130 }
131
132 return backend_->record_metric(name, value, tags);
133}

References backend_.

◆ record_query_execution()

void database::integrated::adapters::monitoring_adapter::record_query_execution ( std::chrono::microseconds duration,
bool success )

Record query execution.

Parameters
durationQuery execution duration
successWhether query succeeded
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 172 of file monitoring_adapter.cpp.

173{
174 if (backend_)
175 {
176 backend_->record_query_execution(duration, success);
177 }
178}

References backend_, and database::success.

Referenced by test_api_availability_basic().

Here is the caller graph for this function:

◆ record_transaction_begin()

void database::integrated::adapters::monitoring_adapter::record_transaction_begin ( )

Record transaction begin.

Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 204 of file monitoring_adapter.cpp.

205{
206 if (backend_)
207 {
208 backend_->record_transaction_begin();
209 }
210}

References backend_.

Referenced by test_api_availability_basic().

Here is the caller graph for this function:

◆ record_transaction_commit()

void database::integrated::adapters::monitoring_adapter::record_transaction_commit ( )

Record transaction commit.

Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 212 of file monitoring_adapter.cpp.

213{
214 if (backend_)
215 {
216 backend_->record_transaction_commit();
217 }
218}

References backend_.

Referenced by test_api_availability_basic().

Here is the caller graph for this function:

◆ record_transaction_rollback()

void database::integrated::adapters::monitoring_adapter::record_transaction_rollback ( )

Record transaction rollback.

Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 220 of file monitoring_adapter.cpp.

221{
222 if (backend_)
223 {
224 backend_->record_transaction_rollback();
225 }
226}

References backend_.

Referenced by test_api_availability_basic().

Here is the caller graph for this function:

◆ reset()

common::VoidResult database::integrated::adapters::monitoring_adapter::reset ( )

Reset all metrics.

Returns
Ok on success
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 157 of file monitoring_adapter.cpp.

158{
159 if (!backend_)
160 {
161 return common::VoidResult(
162 common::error_info{ -1, "Backend not initialized", "" });
163 }
164
165 return backend_->reset();
166}

References backend_.

Referenced by test_api_availability_reset().

Here is the caller graph for this function:

◆ shutdown()

common::VoidResult database::integrated::adapters::monitoring_adapter::shutdown ( )

Shutdown monitoring system.

Returns
Ok on success, error otherwise
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 92 of file monitoring_adapter.cpp.

93{
94 if (!backend_)
95 {
96 return common::ok();
97 }
98
99 return backend_->shutdown();
100}
VoidResult ok()

References backend_, and common::ok().

Here is the call graph for this function:

◆ update_pool_stats()

void database::integrated::adapters::monitoring_adapter::update_pool_stats ( std::size_t active,
std::size_t idle,
std::size_t total )

Update connection pool statistics.

Parameters
activeNumber of active connections
idleNumber of idle connections
totalTotal pool size
Examples
/home/runner/work/database_system/database_system/database/integrated/adapters/monitoring_adapter.h.

Definition at line 196 of file monitoring_adapter.cpp.

197{
198 if (backend_)
199 {
200 backend_->update_pool_stats(active, idle, total);
201 }
202}

References backend_.

Referenced by test_api_availability_basic().

Here is the caller graph for this function:

Member Data Documentation

◆ backend_

◆ config_

const db_monitoring_config& database::integrated::adapters::monitoring_adapter::config_
private

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