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

Monitoring backend using monitoring_system library. More...

#include <system_monitoring_backend.h>

Inheritance diagram for database::integrated::adapters::backends::system_monitoring_backend:
Inheritance graph
Collaboration diagram for database::integrated::adapters::backends::system_monitoring_backend:
Collaboration graph

Public Member Functions

 system_monitoring_backend (const db_monitoring_config &config)
 Construct system monitoring backend.
 
 ~system_monitoring_backend () override
 
 system_monitoring_backend (const system_monitoring_backend &)=delete
 
system_monitoring_backendoperator= (const system_monitoring_backend &)=delete
 
 system_monitoring_backend (system_monitoring_backend &&)=delete
 
system_monitoring_backendoperator= (system_monitoring_backend &&)=delete
 
common::VoidResult initialize () override
 Initialize the monitoring backend.
 
common::VoidResult shutdown () override
 Shutdown the monitoring backend gracefully.
 
bool is_initialized () const override
 Check if backend is initialized.
 
common::VoidResult record_metric (const std::string &name, double value) override
 Record a metric value.
 
common::VoidResult record_metric (const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags) override
 Record a metric value with tags.
 
common::Result< metrics_snapshotget_metrics () override
 Get current metrics snapshot.
 
common::Result< health_check_resultcheck_health () override
 Perform health check.
 
common::VoidResult reset () override
 Reset all metrics.
 
void record_query_execution (std::chrono::microseconds duration, bool success) override
 Record query execution.
 
void record_connection_acquired () override
 Record connection acquisition.
 
void record_connection_released () override
 Record connection release.
 
void update_pool_stats (std::size_t active, std::size_t idle, std::size_t total) override
 Update connection pool statistics.
 
void record_transaction_begin () override
 Record transaction begin.
 
void record_transaction_commit () override
 Record transaction commit.
 
void record_transaction_rollback () override
 Record transaction rollback.
 
common::Result< database_metricsget_database_metrics () override
 Get database-specific metrics.
 
std::string export_prometheus_metrics () override
 Export metrics in Prometheus format.
 
- Public Member Functions inherited from database::integrated::adapters::backends::monitoring_backend
virtual ~monitoring_backend ()=default
 

Private Member Functions

database_metrics convert_to_database_metrics (const kcenon::monitoring::metrics_snapshot &snapshot)
 Convert monitoring_system metrics to database_metrics format.
 
void calculate_derived_metrics ()
 Calculate derived metrics from collected data.
 

Private Attributes

const db_monitoring_configconfig_
 
bool initialized_
 
std::mutex mutex_
 
std::chrono::steady_clock::time_point start_time_
 
std::unique_ptr< kcenon::monitoring::performance_monitor > monitor_
 
database_metrics current_metrics_
 
std::vector< std::chrono::microseconds > recent_query_latencies_
 
std::size_t max_latency_samples_
 
std::size_t active_connections_
 
std::size_t idle_connections_
 
std::size_t total_connections_
 
std::size_t active_transactions_
 

Detailed Description

Monitoring backend using monitoring_system library.

This backend uses the kcenon/monitoring_system for comprehensive metrics collection. Provides performance profiling, Prometheus export, and health monitoring. Requires monitoring_system to be available at compile time.

Definition at line 53 of file system_monitoring_backend.h.

Constructor & Destructor Documentation

◆ system_monitoring_backend() [1/3]

database::integrated::adapters::backends::system_monitoring_backend::system_monitoring_backend ( const db_monitoring_config & config)
explicit

Construct system monitoring backend.

Parameters
configMonitoring configuration

Definition at line 37 of file system_monitoring_backend.cpp.

38 : config_(config)
39 , initialized_(false)
46{
48}

References max_latency_samples_, and recent_query_latencies_.

◆ ~system_monitoring_backend()

database::integrated::adapters::backends::system_monitoring_backend::~system_monitoring_backend ( )
override

Definition at line 50 of file system_monitoring_backend.cpp.

51{
52 if (initialized_)
53 {
54 shutdown();
55 }
56}
common::VoidResult shutdown() override
Shutdown the monitoring backend gracefully.

