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

Main performance monitoring system. More...

#include <performance_monitor.h>

Collaboration diagram for database::monitoring::performance_monitor:
Collaboration graph

Public Member Functions

 performance_monitor ()
 Constructor - now public for dependency injection.
 
 ~performance_monitor ()
 
void set_monitoring_enabled (bool enabled)
 
void set_metrics_retention_period (std::chrono::minutes period)
 
void set_alert_thresholds (double error_rate_threshold, std::chrono::microseconds latency_threshold)
 
void record_query_metrics (const query_metrics &metrics)
 
void record_connection_metrics (database_types db_type, const connection_metrics &metrics)
 
void record_slow_query (const std::string &query, std::chrono::microseconds execution_time)
 
performance_summary get_performance_summary () const
 
performance_summary get_performance_summary (database_types db_type) const
 
std::vector< query_metricsget_recent_queries (std::chrono::minutes window) const
 
std::vector< query_metricsget_slow_queries (std::chrono::microseconds threshold) const
 
void update_connection_count (database_types db_type, size_t active, size_t total)
 
connection_metrics get_connection_metrics (database_types db_type) const
 
void register_alert_handler (std::function< void(const performance_alert &)> handler)
 
std::vector< performance_alertget_recent_alerts (std::chrono::minutes window) const
 
void clear_metrics ()
 
void cleanup_old_metrics ()
 
std::string get_metrics_json () const
 
std::string get_dashboard_html () const
 

Private Member Functions

void cleanup_thread ()
 
void check_thresholds ()
 
void emit_alert (performance_alert::alert_type type, const std::string &message)
 
std::string calculate_query_hash (const std::string &query) const
 

Private Attributes

std::atomic< bool > monitoring_enabled_ {true}
 
std::chrono::minutes retention_period_ {60}
 
double error_rate_threshold_ = 0.05
 
std::chrono::microseconds latency_threshold_ {1000000}
 
std::mutex metrics_mutex_
 
std::vector< query_metricsquery_history_
 
std::unordered_map< database_types, connection_metricsconnection_metrics_
 
std::vector< performance_alertalerts_
 
std::mutex handlers_mutex_
 
std::vector< std::function< void(const performance_alert &)> > alert_handlers_
 
std::atomic< bool > cleanup_running_ {true}
 
std::thread cleanup_thread_
 
std::condition_variable cleanup_cv_
 
std::mutex cleanup_mutex_
 
std::unordered_map< std::string, size_t > query_patterns_
 
std::unordered_map< std::string, std::chrono::microseconds > query_avg_times_
 

Detailed Description

Main performance monitoring system.

Definition at line 198 of file performance_monitor.h.

Constructor & Destructor Documentation

◆ performance_monitor()

database::monitoring::performance_monitor::performance_monitor ( )

Constructor - now public for dependency injection.

Since
Sprint 3 (Task 3.2)

Definition at line 57 of file performance_monitor.cpp.

58 {
59 // Disable background thread in sanitizer builds to avoid deadlocks
60 // TSan/ASan/UBSan heavily instrument condition_variable operations causing extreme slowdowns
61 // GCC defines __SANITIZE_THREAD__, __SANITIZE_ADDRESS__
62 // Clang defines __has_feature(thread_sanitizer), __has_feature(address_sanitizer)
63
64 // Check for sanitizers at compile time
65 bool is_sanitizer_build = false;
66#if defined(__SANITIZE_THREAD__) || defined(__SANITIZE_ADDRESS__)
67 // GCC sanitizer detected
68 is_sanitizer_build = true;
69#endif
70
71#ifdef __clang__
72 // Clang-specific feature detection
73# if __has_feature(thread_sanitizer) || __has_feature(address_sanitizer) || __has_feature(undefined_behavior_sanitizer)
74 is_sanitizer_build = true;
75# endif
76#endif
77
78 if (is_sanitizer_build) {
79 // Sanitizer build detected - disable background thread
80 cleanup_running_ = false;
81 std::cout << "performance_monitor: background cleanup thread disabled (sanitizer build)" << std::endl;
82 } else {
83 // Normal build - start background cleanup thread
85 }
86 }

