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

Basic monitoring backend using internal metrics storage. More...

#include <fallback_monitoring_backend.h>

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

Public Member Functions

 fallback_monitoring_backend (const db_monitoring_config &config)
 
 ~fallback_monitoring_backend () override
 
 fallback_monitoring_backend (const fallback_monitoring_backend &)=delete
 
fallback_monitoring_backendoperator= (const fallback_monitoring_backend &)=delete
 
 fallback_monitoring_backend (fallback_monitoring_backend &&)=delete
 
fallback_monitoring_backendoperator= (fallback_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

std::chrono::microseconds calculate_percentile (double percentile)
 Calculate percentile from latency samples.
 
void update_avg_latency ()
 Update average query latency.
 

Private Attributes

const db_monitoring_configconfig_
 
bool initialized_
 
std::mutex mutex_
 
std::chrono::steady_clock::time_point start_time_
 
database_metrics metrics_
 
std::vector< std::chrono::microseconds > query_latencies_
 
std::unordered_map< std::string, double > generic_metrics_
 

Detailed Description

Basic monitoring backend using internal metrics storage.

This backend provides simple monitoring when monitoring_system is unavailable. Stores metrics in memory and provides basic health checks.

Definition at line 45 of file fallback_monitoring_backend.h.

Constructor & Destructor Documentation

◆ fallback_monitoring_backend() [1/3]

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

◆ ~fallback_monitoring_backend()

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

Definition at line 39 of file fallback_monitoring_backend.cpp.

40{
41 if (initialized_)
42 {
43 shutdown();
44 }
45}
common::VoidResult shutdown() override
Shutdown the monitoring backend gracefully.

References initialized_, and shutdown().

Here is the call graph for this function:

◆ fallback_monitoring_backend() [2/3]

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

◆ fallback_monitoring_backend() [3/3]

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

Member Function Documentation

◆ calculate_percentile()

std::chrono::microseconds database::integrated::adapters::backends::fallback_monitoring_backend::calculate_percentile ( double percentile)
private

Calculate percentile from latency samples.

Definition at line 307 of file fallback_monitoring_backend.cpp.

308{
309 if (query_latencies_.empty())
310 {
311 return std::chrono::microseconds(0);
312 }
313
314 auto sorted = query_latencies_;
315 std::sort(sorted.begin(), sorted.end());
316
317 size_t idx = static_cast<size_t>(sorted.size() * percentile);
318 if (idx >= sorted.size())
319 {
320 idx = sorted.size() - 1;
321 }
322
323 return sorted[idx];
324}

References query_latencies_.

◆ check_health()

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

Perform health check.

Returns
Health check result

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

Definition at line 137 of file fallback_monitoring_backend.cpp.

138{
139 if (!initialized_)
140 {
141 return make_error_result<health_check_result>("Monitoring backend not initialized");
142 }
143
144 std::lock_guard<std::mutex> lock(mutex_);
145
146 health_check_result result;
147 result.status = health_status::healthy;
148 result.message = "Database system healthy";
149
150 // Connection pool health check
152 {
153 result.status = health_status::degraded;
154 result.message = "Connection pool usage critical";
155 result.metadata["connection_usage"] = std::to_string(metrics_.connection_usage_percent) + "%";
156 }
157
158 // Query latency health check
160 {
161 result.status = health_status::degraded;
162 result.message = "Query latency critical";
163 result.metadata["avg_latency_us"] = std::to_string(metrics_.avg_query_latency.count());
164 }
165
166 // Query success rate health check
168 {
169 result.status = health_status::degraded;
170 result.message = "Query success rate low";
171 result.metadata["success_rate"] = std::to_string(metrics_.query_success_rate);
172 }
173
174 return result;
175}
double connection_usage_percent
Percentage of connections in use.
std::uint64_t total_queries
Total queries executed.
std::chrono::microseconds avg_query_latency
Average query latency.
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, 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, metrics_, 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, and database::integrated::adapters::database_metrics::total_queries.

◆ export_prometheus_metrics()

std::string database::integrated::adapters::backends::fallback_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 284 of file fallback_monitoring_backend.cpp.

285{
286 std::lock_guard<std::mutex> lock(mutex_);
287
288 std::ostringstream oss;
289 oss << "# TYPE db_connections_active gauge\n";
290 oss << "db_connections_active " << metrics_.active_connections << "\n";
291
292 oss << "# TYPE db_connections_idle gauge\n";
293 oss << "db_connections_idle " << metrics_.idle_connections << "\n";
294
295 oss << "# TYPE db_queries_total counter\n";
296 oss << "db_queries_total " << metrics_.total_queries << "\n";
297
298 oss << "# TYPE db_queries_success_rate gauge\n";
299 oss << "db_queries_success_rate " << metrics_.query_success_rate << "\n";
300
301 oss << "# TYPE db_query_latency_avg_us gauge\n";
302 oss << "db_query_latency_avg_us " << metrics_.avg_query_latency.count() << "\n";
303
304 return oss.str();
305}
std::size_t idle_connections
Idle connections in pool.
std::size_t active_connections
Currently active connections.

References database::integrated::adapters::database_metrics::active_connections, database::integrated::adapters::database_metrics::avg_query_latency, database::integrated::adapters::database_metrics::idle_connections, metrics_, mutex_, database::integrated::adapters::database_metrics::query_success_rate, and database::integrated::adapters::database_metrics::total_queries.

◆ get_database_metrics()

common::Result< database_metrics > database::integrated::adapters::backends::fallback_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 272 of file fallback_monitoring_backend.cpp.

273{
274 if (!initialized_)
275 {
276 return make_error_result<database_metrics>("Monitoring backend not initialized");
277 }
278
279 std::lock_guard<std::mutex> lock(mutex_);
280 metrics_.timestamp = std::chrono::system_clock::now();
281 return metrics_;
282}
std::chrono::system_clock::time_point timestamp
When metrics were collected.

References initialized_, metrics_, mutex_, and database::integrated::adapters::database_metrics::timestamp.

◆ get_metrics()

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

Get current metrics snapshot.

Returns
Metrics snapshot on success

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

Definition at line 99 of file fallback_monitoring_backend.cpp.

100{
101 if (!initialized_)
102 {
103 return make_error_result<metrics_snapshot>("Monitoring backend not initialized");
104 }
105
106 std::lock_guard<std::mutex> lock(mutex_);
107
108 metrics_snapshot snapshot;
109 snapshot.source_id = "database_fallback";
110
111 // Connection metrics
112 snapshot.gauges["db.connections.active"] = static_cast<double>(metrics_.active_connections);
113 snapshot.gauges["db.connections.idle"] = static_cast<double>(metrics_.idle_connections);
114 snapshot.gauges["db.connections.usage_percent"] = metrics_.connection_usage_percent;
115
116 // Query metrics
117 snapshot.gauges["db.query.avg_latency_us"] = static_cast<double>(metrics_.avg_query_latency.count());
118 snapshot.gauges["db.query.success_rate"] = metrics_.query_success_rate;
119
120 snapshot.counters["db.queries.total"] = metrics_.total_queries;
121 snapshot.counters["db.queries.successful"] = metrics_.successful_queries;
122 snapshot.counters["db.queries.failed"] = metrics_.failed_queries;
123
124 // Transaction metrics
125 snapshot.counters["db.transactions.committed"] = metrics_.committed_transactions;
126 snapshot.counters["db.transactions.rolled_back"] = metrics_.rolled_back_transactions;
127
128 // Generic metrics
129 for (const auto& [name, value] : generic_metrics_)
130 {
131 snapshot.gauges[name] = value;
132 }
133
134 return snapshot;
135}
std::uint64_t rolled_back_transactions
Total rolled-back transactions.
std::uint64_t successful_queries
Successfully completed queries.
std::uint64_t committed_transactions
Total committed transactions.

References database::integrated::adapters::database_metrics::active_connections, 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, database::integrated::adapters::database_metrics::failed_queries, database::integrated::adapters::backends::metrics_snapshot::gauges, generic_metrics_, database::integrated::adapters::database_metrics::idle_connections, initialized_, metrics_, mutex_, 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, and database::integrated::adapters::database_metrics::total_queries.

◆ initialize()

common::VoidResult database::integrated::adapters::backends::fallback_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 47 of file fallback_monitoring_backend.cpp.

48{
49 if (initialized_)
50 {
51 return common::ok();
52 }
53
54 start_time_ = std::chrono::steady_clock::now();
55 initialized_ = true;
56 return common::ok();
57}
VoidResult ok()

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

Here is the call graph for this function:

◆ is_initialized()

bool database::integrated::adapters::backends::fallback_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 74 of file fallback_monitoring_backend.cpp.

75{
76 return initialized_;
77}

References initialized_.

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ record_connection_acquired()

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

Record connection acquisition.

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

Definition at line 222 of file fallback_monitoring_backend.cpp.

223{
224 // Handled by update_pool_stats
225}

◆ record_connection_released()

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

Record connection release.

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

Definition at line 227 of file fallback_monitoring_backend.cpp.

228{
229 // Handled by update_pool_stats
230}

◆ record_metric() [1/2]

common::VoidResult database::integrated::adapters::backends::fallback_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 79 of file fallback_monitoring_backend.cpp.

80{
81 if (!initialized_)
82 {
83 return make_error("Monitoring backend not initialized");
84 }
85
86 std::lock_guard<std::mutex> lock(mutex_);
87 generic_metrics_[name] = value;
88 return common::ok();
89}

References generic_metrics_, initialized_, 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::fallback_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 91 of file fallback_monitoring_backend.cpp.

94{
95 // Fallback ignores tags
96 return record_metric(name, value);
97}
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::fallback_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 191 of file fallback_monitoring_backend.cpp.

192{
193 std::lock_guard<std::mutex> lock(mutex_);
194
196 if (success)
197 {
199 }
200 else
201 {
203 }
204
205 if (metrics_.total_queries > 0)
206 {
208 }
209
210 query_latencies_.push_back(duration);
211
212 // Keep last 1000 samples
213 const size_t max_samples = 1000;
214 if (query_latencies_.size() > max_samples)
215 {
216 query_latencies_.erase(query_latencies_.begin());
217 }
218
220}

References database::integrated::adapters::database_metrics::failed_queries, metrics_, mutex_, query_latencies_, database::integrated::adapters::database_metrics::query_success_rate, database::success, database::integrated::adapters::database_metrics::successful_queries, database::integrated::adapters::database_metrics::total_queries, and update_avg_latency().

Here is the call graph for this function:

◆ record_transaction_begin()

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

Record transaction begin.

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

Definition at line 246 of file fallback_monitoring_backend.cpp.

247{
248 std::lock_guard<std::mutex> lock(mutex_);
250}
std::uint64_t active_transactions
Currently active transactions.

References database::integrated::adapters::database_metrics::active_transactions, metrics_, and mutex_.

◆ record_transaction_commit()

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

◆ record_transaction_rollback()

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

◆ reset()

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

Reset all metrics.

Returns
VoidResult::ok() on success

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

Definition at line 177 of file fallback_monitoring_backend.cpp.

178{
179 if (!initialized_)
180 {
181 return make_error("Monitoring backend not initialized");
182 }
183
184 std::lock_guard<std::mutex> lock(mutex_);
185 metrics_ = database_metrics{};
186 query_latencies_.clear();
187 generic_metrics_.clear();
188 return common::ok();
189}

References generic_metrics_, initialized_, metrics_, mutex_, common::ok(), and query_latencies_.

Here is the call graph for this function:

◆ shutdown()

common::VoidResult database::integrated::adapters::backends::fallback_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 59 of file fallback_monitoring_backend.cpp.

60{
61 if (!initialized_)
62 {
63 return common::ok();
64 }
65
66 std::lock_guard<std::mutex> lock(mutex_);
67 metrics_ = database_metrics{};
68 query_latencies_.clear();
69 generic_metrics_.clear();
70 initialized_ = false;
71 return common::ok();
72}

References generic_metrics_, initialized_, metrics_, mutex_, common::ok(), and query_latencies_.

Referenced by ~fallback_monitoring_backend().

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

◆ update_avg_latency()

void database::integrated::adapters::backends::fallback_monitoring_backend::update_avg_latency ( )
private

Update average query latency.

Definition at line 326 of file fallback_monitoring_backend.cpp.

327{
328 if (query_latencies_.empty())
329 {
330 return;
331 }
332
333 auto sum = std::accumulate(
334 query_latencies_.begin(), query_latencies_.end(), std::chrono::microseconds(0));
335 metrics_.avg_query_latency = std::chrono::microseconds(sum.count() / query_latencies_.size());
336
337 metrics_.min_query_latency = *std::min_element(query_latencies_.begin(), query_latencies_.end());
338 metrics_.max_query_latency = *std::max_element(query_latencies_.begin(), query_latencies_.end());
339
340 auto sorted = query_latencies_;
341 std::sort(sorted.begin(), sorted.end());
342
343 size_t p95_idx = static_cast<size_t>(sorted.size() * 0.95);
344 size_t p99_idx = static_cast<size_t>(sorted.size() * 0.99);
345
346 if (p95_idx < sorted.size())
347 {
348 metrics_.p95_query_latency = sorted[p95_idx];
349 }
350 if (p99_idx < sorted.size())
351 {
352 metrics_.p99_query_latency = sorted[p99_idx];
353 }
354}
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 min_query_latency
Minimum query latency.

References database::integrated::adapters::database_metrics::avg_query_latency, database::integrated::adapters::database_metrics::max_query_latency, metrics_, 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 query_latencies_.

Referenced by record_query_execution().

Here is the caller graph for this function:

◆ update_pool_stats()

void database::integrated::adapters::backends::fallback_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 232 of file fallback_monitoring_backend.cpp.

233{
234 std::lock_guard<std::mutex> lock(mutex_);
235
239
240 if (total > 0)
241 {
242 metrics_.connection_usage_percent = (static_cast<double>(active) / total) * 100.0;
243 }
244}

References database::integrated::adapters::database_metrics::active_connections, database::integrated::adapters::database_metrics::connection_usage_percent, database::integrated::adapters::database_metrics::idle_connections, metrics_, mutex_, and database::integrated::adapters::database_metrics::total_connections.

Member Data Documentation

◆ config_

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

Definition at line 92 of file fallback_monitoring_backend.h.

Referenced by check_health().

◆ generic_metrics_

std::unordered_map<std::string, double> database::integrated::adapters::backends::fallback_monitoring_backend::generic_metrics_
private

Definition at line 100 of file fallback_monitoring_backend.h.

Referenced by get_metrics(), record_metric(), reset(), and shutdown().

◆ initialized_

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

◆ metrics_

◆ mutex_

std::mutex database::integrated::adapters::backends::fallback_monitoring_backend::mutex_
mutableprivate

◆ query_latencies_

std::vector<std::chrono::microseconds> database::integrated::adapters::backends::fallback_monitoring_backend::query_latencies_
private

◆ start_time_

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

Definition at line 95 of file fallback_monitoring_backend.h.

Referenced by initialize().


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