34 std::cout <<
"=== Basic Performance Metrics Demonstration ===\n";
37 auto monitor = context->get_performance_monitor();
40 monitoring_config config;
41 config.enable_query_tracking =
true;
42 config.enable_connection_tracking =
true;
43 config.slow_query_threshold = std::chrono::milliseconds(100);
44 config.alert_threshold_cpu = 80.0;
45 config.alert_threshold_memory = 85.0;
47 monitor->configure(config);
48 std::cout <<
"Performance monitoring configured with:\n";
49 std::cout <<
" - Query tracking: enabled\n";
50 std::cout <<
" - Connection tracking: enabled\n";
51 std::cout <<
" - Slow query threshold: 100ms\n";
52 std::cout <<
" - CPU alert threshold: 80%\n";
53 std::cout <<
" - Memory alert threshold: 85%\n";
56 const auto& system_metrics = monitor->get_system_metrics();
57 std::cout <<
"\nCurrent System Metrics:\n";
58 std::cout <<
" CPU Usage: " << system_metrics.cpu_usage_percent <<
"%\n";
59 std::cout <<
" Memory Usage: " << system_metrics.memory_usage_percent <<
"%\n";
60 std::cout <<
" Disk I/O: " << system_metrics.disk_io_bytes_per_sec <<
" bytes/sec\n";
61 std::cout <<
" Network I/O: " << system_metrics.network_io_bytes_per_sec <<
" bytes/sec\n";
65 std::cout <<
"\n=== Query Performance Tracking ===\n";
67 auto monitor = context->get_performance_monitor();
70 std::random_device rd;
71 std::mt19937 gen(rd());
72 std::uniform_int_distribution<> query_time_dist(10, 200);
73 std::uniform_int_distribution<> success_rate(1, 100);
75 std::cout <<
"Simulating database queries...\n";
77 for (
int i = 0; i < 20; ++i) {
78 std::string query_type = (i % 4 == 0) ?
"SELECT" :
79 (i % 4 == 1) ?
"INSERT" :
80 (i % 4 == 2) ?
"UPDATE" :
"DELETE";
82 auto start_time = std::chrono::high_resolution_clock::now();
85 auto execution_time = std::chrono::milliseconds(query_time_dist(gen));
86 std::this_thread::sleep_for(execution_time);
88 auto end_time = std::chrono::high_resolution_clock::now();
89 bool success = success_rate(gen) > 5;
93 metrics.query_type = query_type;
97 metrics.timestamp = start_time;
99 monitor->record_query_execution(metrics);
101 std::cout <<
" Query " << (i+1) <<
" (" << query_type <<
"): "
102 << execution_time.count() <<
"ms, "
103 << (
success ?
"SUCCESS" :
"FAILED") <<
"\n";
107 std::cout <<
"\nQuery Performance Summary:\n";
108 const auto& query_stats = monitor->get_query_statistics();
110 std::cout <<
" Total Queries: " << query_stats.total_queries <<
"\n";
111 std::cout <<
" Successful Queries: " << query_stats.successful_queries <<
"\n";
112 std::cout <<
" Failed Queries: " << query_stats.failed_queries <<
"\n";
113 std::cout <<
" Success Rate: " <<
114 (100.0 * query_stats.successful_queries / query_stats.total_queries) <<
"%\n";
115 std::cout <<
" Average Execution Time: " <<
116 query_stats.average_execution_time.count() <<
"ms\n";
117 std::cout <<
" Slow Queries Detected: " << query_stats.slow_queries_count <<
"\n";
121 std::cout <<
"\n=== Connection Pool Performance Monitoring ===\n";
123 auto monitor = context->get_performance_monitor();
126 std::cout <<
"Simulating connection pool operations...\n";
128 for (
int i = 0; i < 15; ++i) {
130 auto start_time = std::chrono::high_resolution_clock::now();
133 std::this_thread::sleep_for(std::chrono::milliseconds(5 + (i % 3) * 10));
135 auto end_time = std::chrono::high_resolution_clock::now();
141 metrics.connections_created.store(25 + i);
142 metrics.connections_destroyed.store(5 + (i / 5));
143 metrics.connection_errors.store(i / 10);
144 metrics.average_wait_time = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
145 metrics.peak_connections.store(std::max(
static_cast<size_t>(20), metrics.
active_connections.load()));
147 monitor->record_connection_metrics(metrics);
149 std::cout <<
" Pool State " << (i+1) <<
": "
152 <<
"wait time: " << metrics.average_wait_time.count() <<
"ms\n";
156 std::cout <<
"\nConnection Pool Performance Summary:\n";
157 const auto& pool_stats = monitor->get_connection_pool_statistics();
159 std::cout <<
" Pool Utilization: " << pool_stats.utilization_percentage <<
"%\n";
160 std::cout <<
" Average Wait Time: " << pool_stats.average_wait_time.count() <<
"ms\n";
161 std::cout <<
" Peak Connections: " << pool_stats.peak_connections <<
"\n";
162 std::cout <<
" Connection Errors: " << pool_stats.connection_errors <<
"\n";
163 std::cout <<
" Pool Efficiency Score: " << pool_stats.efficiency_score <<
"/100\n";
167 std::cout <<
"\n=== Real-Time Performance Monitoring ===\n";
169 auto monitor = context->get_performance_monitor();
171 std::cout <<
"Starting real-time monitoring (5 seconds)...\n";
173 auto start_time = std::chrono::steady_clock::now();
174 int update_count = 0;
176 while (std::chrono::steady_clock::now() - start_time < std::chrono::seconds(5)) {
177 std::this_thread::sleep_for(std::chrono::seconds(1));
181 const auto& system_metrics = monitor->get_system_metrics();
182 const auto& alerts = monitor->get_active_alerts();
184 std::cout <<
"\n[" << update_count <<
"s] Real-time Status:\n";
185 std::cout <<
" CPU: " << system_metrics.cpu_usage_percent <<
"%, "
186 <<
"Memory: " << system_metrics.memory_usage_percent <<
"%, "
187 <<
"Active Alerts: " << alerts.size() <<
"\n";
190 for (
const auto& alert : alerts) {
191 std::cout <<
" ā ļø ALERT: " << alert.message
192 <<
" (Severity: " <<
static_cast<int>(alert.severity) <<
")\n";
195 if (alerts.empty()) {
196 std::cout <<
" ā
All systems normal\n";
202 std::cout <<
"\n=== Performance Analysis and Reporting ===\n";
204 auto monitor = context->get_performance_monitor();
207 std::cout <<
"Generating comprehensive performance report...\n";
209 const auto& report = monitor->generate_performance_report();
211 std::cout <<
"\nš Performance Report Summary:\n";
212 std::cout <<
" Report Period: " << report.report_period_minutes <<
" minutes\n";
213 std::cout <<
" Total Operations: " << report.total_operations <<
"\n";
214 std::cout <<
" Average Response Time: " << report.average_response_time.count() <<
"ms\n";
215 std::cout <<
" Peak Throughput: " << report.peak_throughput_ops_per_sec <<
" ops/sec\n";
216 std::cout <<
" Error Rate: " << report.error_rate_percentage <<
"%\n";
218 std::cout <<
"\nš Top Performance Insights:\n";
219 for (
const auto& insight : report.performance_insights) {
220 std::cout <<
" ⢠" << insight <<
"\n";
223 std::cout <<
"\nš§ Optimization Recommendations:\n";
224 for (
const auto& recommendation : report.recommendations) {
225 std::cout <<
" ā " << recommendation <<
"\n";
230 std::cout <<
"\n=== Metrics Export for External Monitoring ===\n";
232 auto monitor = context->get_performance_monitor();
234 std::cout <<
"Exporting metrics in various formats...\n";
237 std::cout <<
"\n--- Prometheus Metrics Format ---\n";
238 const auto prometheus_metrics = monitor->export_prometheus_metrics();
239 std::cout << prometheus_metrics.substr(0, 300) <<
"...\n";
242 std::cout <<
"\n--- JSON Metrics Format ---\n";
243 const auto json_metrics = monitor->export_json_metrics();
244 std::cout << json_metrics.substr(0, 200) <<
"...\n";
247 std::cout <<
"\n--- CSV Export for Analysis ---\n";
248 const auto csv_data = monitor->export_csv_metrics();
249 std::cout <<
"CSV data exported: " << csv_data.size() <<
" bytes\n";
250 std::cout <<
"First few lines:\n";
251 auto first_newline = csv_data.find(
'\n', csv_data.find(
'\n') + 1);
252 std::cout << csv_data.substr(0, first_newline) <<
"\n";
254 std::cout <<
"\nMetrics can be integrated with:\n";
255 std::cout <<
" ⢠Prometheus + Grafana for visualization\n";
256 std::cout <<
" ⢠ELK Stack for log analysis\n";
257 std::cout <<
" ⢠Custom monitoring dashboards\n";
258 std::cout <<
" ⢠Third-party APM solutions\n";
262 std::cout <<
"\n=== Alerting and Notification System ===\n";
264 auto monitor = context->get_performance_monitor();
268 cpu_rule.metric_name =
"cpu_usage_percent";
269 cpu_rule.threshold_value = 75.0;
270 cpu_rule.comparison = alert_comparison::greater_than;
271 cpu_rule.severity = alert_severity::warning;
272 cpu_rule.message =
"High CPU usage detected";
274 alert_rule memory_rule;
275 memory_rule.metric_name =
"memory_usage_percent";
276 memory_rule.threshold_value = 90.0;
277 memory_rule.comparison = alert_comparison::greater_than;
278 memory_rule.severity = alert_severity::critical;
279 memory_rule.message =
"Critical memory usage level";
281 monitor->add_alert_rule(cpu_rule);
282 monitor->add_alert_rule(memory_rule);
284 std::cout <<
"Configured alert rules:\n";
285 std::cout <<
" ⢠CPU usage > 75% (Warning)\n";
286 std::cout <<
" ⢠Memory usage > 90% (Critical)\n";
289 std::cout <<
"\nSimulating alert conditions...\n";
293 std::cout <<
"Alert system is active and monitoring thresholds.\n";
294 std::cout <<
"In production, alerts would be sent via:\n";
295 std::cout <<
" ⢠Email notifications\n";
296 std::cout <<
" ⢠Slack/Teams integration\n";
297 std::cout <<
" ⢠SMS alerts for critical issues\n";
298 std::cout <<
" ⢠Webhook notifications to external systems\n";
Dependency injection container for database system components.