References cleanup_running_, cleanup_thread(), and cleanup_thread_.

Here is the call graph for this function:

◆ ~performance_monitor()

database::monitoring::performance_monitor::~performance_monitor ( )

Definition at line 88 of file performance_monitor.cpp.

89 {
90 cleanup_running_ = false;
91 cleanup_cv_.notify_all();
92 if (cleanup_thread_.joinable()) {
93 cleanup_thread_.join();
94 }
95 }

References cleanup_cv_, cleanup_running_, and cleanup_thread_.

Member Function Documentation

◆ calculate_query_hash()

std::string database::monitoring::performance_monitor::calculate_query_hash ( const std::string & query) const
private

Definition at line 489 of file performance_monitor.cpp.

490 {
491 return std::to_string(std::hash<std::string>{}(query));
492 }

◆ check_thresholds()

void database::monitoring::performance_monitor::check_thresholds ( )
private

Definition at line 452 of file performance_monitor.cpp.

453 {
454 auto summary = get_performance_summary();
455
456 // Check error rate threshold
457 if (summary.error_rate > error_rate_threshold_) {
459 "High error rate: " + std::to_string(summary.error_rate * 100) + "%");
460 }
461
462 // Check latency threshold
463 if (summary.avg_query_time > latency_threshold_) {
465 "High average latency: " + std::to_string(summary.avg_query_time.count()) + "μs");
466 }
467 }
performance_summary get_performance_summary() const
void emit_alert(performance_alert::alert_type type, const std::string &message)

References emit_alert(), error_rate_threshold_, get_performance_summary(), database::monitoring::performance_alert::high_error_rate, database::monitoring::performance_alert::high_latency, and latency_threshold_.

Referenced by cleanup_thread(), and record_query_metrics().

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

◆ cleanup_old_metrics()

void database::monitoring::performance_monitor::cleanup_old_metrics ( )

Definition at line 388 of file performance_monitor.cpp.

389 {
390 std::lock_guard<std::mutex> lock(metrics_mutex_);
391
392 auto cutoff = std::chrono::steady_clock::now() - retention_period_;
393
394 // Remove old query metrics
395 query_history_.erase(
396 std::remove_if(query_history_.begin(), query_history_.end(),
397 [cutoff](const query_metrics& m) {
398 return m.start_time < cutoff;
399 }),
400 query_history_.end());
401
402 // Remove old alerts
403 alerts_.erase(
404 std::remove_if(alerts_.begin(), alerts_.end(),
405 [cutoff](const performance_alert& alert) {
406 return alert.timestamp() < cutoff;
407 }),
408 alerts_.end());
409 }
std::vector< performance_alert > alerts_

References alerts_, metrics_mutex_, query_history_, and retention_period_.

Referenced by cleanup_thread().

Here is the caller graph for this function:

◆ cleanup_thread()

void database::monitoring::performance_monitor::cleanup_thread ( )
private

Definition at line 431 of file performance_monitor.cpp.

432 {
433 // Cleanup every 5 minutes, but check shutdown flag every second
434 const auto cleanup_interval = std::chrono::minutes(5);
435 auto last_cleanup = std::chrono::steady_clock::now();
436
437 while (cleanup_running_) {
438 std::unique_lock<std::mutex> lock(cleanup_mutex_);
439 // Wait for 1 second or until notified to stop
440 cleanup_cv_.wait_for(lock, std::chrono::seconds(1), [this] { return !cleanup_running_.load(); });
441
442 // Perform cleanup every 5 minutes
443 auto now = std::chrono::steady_clock::now();
444 if (cleanup_running_ && (now - last_cleanup) >= cleanup_interval) {
447 last_cleanup = now;
448 }
449 }
450 }

References check_thresholds(), cleanup_cv_, cleanup_mutex_, cleanup_old_metrics(), and cleanup_running_.

Referenced by performance_monitor().

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

◆ clear_metrics()

void database::monitoring::performance_monitor::clear_metrics ( )

Definition at line 378 of file performance_monitor.cpp.

