32#ifdef PACS_WITH_DATABASE_SYSTEM
39struct database_health {
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;
60struct database_metrics {
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};
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};
75 size_t active_connections{0};
77 double connection_utilization{0.0};
80 double error_rate{0.0};
81 size_t slow_query_count{0};
88 std::string query_hash;
89 std::string query_preview;
91 std::string timestamp;
132class database_metrics_service {
135 using slow_query_callback = std::function<void(
const slow_query&)>;
142 explicit database_metrics_service(
143 std::shared_ptr<storage::pacs_database_adapter> db);
148 ~database_metrics_service();
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&;
169 void set_slow_query_threshold(std::chrono::microseconds threshold);
176 void set_metrics_retention(std::chrono::minutes retention);
186 void register_slow_query_callback(slow_query_callback callback);
204 [[nodiscard]] auto check_health() -> database_health;
211 [[nodiscard]] auto is_healthy() ->
bool;
224 [[nodiscard]] auto get_current_metrics() -> database_metrics;
232 [[nodiscard]] auto get_slow_queries(
233 std::chrono::minutes since = std::chrono::minutes(5))
234 -> std::vector<slow_query>;
244 [[nodiscard]] auto get_top_slow_queries(
size_t limit = 10)
245 -> std::vector<slow_query>;
266 [[nodiscard]] auto export_prometheus_metrics() -> std::
string;
270 std::unique_ptr<impl> impl_;
279[[nodiscard]] auto health_status_to_string(database_health::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.