PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
database_metrics_service.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
22#pragma once
23
25
26#include <chrono>
27#include <functional>
28#include <memory>
29#include <string>
30#include <vector>
31
32#ifdef PACS_WITH_DATABASE_SYSTEM
33
35
39struct database_health {
43 enum class status {
44 healthy,
45 degraded,
47 };
48
49 status current_status;
50 std::string message;
51 std::chrono::milliseconds response_time{0};
52 size_t active_connections{0};
53 double error_rate{0.0};
54 std::vector<std::string> warnings;
55};
56
60struct database_metrics {
61 // Query statistics
62 size_t total_queries{0};
63 size_t successful_queries{0};
64 size_t failed_queries{0};
65 double queries_per_second{0.0};
66
67 // Latency (microseconds)
68 uint64_t avg_latency_us{0};
69 uint64_t min_latency_us{0};
70 uint64_t max_latency_us{0};
71 uint64_t p95_latency_us{0};
72 uint64_t p99_latency_us{0};
73
74 // Connections
75 size_t active_connections{0};
76 size_t pool_size{0};
77 double connection_utilization{0.0};
78
79 // Errors
80 double error_rate{0.0};
81 size_t slow_query_count{0};
82};
83
87struct slow_query {
88 std::string query_hash;
89 std::string query_preview;
90 uint64_t duration_us;
91 std::string timestamp;
92 size_t rows_affected;
93};
94
132class database_metrics_service {
133public:
135 using slow_query_callback = std::function<void(const slow_query&)>;
136
142 explicit database_metrics_service(
143 std::shared_ptr<storage::pacs_database_adapter> db);
144
148 ~database_metrics_service();
149
150 // Non-copyable, movable
151 database_metrics_service(const database_metrics_service&) = delete;
152 auto operator=(const database_metrics_service&)
153 -> database_metrics_service& = delete;
154 database_metrics_service(database_metrics_service&&) noexcept;
155 auto operator=(database_metrics_service&&) noexcept
156 -> database_metrics_service&;
157
158 // ========================================================================
159 // Configuration
160 // ========================================================================
161
169 void set_slow_query_threshold(std::chrono::microseconds threshold);
170
176 void set_metrics_retention(std::chrono::minutes retention);
177
186 void register_slow_query_callback(slow_query_callback callback);
187
188 // ========================================================================
189 // Health Checks
190 // ========================================================================
191
204 [[nodiscard]] auto check_health() -> database_health;
205
211 [[nodiscard]] auto is_healthy() -> bool;
212
213 // ========================================================================
214 // Metrics Retrieval
215 // ========================================================================
216
224 [[nodiscard]] auto get_current_metrics() -> database_metrics;
225
232 [[nodiscard]] auto get_slow_queries(
233 std::chrono::minutes since = std::chrono::minutes(5))
234 -> std::vector<slow_query>;
235
244 [[nodiscard]] auto get_top_slow_queries(size_t limit = 10)
245 -> std::vector<slow_query>;
246
247 // ========================================================================
248 // Metrics Export
249 // ========================================================================
250
266 [[nodiscard]] auto export_prometheus_metrics() -> std::string;
267
268private:
269 struct impl;
270 std::unique_ptr<impl> impl_;
271};
272
279[[nodiscard]] auto health_status_to_string(database_health::status status)
280 -> std::string;
281
282} // namespace kcenon::pacs::services::monitoring
283
284#endif // PACS_WITH_DATABASE_SYSTEM
constexpr dicom_tag status
Status.
@ healthy
All components healthy, system fully operational.
@ degraded
Some non-critical components degraded, system operational.
@ unhealthy
Critical components failing, system may not function correctly.
Unified database adapter for PACS system.