379 {
380 std::lock_guard<std::mutex> lock(metrics_mutex_);
381 query_history_.clear();
382 connection_metrics_.clear();
383 alerts_.clear();
384 query_patterns_.clear();
385 query_avg_times_.clear();
386 }
std::unordered_map< std::string, size_t > query_patterns_
std::unordered_map< database_types, connection_metrics > connection_metrics_
std::unordered_map< std::string, std::chrono::microseconds > query_avg_times_

References alerts_, connection_metrics_, metrics_mutex_, query_avg_times_, query_history_, and query_patterns_.

◆ emit_alert()

void database::monitoring::performance_monitor::emit_alert ( performance_alert::alert_type type,
const std::string & message )
private

Definition at line 469 of file performance_monitor.cpp.

470 {
471 performance_alert alert(type, message, std::chrono::steady_clock::now());
472
473 {
474 std::lock_guard<std::mutex> lock(metrics_mutex_);
475 alerts_.push_back(alert);
476 }
477
478 // Notify alert handlers
479 std::lock_guard<std::mutex> lock(handlers_mutex_);
480 for (const auto& handler : alert_handlers_) {
481 try {
482 handler(alert);
483 } catch (const std::exception& e) {
484 std::cerr << "Alert handler exception: " << e.what() << std::endl;
485 }
486 }
487 }
std::vector< std::function< void(const performance_alert &)> > alert_handlers_

References alert_handlers_, alerts_, handlers_mutex_, and metrics_mutex_.

Referenced by check_thresholds(), record_connection_metrics(), record_query_metrics(), and record_slow_query().

Here is the caller graph for this function:

◆ get_connection_metrics()

connection_metrics database::monitoring::performance_monitor::get_connection_metrics ( database_types db_type) const

Definition at line 339 of file performance_monitor.cpp.

340 {
341 std::lock_guard<std::mutex> lock(metrics_mutex_);
342 auto it = connection_metrics_.find(db_type);
343 if (it != connection_metrics_.end()) {
344 connection_metrics result;
345 result.total_connections.store(it->second.total_connections.load());
346 result.active_connections.store(it->second.active_connections.load());
347 result.idle_connections.store(it->second.idle_connections.load());
348 result.failed_connections.store(it->second.failed_connections.load());
349 result.avg_acquisition_time.store(it->second.avg_acquisition_time.load());
350 result.max_acquisition_time.store(it->second.max_acquisition_time.load());
351 result.last_update = it->second.last_update;
352 return result;
353 }
354 return connection_metrics{};
355 }

References database::monitoring::connection_metrics::active_connections, database::monitoring::connection_metrics::avg_acquisition_time, connection_metrics_, database::monitoring::connection_metrics::failed_connections, database::monitoring::connection_metrics::idle_connections, database::monitoring::connection_metrics::last_update, database::monitoring::connection_metrics::max_acquisition_time, metrics_mutex_, and database::monitoring::connection_metrics::total_connections.

◆ get_dashboard_html()

std::string database::monitoring::performance_monitor::get_dashboard_html ( ) const

◆ get_metrics_json()

std::string database::monitoring::performance_monitor::get_metrics_json ( ) const

Definition at line 411 of file performance_monitor.cpp.

412 {
413 auto summary = get_performance_summary();
414
415 std::ostringstream json;
416 json << "{\n";
417 json << " \"total_queries\": " << summary.total_queries << ",\n";
418 json << " \"successful_queries\": " << summary.successful_queries << ",\n";
419 json << " \"failed_queries\": " << summary.failed_queries << ",\n";
420 json << " \"avg_query_time_us\": " << summary.avg_query_time.count() << ",\n";
421 json << " \"queries_per_second\": " << summary.queries_per_second << ",\n";
422 json << " \"error_rate\": " << summary.error_rate << ",\n";
423 json << " \"total_connections\": " << summary.total_connections << ",\n";
424 json << " \"active_connections\": " << summary.active_connections << ",\n";
425 json << " \"connection_utilization\": " << summary.connection_utilization << "\n";
426 json << "}";
427
428 return json.str();
429 }

References get_performance_summary().

Here is the call graph for this function:

◆ get_performance_summary() [1/2]

performance_summary database::monitoring::performance_monitor::get_performance_summary ( ) const

Definition at line 174 of file performance_monitor.cpp.