References initialized_, and shutdown().

Here is the call graph for this function:

◆ system_monitoring_backend() [2/3]

database::integrated::adapters::backends::system_monitoring_backend::system_monitoring_backend ( const system_monitoring_backend & )
delete

◆ system_monitoring_backend() [3/3]

database::integrated::adapters::backends::system_monitoring_backend::system_monitoring_backend ( system_monitoring_backend && )
delete

Member Function Documentation

◆ calculate_derived_metrics()

void database::integrated::adapters::backends::system_monitoring_backend::calculate_derived_metrics ( )
private

Calculate derived metrics from collected data.

Definition at line 524 of file system_monitoring_backend.cpp.

525{
526 if (recent_query_latencies_.empty())
527 {
528 return;
529 }
530
531 // Create sorted copy for percentile calculation
532 auto sorted_latencies = recent_query_latencies_;
533 std::sort(sorted_latencies.begin(), sorted_latencies.end());
534
535 // Calculate min/max
536 current_metrics_.min_query_latency = sorted_latencies.front();
537 current_metrics_.max_query_latency = sorted_latencies.back();
538
539 // Calculate average
540 auto total_latency = std::accumulate(
541 sorted_latencies.begin(),
542 sorted_latencies.end(),
543 std::chrono::microseconds(0));
544 current_metrics_.avg_query_latency = total_latency / sorted_latencies.size();
545
546 // Calculate percentiles
547 auto calc_percentile = [&sorted_latencies](double percentile) -> std::chrono::microseconds {
548 if (sorted_latencies.empty())
549 return std::chrono::microseconds(0);
550
551 std::size_t index =
552 static_cast<std::size_t>((percentile / 100.0) * (sorted_latencies.size() - 1));
553 return sorted_latencies[index];
554 };
555
556 current_metrics_.p95_query_latency = calc_percentile(95.0);
557 current_metrics_.p99_query_latency = calc_percentile(99.0);
558}
field_constraint index(const std::string &name="")
Definition entity.h:306
std::chrono::microseconds p99_query_latency
99th percentile latency
std::chrono::microseconds p95_query_latency
95th percentile latency
std::chrono::microseconds max_query_latency
Maximum query latency.
std::chrono::microseconds avg_query_latency
Average query latency.
std::chrono::microseconds min_query_latency
Minimum query latency.

References database::integrated::adapters::database_metrics::avg_query_latency, current_metrics_, database::integrated::adapters::database_metrics::max_query_latency, database::integrated::adapters::database_metrics::min_query_latency, database::integrated::adapters::database_metrics::p95_query_latency, database::integrated::adapters::database_metrics::p99_query_latency, and recent_query_latencies_.

Referenced by record_query_execution().

Here is the caller graph for this function:

◆ check_health()

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

Perform health check.

Returns
Health check result

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 210 of file system_monitoring_backend.cpp.

211{
212 if (!initialized_)
213 {
214 return make_error_result<health_check_result>("Monitoring backend not initialized");
215 }
216
217 std::lock_guard<std::mutex> lock(mutex_);
218
219 health_check_result result;
220 result.status = health_status::healthy;
221 result.message = "Database system healthy";
222
223 // Connection pool health check
225 {
226 result.status = health_status::degraded;
227 result.message = "Connection pool usage critical";
228 result.metadata["connection_usage"] =
229 std::to_string(current_metrics_.connection_usage_percent) + "%";
230 }
231
232 // Query latency health check
234 {
235 result.status = health_status::degraded;
236 result.message = "Query latency critical";
237 result.metadata["avg_latency_us"] = std::to_string(current_metrics_.avg_query_latency.count());
238 }
239
240 // Query success rate health check
242 {
243 result.status = health_status::unhealthy;
244 result.message = "Query success rate low";
245 result.metadata["success_rate"] = std::to_string(current_metrics_.query_success_rate);
246 }
247
248 return result;
249}
double connection_usage_percent
Percentage of connections in use.
std::uint64_t total_queries
Total queries executed.
std::chrono::milliseconds query_latency_warning
Warn when query latency exceeds this threshold.
double connection_usage_warning_threshold
Warn when connection pool usage exceeds this percentage (0.0-1.0)

