Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
monitoring_adapter.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
59#pragma once
60
62
63#include <chrono>
64#include <cstddef>
65#include <cstdint>
66#include <memory>
67#include <string>
68#include <unordered_map>
69
70// Use common Result pattern from shared header
72
73// Include backend interface for complete types needed by Result<>
75
76// Forward declare backend class only
78{
79 class monitoring_backend;
80}
81
82namespace database
83{
84namespace integrated
85{
86namespace adapters
87{
88
93{
95 system,
96 fallback,
97 null
98};
99
107{
108 // Connection pool metrics
109 std::size_t active_connections{ 0 };
110 std::size_t idle_connections{ 0 };
111 std::size_t total_connections{ 0 };
113
114 // Query performance metrics
115 std::uint64_t total_queries{ 0 };
116 std::uint64_t successful_queries{ 0 };
117 std::uint64_t failed_queries{ 0 };
118 double query_success_rate{ 0.0 };
119
120 // Latency metrics
121 std::chrono::microseconds avg_query_latency{ 0 };
122 std::chrono::microseconds min_query_latency{ 0 };
123 std::chrono::microseconds max_query_latency{ 0 };
124 std::chrono::microseconds p95_query_latency{ 0 };
125 std::chrono::microseconds p99_query_latency{ 0 };
126
127 // Transaction metrics
128 std::uint64_t active_transactions{ 0 };
129 std::uint64_t committed_transactions{ 0 };
130 std::uint64_t rolled_back_transactions{ 0 };
132
133 // Throughput metrics
134 double queries_per_second{ 0.0 };
136
137 // Timestamp
138 std::chrono::system_clock::time_point timestamp;
139};
140
157{
158public:
164 explicit monitoring_adapter(
165 const db_monitoring_config& config,
167
172
173 // Non-copyable
176
177 // Move constructor only (const reference member prevents move assignment)
180
186
192
197 bool is_initialized() const;
198
199 // ═══════════════════════════════════════════════════════════════
200 // Monitoring Interface
201 // ═══════════════════════════════════════════════════════════════
202
209 common::VoidResult record_metric(const std::string& name, double value);
210
219 const std::string& name, double value,
220 const std::unordered_map<std::string, std::string>& tags);
221
226 common::Result<backends::metrics_snapshot> get_metrics();
227
232 common::Result<backends::health_check_result> check_health();
233
239
240 // ═══════════════════════════════════════════════════════════════
241 // Database-Specific Monitoring Methods
242 // ═══════════════════════════════════════════════════════════════
243
249 void record_query_execution(std::chrono::microseconds duration, bool success);
250
255
260
267 void update_pool_stats(std::size_t active, std::size_t idle, std::size_t total);
268
273
278
283
289
294 std::string export_prometheus_metrics();
295
296private:
300 static std::unique_ptr<backends::monitoring_backend> create_backend(
301 const db_monitoring_config& config,
303
305 std::unique_ptr<backends::monitoring_backend> backend_;
306};
307
308} // namespace adapters
309} // namespace integrated
310} // namespace database
Monitoring adapter for database operations.
void update_pool_stats(std::size_t active, std::size_t idle, std::size_t total)
Update connection pool statistics.
common::VoidResult initialize()
Initialize monitoring system.
void record_connection_released()
Record connection release.
void record_query_execution(std::chrono::microseconds duration, bool success)
Record query execution.
void record_transaction_rollback()
Record transaction rollback.
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.
common::Result< backends::health_check_result > check_health()
Perform health check.
bool is_initialized() const
Check if monitoring is initialized.
monitoring_adapter(const monitoring_adapter &)=delete
~monitoring_adapter()
Destructor - ensures graceful shutdown.
common::Result< database_metrics > get_database_metrics()
Get database-specific metrics.
monitoring_adapter & operator=(const monitoring_adapter &)=delete
std::unique_ptr< backends::monitoring_backend > backend_
Monitoring backend implementation.
common::Result< backends::metrics_snapshot > get_metrics()
Get current metrics snapshot.
common::VoidResult record_metric(const std::string &name, double value)
Record a metric value.
monitoring_adapter(const db_monitoring_config &config, monitoring_backend_type backend_type=monitoring_backend_type::auto_select)
Construct monitoring adapter with configuration.
monitoring_adapter(monitoring_adapter &&) noexcept
common::VoidResult shutdown()
Shutdown monitoring system.
std::string export_prometheus_metrics()
Export metrics in Prometheus format.
void record_transaction_commit()
Record transaction commit.
void record_connection_acquired()
Record connection acquisition.
Common Result<T> pattern for integrated database system.
Unified configuration for integrated database system.
Abstract interface for monitoring backends.
@ null
No-op backend (discard all logs)
@ auto_select
Automatically select best available backend.
@ system
Use common_system ILogger (fails if unavailable)
monitoring_backend_type
Monitoring backend type selection.
@ auto_select
Automatically select best available backend.
backend_type
Database backend type enumeration.
kcenon::common::Result< T > Result
Primary Result type - use this for all database operations.
Definition result.h:30
kcenon::common::VoidResult VoidResult
Primary VoidResult type - use this for void operations.
Definition result.h:33
std::uint64_t active_transactions
Currently active transactions.
std::size_t idle_connections
Idle connections in pool.
double connection_usage_percent
Percentage of connections in use.
std::size_t active_connections
Currently active connections.
std::uint64_t rolled_back_transactions
Total rolled-back transactions.
std::uint64_t total_queries
Total queries executed.
std::chrono::microseconds p99_query_latency
99th percentile latency
std::uint64_t successful_queries
Successfully completed queries.
double transaction_commit_rate
Commit rate (0.0 to 1.0)
std::chrono::system_clock::time_point timestamp
When metrics were collected.
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::uint64_t committed_transactions
Total committed transactions.
std::chrono::microseconds min_query_latency
Minimum query latency.
Monitoring and metrics configuration.