175 {
176 std::lock_guard<std::mutex> lock(metrics_mutex_);
177
178 performance_summary summary;
179 summary.measurement_start = std::chrono::steady_clock::now() - retention_period_;
180 summary.measurement_end = std::chrono::steady_clock::now();
181
182 if (query_history_.empty()) {
183 return summary;
184 }
185
186 // Filter recent queries
187 auto recent_start = summary.measurement_start;
188 auto recent_queries = std::count_if(query_history_.begin(), query_history_.end(),
189 [recent_start](const query_metrics& m) {
190 return m.start_time >= recent_start;
191 });
192
193 summary.total_queries = recent_queries;
194
195 // Calculate metrics from recent queries
196 std::chrono::microseconds total_time{0};
197 std::chrono::microseconds min_time{std::chrono::microseconds::max()};
198 std::chrono::microseconds max_time{0};
199 size_t successful = 0;
200
201 for (const auto& metrics : query_history_) {
202 if (metrics.start_time < recent_start) continue;
203
204 total_time += metrics.execution_time;
205 min_time = std::min(min_time, metrics.execution_time);
206 max_time = std::max(max_time, metrics.execution_time);
207
208 if (metrics.success) {
209 successful++;
210 } else {
211 summary.error_counts[metrics.error_message]++;
212 }
213 }
214
215 summary.successful_queries = successful;
216 summary.failed_queries = summary.total_queries - successful;
217
218 if (summary.total_queries > 0) {
219 summary.avg_query_time = total_time / summary.total_queries;
220 summary.min_query_time = min_time;
221 summary.max_query_time = max_time;
222 summary.error_rate = double(summary.failed_queries) / summary.total_queries;
223 }
224
225 // Calculate QPS
226 auto duration_seconds = std::chrono::duration_cast<std::chrono::seconds>(
227 summary.measurement_end - summary.measurement_start).count();
228 if (duration_seconds > 0) {
229 summary.queries_per_second = double(summary.total_queries) / duration_seconds;
230 }
231
232 // Connection metrics summary
233 size_t total_connections = 0;
234 size_t active_connections = 0;
235 for (const auto& [db_type, conn_metrics] : connection_metrics_) {
236 total_connections += conn_metrics.total_connections.load();
237 active_connections += conn_metrics.active_connections.load();
238 }
239
240 summary.total_connections = total_connections;
241 summary.active_connections = active_connections;
242 if (total_connections > 0) {
243 summary.connection_utilization = double(active_connections) / total_connections;
244 }
245
246 return summary;
247 }

References database::monitoring::performance_summary::active_connections, database::monitoring::performance_summary::avg_query_time, connection_metrics_, database::monitoring::performance_summary::connection_utilization, database::monitoring::performance_summary::error_counts, database::monitoring::performance_summary::error_rate, database::monitoring::performance_summary::failed_queries, database::monitoring::performance_summary::max_query_time, database::monitoring::performance_summary::measurement_end, database::monitoring::performance_summary::measurement_start, metrics_mutex_, database::monitoring::performance_summary::min_query_time, database::monitoring::performance_summary::queries_per_second, query_history_, retention_period_, database::monitoring::performance_summary::successful_queries, database::monitoring::performance_summary::total_connections, and database::monitoring::performance_summary::total_queries.

Referenced by check_thresholds(), and get_metrics_json().

Here is the caller graph for this function:

◆ get_performance_summary() [2/2]

performance_summary database::monitoring::performance_monitor::get_performance_summary ( database_types db_type) const

Definition at line 249 of file performance_monitor.cpp.