References database::integrated::adapters::database_metrics::avg_query_latency, config_, database::integrated::adapters::database_metrics::connection_usage_percent, database::integrated::db_monitoring_config::connection_usage_warning_threshold, current_metrics_, database::integrated::adapters::backends::degraded, database::integrated::adapters::backends::healthy, initialized_, database::integrated::adapters::backends::health_check_result::message, database::integrated::adapters::backends::health_check_result::metadata, mutex_, database::integrated::db_monitoring_config::query_latency_warning, database::integrated::adapters::database_metrics::query_success_rate, database::integrated::adapters::backends::health_check_result::status, database::integrated::adapters::database_metrics::total_queries, and database::integrated::adapters::backends::unhealthy.

◆ convert_to_database_metrics()

database_metrics database::integrated::adapters::backends::system_monitoring_backend::convert_to_database_metrics ( const kcenon::monitoring::metrics_snapshot & snapshot)
private

Convert monitoring_system metrics to database_metrics format.

Definition at line 560 of file system_monitoring_backend.cpp.

562{
563 database_metrics db_metrics;
564
565 // Extract metrics from snapshot
566 for (const auto& metric : snapshot.metrics)
567 {
568 const auto& name = metric.name;
569 const auto value = metric.value;
570
571 if (name == "query_execution_count")
572 {
573 db_metrics.total_queries = static_cast<std::uint64_t>(value);
574 }
575 // Add more metric mappings as needed
576 }
577
578 return db_metrics;
579}

References database::integrated::adapters::database_metrics::total_queries.

◆ export_prometheus_metrics()

std::string database::integrated::adapters::backends::system_monitoring_backend::export_prometheus_metrics ( )
overridevirtual

Export metrics in Prometheus format.

Returns
Prometheus-formatted metrics string

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 434 of file system_monitoring_backend.cpp.

435{
436 std::lock_guard<std::mutex> lock(mutex_);
437
438 std::ostringstream ss;
439
440 // Connection metrics
441 ss << "# HELP db_connections_active Number of active database connections\n";
442 ss << "# TYPE db_connections_active gauge\n";
443 ss << "db_connections_active " << current_metrics_.active_connections << "\n";
444
445 ss << "# HELP db_connections_idle Number of idle database connections\n";
446 ss << "# TYPE db_connections_idle gauge\n";
447 ss << "db_connections_idle " << current_metrics_.idle_connections << "\n";
448
449 ss << "# HELP db_connections_total Total number of connections in pool\n";
450 ss << "# TYPE db_connections_total gauge\n";
451 ss << "db_connections_total " << current_metrics_.total_connections << "\n";
452
453 ss << "# HELP db_connection_usage_percent Connection pool usage percentage\n";
454 ss << "# TYPE db_connection_usage_percent gauge\n";
455 ss << "db_connection_usage_percent " << current_metrics_.connection_usage_percent << "\n";
456
457 // Query metrics
458 ss << "# HELP db_queries_total Total number of queries executed\n";
459 ss << "# TYPE db_queries_total counter\n";
460 ss << "db_queries_total " << current_metrics_.total_queries << "\n";
461
462 ss << "# HELP db_queries_successful Number of successful queries\n";
463 ss << "# TYPE db_queries_successful counter\n";
464 ss << "db_queries_successful " << current_metrics_.successful_queries << "\n";
465
466 ss << "# HELP db_queries_failed Number of failed queries\n";
467 ss << "# TYPE db_queries_failed counter\n";
468 ss << "db_queries_failed " << current_metrics_.failed_queries << "\n";
469
470 ss << "# HELP db_query_success_rate Query success rate (0-1)\n";
471 ss << "# TYPE db_query_success_rate gauge\n";
472 ss << "db_query_success_rate " << current_metrics_.query_success_rate << "\n";
473
474 // Latency metrics
475 ss << "# HELP db_query_latency_avg_us Average query latency in microseconds\n";
476 ss << "# TYPE db_query_latency_avg_us gauge\n";
477 ss << "db_query_latency_avg_us " << current_metrics_.avg_query_latency.count() << "\n";
478
479 ss << "# HELP db_query_latency_min_us Minimum query latency in microseconds\n";
480 ss << "# TYPE db_query_latency_min_us gauge\n";
481 ss << "db_query_latency_min_us " << current_metrics_.min_query_latency.count() << "\n";
482
483 ss << "# HELP db_query_latency_max_us Maximum query latency in microseconds\n";
484 ss << "# TYPE db_query_latency_max_us gauge\n";
485 ss << "db_query_latency_max_us " << current_metrics_.max_query_latency.count() << "\n";
486
487 ss << "# HELP db_query_latency_p95_us 95th percentile query latency in microseconds\n";
488 ss << "# TYPE db_query_latency_p95_us gauge\n";
489 ss << "db_query_latency_p95_us " << current_metrics_.p95_query_latency.count() << "\n";
490
491 ss << "# HELP db_query_latency_p99_us 99th percentile query latency in microseconds\n";
492 ss << "# TYPE db_query_latency_p99_us gauge\n";
493 ss << "db_query_latency_p99_us " << current_metrics_.p99_query_latency.count() << "\n";
494
495 // Transaction metrics
496 ss << "# HELP db_transactions_active Number of active transactions\n";
497 ss << "# TYPE db_transactions_active gauge\n";
498 ss << "db_transactions_active " << current_metrics_.active_transactions << "\n";
499
500 ss << "# HELP db_transactions_committed Total number of committed transactions\n";
501 ss << "# TYPE db_transactions_committed counter\n";
502 ss << "db_transactions_committed " << current_metrics_.committed_transactions << "\n";
503
504 ss << "# HELP db_transactions_rolled_back Total number of rolled back transactions\n";
505 ss << "# TYPE db_transactions_rolled_back counter\n";
506 ss << "db_transactions_rolled_back " << current_metrics_.rolled_back_transactions << "\n";
507
508 ss << "# HELP db_transaction_commit_rate Transaction commit rate (0-1)\n";
509 ss << "# TYPE db_transaction_commit_rate gauge\n";
510 ss << "db_transaction_commit_rate " << current_metrics_.transaction_commit_rate << "\n";
511
512 // Throughput metrics
513 ss << "# HELP db_queries_per_second Query throughput (queries/second)\n";
514 ss << "# TYPE db_queries_per_second gauge\n";
515 ss << "db_queries_per_second " << current_metrics_.queries_per_second << "\n";
516
517 ss << "# HELP db_transactions_per_second Transaction throughput (transactions/second)\n";
518 ss << "# TYPE db_transactions_per_second gauge\n";
519 ss << "db_transactions_per_second " << current_metrics_.transactions_per_second << "\n";
520
521 return ss.str();
522}
std::uint64_t active_transactions
Currently active transactions.
std::size_t idle_connections
Idle connections in pool.
std::size_t active_connections
Currently active connections.
std::uint64_t rolled_back_transactions
Total rolled-back transactions.
std::uint64_t successful_queries
Successfully completed queries.
double transaction_commit_rate
Commit rate (0.0 to 1.0)
std::uint64_t committed_transactions
Total committed transactions.

References database::integrated::adapters::database_metrics::active_connections, database::integrated::adapters::database_metrics::active_transactions, database::integrated::adapters::database_metrics::avg_query_latency, database::integrated::adapters::database_metrics::committed_transactions, database::integrated::adapters::database_metrics::connection_usage_percent, current_metrics_, database::integrated::adapters::database_metrics::failed_queries, database::integrated::adapters::database_metrics::idle_connections, database::integrated::adapters::database_metrics::max_query_latency, database::integrated::adapters::database_metrics::min_query_latency, mutex_, database::integrated::adapters::database_metrics::p95_query_latency, database::integrated::adapters::database_metrics::p99_query_latency, database::integrated::adapters::database_metrics::queries_per_second, database::integrated::adapters::database_metrics::query_success_rate, database::integrated::adapters::database_metrics::rolled_back_transactions, database::integrated::adapters::database_metrics::successful_queries, database::integrated::adapters::database_metrics::total_connections, database::integrated::adapters::database_metrics::total_queries, database::integrated::adapters::database_metrics::transaction_commit_rate, and database::integrated::adapters::database_metrics::transactions_per_second.