250 {
251 std::lock_guard<std::mutex> lock(metrics_mutex_);
252
253 performance_summary summary;
254 summary.measurement_start = std::chrono::steady_clock::now() - retention_period_;
255 summary.measurement_end = std::chrono::steady_clock::now();
256
257 // Filter by database type and time
258 auto recent_start = summary.measurement_start;
259 auto db_queries = std::count_if(query_history_.begin(), query_history_.end(),
260 [recent_start, db_type](const query_metrics& m) {
261 return m.start_time >= recent_start && m.db_type == db_type;
262 });
263
264 summary.total_queries = db_queries;
265
266 // Calculate metrics for specific database type
267 std::chrono::microseconds total_time{0};
268 size_t successful = 0;
269
270 for (const auto& metrics : query_history_) {
271 if (metrics.start_time < recent_start || metrics.db_type != db_type) continue;
272
273 total_time += metrics.execution_time;
274 if (metrics.success) {
275 successful++;
276 }
277 }
278
279 summary.successful_queries = successful;
280 summary.failed_queries = summary.total_queries - successful;
281
282 if (summary.total_queries > 0) {
283 summary.avg_query_time = total_time / summary.total_queries;
284 summary.error_rate = double(summary.failed_queries) / summary.total_queries;
285 }
286
287 // Connection metrics for specific database
288 auto it = connection_metrics_.find(db_type);
289 if (it != connection_metrics_.end()) {
290 summary.total_connections = it->second.total_connections.load();
291 summary.active_connections = it->second.active_connections.load();
292 if (summary.total_connections > 0) {
293 summary.connection_utilization = double(summary.active_connections) / summary.total_connections;
294 }
295 }
296
297 return summary;
298 }

References database::monitoring::performance_summary::active_connections, database::monitoring::performance_summary::avg_query_time, connection_metrics_, database::monitoring::performance_summary::connection_utilization, database::monitoring::performance_summary::error_rate, database::monitoring::performance_summary::failed_queries, database::monitoring::performance_summary::measurement_end, database::monitoring::performance_summary::measurement_start, metrics_mutex_, query_history_, retention_period_, database::monitoring::performance_summary::successful_queries, database::monitoring::performance_summary::total_connections, and database::monitoring::performance_summary::total_queries.

◆ get_recent_alerts()

std::vector< performance_alert > database::monitoring::performance_monitor::get_recent_alerts ( std::chrono::minutes window) const

Definition at line 363 of file performance_monitor.cpp.

364 {
365 std::lock_guard<std::mutex> lock(metrics_mutex_);
366
367 auto cutoff = std::chrono::steady_clock::now() - window;
368 std::vector<performance_alert> recent;
369
370 std::copy_if(alerts_.begin(), alerts_.end(), std::back_inserter(recent),
371 [cutoff](const performance_alert& alert) {
372 return alert.timestamp() >= cutoff;
373 });
374
375 return recent;
376 }

References alerts_, and metrics_mutex_.

◆ get_recent_queries()

std::vector< query_metrics > database::monitoring::performance_monitor::get_recent_queries ( std::chrono::minutes window) const

Definition at line 300 of file performance_monitor.cpp.

301 {
302 std::lock_guard<std::mutex> lock(metrics_mutex_);
303
304 auto cutoff = std::chrono::steady_clock::now() - window;
305 std::vector<query_metrics> recent;
306
307 std::copy_if(query_history_.begin(), query_history_.end(), std::back_inserter(recent),
308 [cutoff](const query_metrics& m) {
309 return m.start_time >= cutoff;
310 });
311
312 return recent;
313 }

References metrics_mutex_, and query_history_.

◆ get_slow_queries()

std::vector< query_metrics > database::monitoring::performance_monitor::get_slow_queries ( std::chrono::microseconds threshold) const

Definition at line 315 of file performance_monitor.cpp.

316 {
317 std::lock_guard<std::mutex> lock(metrics_mutex_);
318
319 std::vector<query_metrics> slow_queries;
320 std::copy_if(query_history_.begin(), query_history_.end(), std::back_inserter(slow_queries),
321 [threshold](const query_metrics& m) {
322 return m.execution_time >= threshold;
323 });
324
325 return slow_queries;
326 }

References metrics_mutex_, and query_history_.

◆ record_connection_metrics()

void database::monitoring::performance_monitor::record_connection_metrics ( database_types db_type,
const connection_metrics & metrics )

Definition at line 135 of file performance_monitor.cpp.