◆ get_database_metrics()

common::Result< database_metrics > database::integrated::adapters::backends::system_monitoring_backend::get_database_metrics ( )
overridevirtual

Get database-specific metrics.

Returns
Database metrics on success

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 406 of file system_monitoring_backend.cpp.

407{
408 if (!initialized_)
409 {
410 return make_error_result<database_metrics>("Monitoring backend not initialized");
411 }
412
413 std::lock_guard<std::mutex> lock(mutex_);
414
415 // Update timestamp
416 current_metrics_.timestamp = std::chrono::system_clock::now();
417
418 // Calculate throughput
419 auto elapsed = std::chrono::steady_clock::now() - start_time_;
420 auto elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds>(elapsed).count();
421
422 if (elapsed_seconds > 0)
423 {
425 static_cast<double>(current_metrics_.total_queries) / elapsed_seconds;
426 auto total_txns =
428 current_metrics_.transactions_per_second = static_cast<double>(total_txns) / elapsed_seconds;
429 }
430
431 return current_metrics_;
432}
std::chrono::system_clock::time_point timestamp
When metrics were collected.

References database::integrated::adapters::database_metrics::committed_transactions, current_metrics_, initialized_, mutex_, database::integrated::adapters::database_metrics::queries_per_second, database::integrated::adapters::database_metrics::rolled_back_transactions, start_time_, database::integrated::adapters::database_metrics::timestamp, database::integrated::adapters::database_metrics::total_queries, and database::integrated::adapters::database_metrics::transactions_per_second.

◆ get_metrics()

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

Get current metrics snapshot.

Returns
Metrics snapshot on success

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 160 of file system_monitoring_backend.cpp.

161{
162 if (!initialized_)
163 {
164 return make_error_result<metrics_snapshot>("Monitoring backend not initialized");
165 }
166
167 std::lock_guard<std::mutex> lock(mutex_);
168
169 try
170 {
171 metrics_snapshot snapshot;
172 snapshot.source_id = "database_system";
173
174 // Connection metrics
175 snapshot.gauges["db.connections.active"] = static_cast<double>(active_connections_);
176 snapshot.gauges["db.connections.idle"] = static_cast<double>(idle_connections_);
177 snapshot.gauges["db.connections.total"] = static_cast<double>(total_connections_);
178 snapshot.gauges["db.connections.usage_percent"] = current_metrics_.connection_usage_percent;
179
180 // Query metrics
181 snapshot.counters["db.queries.total"] = current_metrics_.total_queries;
182 snapshot.counters["db.queries.successful"] = current_metrics_.successful_queries;
183 snapshot.counters["db.queries.failed"] = current_metrics_.failed_queries;
184
185 snapshot.gauges["db.query.avg_latency_us"] = static_cast<double>(current_metrics_.avg_query_latency.count());
186 snapshot.gauges["db.query.min_latency_us"] = static_cast<double>(current_metrics_.min_query_latency.count());
187 snapshot.gauges["db.query.max_latency_us"] = static_cast<double>(current_metrics_.max_query_latency.count());
188 snapshot.gauges["db.query.p95_latency_us"] = static_cast<double>(current_metrics_.p95_query_latency.count());
189 snapshot.gauges["db.query.p99_latency_us"] = static_cast<double>(current_metrics_.p99_query_latency.count());
190 snapshot.gauges["db.query.success_rate"] = current_metrics_.query_success_rate;
191
192 // Transaction metrics
193 snapshot.gauges["db.transactions.active"] = static_cast<double>(active_transactions_);
194 snapshot.counters["db.transactions.committed"] = current_metrics_.committed_transactions;
195 snapshot.counters["db.transactions.rolled_back"] = current_metrics_.rolled_back_transactions;
196 snapshot.gauges["db.transaction.commit_rate"] = current_metrics_.transaction_commit_rate;
197
198 // Throughput metrics
199 snapshot.gauges["db.queries_per_second"] = current_metrics_.queries_per_second;
200 snapshot.gauges["db.transactions_per_second"] = current_metrics_.transactions_per_second;
201
202 return snapshot;
203 }
204 catch (const std::exception& e)
205 {
206 return make_error_result<metrics_snapshot>("Failed to get metrics: " + std::string(e.what()));
207 }
208}

References active_connections_, active_transactions_, database::integrated::adapters::database_metrics::avg_query_latency, database::integrated::adapters::database_metrics::committed_transactions, database::integrated::adapters::database_metrics::connection_usage_percent, database::integrated::adapters::backends::metrics_snapshot::counters, current_metrics_, database::integrated::adapters::database_metrics::failed_queries, database::integrated::adapters::backends::metrics_snapshot::gauges, idle_connections_, initialized_, database::integrated::adapters::database_metrics::max_query_latency, database::integrated::adapters::database_metrics::min_query_latency, mutex_, database::integrated::adapters::database_metrics::p95_query_latency, database::integrated::adapters::database_metrics::p99_query_latency, database::integrated::adapters::database_metrics::queries_per_second, database::integrated::adapters::database_metrics::query_success_rate, database::integrated::adapters::database_metrics::rolled_back_transactions, database::integrated::adapters::backends::metrics_snapshot::source_id, database::integrated::adapters::database_metrics::successful_queries, total_connections_, database::integrated::adapters::database_metrics::total_queries, database::integrated::adapters::database_metrics::transaction_commit_rate, and database::integrated::adapters::database_metrics::transactions_per_second.

◆ initialize()

common::VoidResult database::integrated::adapters::backends::system_monitoring_backend::initialize ( )
overridevirtual

Initialize the monitoring backend.

Returns
VoidResult::ok() on success, error on failure

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 58 of file system_monitoring_backend.cpp.

59{
60 if (initialized_)
61 {
62 return common::ok();
63 }
64
65 try
66 {
67 // Create performance monitor
68 monitor_ = std::make_unique<kcenon::monitoring::performance_monitor>("database_system");
69
70 // Initialize the monitor
71 auto init_result = monitor_->initialize();
72 if (!init_result.is_ok())
73 {
74 return make_error("Failed to initialize monitoring_system: " +
75 std::string(init_result.error().message));
76 }
77
78 start_time_ = std::chrono::steady_clock::now();
79 initialized_ = true;
80 return common::ok();
81 }
82 catch (const std::exception& e)
83 {
84 return make_error("Exception during initialization: " + std::string(e.what()));
85 }
86}
std::unique_ptr< kcenon::monitoring::performance_monitor > monitor_
VoidResult ok()

References initialized_, monitor_, common::ok(), and start_time_.

Here is the call graph for this function:

◆ is_initialized()

bool database::integrated::adapters::backends::system_monitoring_backend::is_initialized ( ) const
overridevirtual

Check if backend is initialized.

Returns
true if initialized and ready

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 121 of file system_monitoring_backend.cpp.

122{
123 return initialized_;
124}

References initialized_.

◆ operator=() [1/2]

system_monitoring_backend & database::integrated::adapters::backends::system_monitoring_backend::operator= ( const system_monitoring_backend & )
delete

◆ operator=() [2/2]

system_monitoring_backend & database::integrated::adapters::backends::system_monitoring_backend::operator= ( system_monitoring_backend && )
delete

◆ record_connection_acquired()

void database::integrated::adapters::backends::system_monitoring_backend::record_connection_acquired ( )
overridevirtual

Record connection acquisition.

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 322 of file system_monitoring_backend.cpp.

323{
324 std::lock_guard<std::mutex> lock(mutex_);
325 // Connection tracking is handled by update_pool_stats
326}

References mutex_.

◆ record_connection_released()

void database::integrated::adapters::backends::system_monitoring_backend::record_connection_released ( )
overridevirtual

Record connection release.

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 328 of file system_monitoring_backend.cpp.

329{
330 std::lock_guard<std::mutex> lock(mutex_);
331 // Connection tracking is handled by update_pool_stats
332}

References mutex_.

◆ record_metric() [1/2]

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