136 {
137 if (!monitoring_enabled_) return;
138
139 bool pool_exhaustion = false;
140 size_t active = 0;
141 size_t total = 0;
142 {
143 std::lock_guard<std::mutex> lock(metrics_mutex_);
144 auto& stored_metrics = connection_metrics_[db_type];
145 stored_metrics.total_connections.store(metrics.total_connections.load());
146 stored_metrics.active_connections.store(metrics.active_connections.load());
147 stored_metrics.idle_connections.store(metrics.idle_connections.load());
148 stored_metrics.failed_connections.store(metrics.failed_connections.load());
149 stored_metrics.avg_acquisition_time.store(metrics.avg_acquisition_time.load());
150 stored_metrics.max_acquisition_time.store(metrics.max_acquisition_time.load());
151 stored_metrics.last_update = metrics.last_update;
152
153 // Check for connection pool exhaustion (evaluate under lock, act outside)
154 total = metrics.total_connections.load();
155 active = metrics.active_connections.load();
156 pool_exhaustion = (total > 0 && (double(active) / total) > 0.9);
157 }
158
159 if (pool_exhaustion) {
161 "Connection pool utilization high: " + std::to_string(active) + "/" + std::to_string(total));
162 }
163 }

References database::monitoring::connection_metrics::active_connections, database::monitoring::connection_metrics::avg_acquisition_time, connection_metrics_, database::monitoring::performance_alert::connection_pool_exhaustion, emit_alert(), database::monitoring::connection_metrics::failed_connections, database::monitoring::connection_metrics::idle_connections, database::monitoring::connection_metrics::last_update, database::monitoring::connection_metrics::max_acquisition_time, metrics_mutex_, monitoring_enabled_, and database::monitoring::connection_metrics::total_connections.

Here is the call graph for this function:

◆ record_query_metrics()

void database::monitoring::performance_monitor::record_query_metrics ( const query_metrics & metrics)

Definition at line 104 of file performance_monitor.cpp.

105 {
106 if (!monitoring_enabled_) return;
107
108 bool slow_query = false;
109 {
110 std::lock_guard<std::mutex> lock(metrics_mutex_);
111 query_history_.push_back(metrics);
112
113 // Update query patterns
114 query_patterns_[metrics.query_hash]++;
115
116 auto& avg_time = query_avg_times_[metrics.query_hash];
117 auto count = query_patterns_[metrics.query_hash];
118 avg_time = std::chrono::microseconds(
119 (avg_time.count() * (count - 1) + metrics.execution_time.count()) / count);
120
121 // Check for slow queries (evaluate under lock, act outside)
122 slow_query = (metrics.execution_time > latency_threshold_);
123 }
124
125 // emit_alert and check_thresholds acquire metrics_mutex_ internally,
126 // so they must be called outside the lock scope to avoid deadlock
127 if (slow_query) {
129 "Slow query detected: " + std::to_string(metrics.execution_time.count()) + "μs");
130 }
131
133 }

References check_thresholds(), emit_alert(), database::monitoring::query_metrics::execution_time, latency_threshold_, metrics_mutex_, monitoring_enabled_, query_avg_times_, database::monitoring::query_metrics::query_hash, query_history_, query_patterns_, and database::monitoring::performance_alert::slow_query.

Here is the call graph for this function:

◆ record_slow_query()

void database::monitoring::performance_monitor::record_slow_query ( const std::string & query,
std::chrono::microseconds execution_time )

Definition at line 165 of file performance_monitor.cpp.

166 {
167 if (!monitoring_enabled_) return;
168
170 "Slow query: " + query.substr(0, 100) + "... (" +
171 std::to_string(execution_time.count()) + "μs)");
172 }

References emit_alert(), monitoring_enabled_, and database::monitoring::performance_alert::slow_query.

Here is the call graph for this function:

◆ register_alert_handler()

void database::monitoring::performance_monitor::register_alert_handler ( std::function< void(const performance_alert &)> handler)

Definition at line 357 of file performance_monitor.cpp.

358 {
359 std::lock_guard<std::mutex> lock(handlers_mutex_);
360 alert_handlers_.push_back(handler);
361 }

References alert_handlers_, and handlers_mutex_.

◆ set_alert_thresholds()

void database::monitoring::performance_monitor::set_alert_thresholds ( double error_rate_threshold,
std::chrono::microseconds latency_threshold )

Definition at line 97 of file performance_monitor.cpp.

99 {
100 error_rate_threshold_ = error_rate_threshold;
101 latency_threshold_ = latency_threshold;
102 }