Record a metric value.

Parameters
nameMetric name
valueMetric value
Returns
VoidResult::ok() on success

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 126 of file system_monitoring_backend.cpp.

127{
128 if (!initialized_)
129 {
130 return make_error("Monitoring backend not initialized");
131 }
132
133 std::lock_guard<std::mutex> lock(mutex_);
134
135 try
136 {
137 // Record as a duration sample for performance profiler
138 auto duration_ns = static_cast<std::int64_t>(value * 1000.0); // Assume value is in microseconds
139 monitor_->get_profiler().record_sample(
140 name,
141 std::chrono::nanoseconds(duration_ns),
142 true);
143 return common::ok();
144 }
145 catch (const std::exception& e)
146 {
147 return make_error("Failed to record metric: " + std::string(e.what()));
148 }
149}

References initialized_, monitor_, mutex_, and common::ok().

Referenced by record_metric().

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

◆ record_metric() [2/2]

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

Record a metric value with tags.

Parameters
nameMetric name
valueMetric value
tagsMetric tags/labels
Returns
VoidResult::ok() on success

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 151 of file system_monitoring_backend.cpp.

154{
155 // monitoring_system performance_profiler doesn't support tags directly
156 // Record without tags for now
157 return record_metric(name, value);
158}
common::VoidResult record_metric(const std::string &name, double value) override
Record a metric value.

References record_metric().

Here is the call graph for this function:

◆ record_query_execution()

void database::integrated::adapters::backends::system_monitoring_backend::record_query_execution ( std::chrono::microseconds duration,
bool success )
overridevirtual

Record query execution.

Parameters
durationQuery execution duration
successWhether query succeeded

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 282 of file system_monitoring_backend.cpp.

283{
284 std::lock_guard<std::mutex> lock(mutex_);
285
286 // Update counters
288 if (success)
289 {
291 }
292 else
293 {
295 }
296
297 // Calculate success rate
299 {
302 }
303
304 // Record in monitoring_system
305 if (monitor_)
306 {
307 auto duration_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(duration);
308 monitor_->get_profiler().record_sample("query_execution", duration_ns, success);
309 }
310
311 // Store latency sample
312 recent_query_latencies_.push_back(duration);
314 {
316 }
317
318 // Calculate derived metrics
320}
void calculate_derived_metrics()
Calculate derived metrics from collected data.

References calculate_derived_metrics(), current_metrics_, database::integrated::adapters::database_metrics::failed_queries, max_latency_samples_, monitor_, mutex_, database::integrated::adapters::database_metrics::query_success_rate, recent_query_latencies_, database::success, database::integrated::adapters::database_metrics::successful_queries, and database::integrated::adapters::database_metrics::total_queries.

Here is the call graph for this function:

◆ record_transaction_begin()

void database::integrated::adapters::backends::system_monitoring_backend::record_transaction_begin ( )
overridevirtual

◆ record_transaction_commit()

void database::integrated::adapters::backends::system_monitoring_backend::record_transaction_commit ( )
overridevirtual

◆ record_transaction_rollback()

void database::integrated::adapters::backends::system_monitoring_backend::record_transaction_rollback ( )
overridevirtual

◆ reset()

common::VoidResult database::integrated::adapters::backends::system_monitoring_backend::reset ( )
overridevirtual

Reset all metrics.

Returns
VoidResult::ok() on success

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 251 of file system_monitoring_backend.cpp.

252{
253 if (!initialized_)
254 {
255 return make_error("Monitoring backend not initialized");
256 }
257
258 std::lock_guard<std::mutex> lock(mutex_);
259
260 try
261 {
262 current_metrics_ = database_metrics{};
268
269 if (monitor_)
270 {
271 monitor_->reset();
272 }
273
274 return common::ok();
275 }
276 catch (const std::exception& e)
277 {
278 return make_error("Failed to reset metrics: " + std::string(e.what()));
279 }
280}

References active_connections_, active_transactions_, current_metrics_, idle_connections_, initialized_, monitor_, mutex_, common::ok(), recent_query_latencies_, and total_connections_.

Here is the call graph for this function:

◆ shutdown()

common::VoidResult database::integrated::adapters::backends::system_monitoring_backend::shutdown ( )
overridevirtual

Shutdown the monitoring backend gracefully.

Returns
VoidResult::ok() on success, error on failure

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 88 of file system_monitoring_backend.cpp.

89{
90 if (!initialized_)
91 {
92 return common::ok();
93 }
94
95 try
96 {
97 std::lock_guard<std::mutex> lock(mutex_);
98
99 if (monitor_)
100 {
101 auto cleanup_result = monitor_->cleanup();
102 if (!cleanup_result.is_ok())
103 {
104 // Log error but continue shutdown
105 }
106 monitor_.reset();
107 }
108
109 current_metrics_ = database_metrics{};
111 initialized_ = false;
112
113 return common::ok();
114 }
115 catch (const std::exception& e)
116 {
117 return make_error("Exception during shutdown: " + std::string(e.what()));
118 }
119}

References current_metrics_, initialized_, monitor_, mutex_, common::ok(), and recent_query_latencies_.

Referenced by ~system_monitoring_backend().

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

◆ update_pool_stats()

void database::integrated::adapters::backends::system_monitoring_backend::update_pool_stats ( std::size_t active,
std::size_t idle,
std::size_t total )
overridevirtual

Update connection pool statistics.

Parameters
activeNumber of active connections
idleNumber of idle connections
totalTotal pool size

Implements database::integrated::adapters::backends::monitoring_backend.

Definition at line 334 of file system_monitoring_backend.cpp.

335{
336 std::lock_guard<std::mutex> lock(mutex_);
337
338 active_connections_ = active;
339 idle_connections_ = idle;
340 total_connections_ = total;
341
345
346 // Calculate usage percentage
347 if (total > 0)
348 {
349 current_metrics_.connection_usage_percent = (static_cast<double>(active) / total) * 100.0;
350 }
351 else
352 {
354 }
355}

References database::integrated::adapters::database_metrics::active_connections, active_connections_, database::integrated::adapters::database_metrics::connection_usage_percent, current_metrics_, database::integrated::adapters::database_metrics::idle_connections, idle_connections_, mutex_, database::integrated::adapters::database_metrics::total_connections, and total_connections_.

Member Data Documentation

◆ active_connections_

std::size_t database::integrated::adapters::backends::system_monitoring_backend::active_connections_
private

Definition at line 120 of file system_monitoring_backend.h.

Referenced by get_metrics(), reset(), and update_pool_stats().

◆ active_transactions_

std::size_t database::integrated::adapters::backends::system_monitoring_backend::active_transactions_
private

◆ config_

const db_monitoring_config& database::integrated::adapters::backends::system_monitoring_backend::config_
private

Definition at line 106 of file system_monitoring_backend.h.

Referenced by check_health().

◆ current_metrics_

◆ idle_connections_

std::size_t database::integrated::adapters::backends::system_monitoring_backend::idle_connections_
private

Definition at line 121 of file system_monitoring_backend.h.

Referenced by get_metrics(), reset(), and update_pool_stats().

◆ initialized_

bool database::integrated::adapters::backends::system_monitoring_backend::initialized_
private

◆ max_latency_samples_

std::size_t database::integrated::adapters::backends::system_monitoring_backend::max_latency_samples_
private

◆ monitor_

std::unique_ptr<kcenon::monitoring::performance_monitor> database::integrated::adapters::backends::system_monitoring_backend::monitor_
private

◆ mutex_

◆ recent_query_latencies_

std::vector<std::chrono::microseconds> database::integrated::adapters::backends::system_monitoring_backend::recent_query_latencies_
private

◆ start_time_

std::chrono::steady_clock::time_point database::integrated::adapters::backends::system_monitoring_backend::start_time_
private

Definition at line 109 of file system_monitoring_backend.h.

Referenced by get_database_metrics(), and initialize().

◆ total_connections_

std::size_t database::integrated::adapters::backends::system_monitoring_backend::total_connections_
private

Definition at line 122 of file system_monitoring_backend.h.

Referenced by get_metrics(), reset(), and update_pool_stats().


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