References error_rate_threshold_, and latency_threshold_.

◆ set_metrics_retention_period()

void database::monitoring::performance_monitor::set_metrics_retention_period ( std::chrono::minutes period)
inline

Definition at line 212 of file performance_monitor.h.

212{ retention_period_ = period; }

References retention_period_.

◆ set_monitoring_enabled()

void database::monitoring::performance_monitor::set_monitoring_enabled ( bool enabled)
inline

Definition at line 211 of file performance_monitor.h.

211{ monitoring_enabled_ = enabled; }

References monitoring_enabled_.

◆ update_connection_count()

void database::monitoring::performance_monitor::update_connection_count ( database_types db_type,
size_t active,
size_t total )

Definition at line 328 of file performance_monitor.cpp.

329 {
330 if (!monitoring_enabled_) return;
331
332 std::lock_guard<std::mutex> lock(metrics_mutex_);
333 auto& metrics = connection_metrics_[db_type];
334 metrics.active_connections = active;
335 metrics.total_connections = total;
336 metrics.last_update = std::chrono::steady_clock::now();
337 }

References connection_metrics_, metrics_mutex_, and monitoring_enabled_.

Member Data Documentation

◆ alert_handlers_

std::vector<std::function<void(const performance_alert&)> > database::monitoring::performance_monitor::alert_handlers_
private

Definition at line 264 of file performance_monitor.h.

Referenced by emit_alert(), and register_alert_handler().

◆ alerts_

std::vector<performance_alert> database::monitoring::performance_monitor::alerts_
private

◆ cleanup_cv_

std::condition_variable database::monitoring::performance_monitor::cleanup_cv_
private

Definition at line 269 of file performance_monitor.h.

Referenced by cleanup_thread(), and ~performance_monitor().

◆ cleanup_mutex_

std::mutex database::monitoring::performance_monitor::cleanup_mutex_
private

Definition at line 270 of file performance_monitor.h.

Referenced by cleanup_thread().

◆ cleanup_running_

std::atomic<bool> database::monitoring::performance_monitor::cleanup_running_ {true}
private

Definition at line 267 of file performance_monitor.h.

267{true};

Referenced by cleanup_thread(), performance_monitor(), and ~performance_monitor().

◆ cleanup_thread_

std::thread database::monitoring::performance_monitor::cleanup_thread_
private

Definition at line 268 of file performance_monitor.h.

Referenced by performance_monitor(), and ~performance_monitor().

◆ connection_metrics_

std::unordered_map<database_types, connection_metrics> database::monitoring::performance_monitor::connection_metrics_
private

◆ error_rate_threshold_

double database::monitoring::performance_monitor::error_rate_threshold_ = 0.05
private

Definition at line 253 of file performance_monitor.h.

Referenced by check_thresholds(), and set_alert_thresholds().

◆ handlers_mutex_

std::mutex database::monitoring::performance_monitor::handlers_mutex_
private

Definition at line 263 of file performance_monitor.h.

Referenced by emit_alert(), and register_alert_handler().

◆ latency_threshold_

std::chrono::microseconds database::monitoring::performance_monitor::latency_threshold_ {1000000}
private

Definition at line 254 of file performance_monitor.h.

254{1000000}; // 1 second

Referenced by check_thresholds(), record_query_metrics(), and set_alert_thresholds().

◆ metrics_mutex_

◆ monitoring_enabled_

std::atomic<bool> database::monitoring::performance_monitor::monitoring_enabled_ {true}
private

◆ query_avg_times_

std::unordered_map<std::string, std::chrono::microseconds> database::monitoring::performance_monitor::query_avg_times_
private

Definition at line 274 of file performance_monitor.h.

Referenced by clear_metrics(), and record_query_metrics().

◆ query_history_

std::vector<query_metrics> database::monitoring::performance_monitor::query_history_
private

◆ query_patterns_

std::unordered_map<std::string, size_t> database::monitoring::performance_monitor::query_patterns_
private

Definition at line 273 of file performance_monitor.h.

Referenced by clear_metrics(), and record_query_metrics().

◆ retention_period_

std::chrono::minutes database::monitoring::performance_monitor::retention_period_ {60}
private

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