PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
health_checker.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
19#pragma once
20
21#include "health_status.h"
22
23#include <chrono>
24#include <functional>
25#include <memory>
26#include <mutex>
27#include <shared_mutex>
28#include <string>
29#include <string_view>
30#include <unordered_map>
31
32namespace kcenon::pacs::storage {
33// Forward declarations
34class index_database;
35class file_storage;
36} // namespace kcenon::pacs::storage
37
39
46 std::chrono::seconds check_interval{30};
47
49 std::chrono::milliseconds database_timeout{5000};
50
52 std::chrono::milliseconds storage_timeout{5000};
53
56
59
61 std::chrono::seconds cache_duration{5};
62
65};
66
107public:
108 // =========================================================================
109 // Type Aliases
110 // =========================================================================
111
113 using check_callback = std::function<bool(std::string& error_message)>;
114
115 // =========================================================================
116 // Construction
117 // =========================================================================
118
123
129
134
138
140 health_checker(health_checker&& other) noexcept;
141 health_checker& operator=(health_checker&& other) noexcept;
142
143 // =========================================================================
144 // Component Registration
145 // =========================================================================
146
152
158
168 void register_check(std::string_view name, check_callback callback);
169
174 void unregister_check(std::string_view name);
175
176 // =========================================================================
177 // Health Check Operations
178 // =========================================================================
179
188 [[nodiscard]] health_status check();
189
198 [[nodiscard]] bool is_alive() const noexcept;
199
208 [[nodiscard]] bool is_ready();
209
218 [[nodiscard]] health_status get_cached_status() const;
219
228 [[nodiscard]] health_status get_status();
229
230 // =========================================================================
231 // Metrics Access
232 // =========================================================================
233
244 void update_association_metrics(std::uint32_t active,
245 std::uint32_t max,
246 std::uint64_t total_established,
247 std::uint64_t total_failed);
248
260 void update_storage_metrics(std::uint64_t instances,
261 std::uint64_t studies,
262 std::uint64_t series,
263 std::uint64_t successful_stores,
264 std::uint64_t failed_stores);
265
274 void set_version(std::uint16_t major,
275 std::uint16_t minor,
276 std::uint16_t patch,
277 std::string_view build_id = "");
278
279 // =========================================================================
280 // Configuration
281 // =========================================================================
282
287 [[nodiscard]] const health_checker_config& config() const noexcept;
288
294
295private:
296 // =========================================================================
297 // Internal Check Methods
298 // =========================================================================
299
304 void check_database(health_status& status);
305
310 void check_storage(health_status& status);
311
316 void run_custom_checks(health_status& status);
317
318 // =========================================================================
319 // Member Variables
320 // =========================================================================
321
324
326 kcenon::pacs::storage::index_database* database_{nullptr};
327
330
332 std::unordered_map<std::string, check_callback> custom_checks_;
333
336
338 std::chrono::system_clock::time_point last_check_time_;
339
342
345
348
350 mutable std::shared_mutex mutex_;
351};
352
353} // namespace kcenon::pacs::monitoring
Performs comprehensive health checks on PACS system components.
void register_check(std::string_view name, check_callback callback)
Register a custom health check.
void update_association_metrics(std::uint32_t active, std::uint32_t max, std::uint64_t total_established, std::uint64_t total_failed)
Update association metrics.
health_status get_cached_status() const
Get cached health status.
kcenon::pacs::storage::file_storage * storage_
Storage instance to monitor.
~health_checker()
Destructor - stops background checking if enabled.
void update_storage_metrics(std::uint64_t instances, std::uint64_t studies, std::uint64_t series, std::uint64_t successful_stores, std::uint64_t failed_stores)
Update storage metrics.
association_metrics associations_
Association metrics (updated externally)
health_checker & operator=(const health_checker &)=delete
kcenon::pacs::storage::index_database * database_
Database instance to monitor.
void set_database(kcenon::pacs::storage::index_database *database)
Set the database instance to monitor.
storage_metrics storage_metrics_
Storage metrics (updated externally)
std::chrono::system_clock::time_point last_check_time_
Timestamp of last check.
void unregister_check(std::string_view name)
Unregister a custom health check.
void set_config(const health_checker_config &config)
Update configuration.
void check_database(health_status &status)
Check database connectivity.
void set_storage(kcenon::pacs::storage::file_storage *storage)
Set the storage instance to monitor.
health_status get_status()
Get cached status or perform check if stale.
std::unordered_map< std::string, check_callback > custom_checks_
Custom health checks.
health_status check()
Perform a full health check.
version_info version_
Version information.
bool is_ready()
Perform a readiness check.
bool is_alive() const noexcept
Perform a quick liveness check.
health_checker_config config_
Configuration.
void set_version(std::uint16_t major, std::uint16_t minor, std::uint16_t patch, std::string_view build_id="")
Set version information.
const health_checker_config & config() const noexcept
Get current configuration.
void run_custom_checks(health_status &status)
Run all custom checks.
health_status cached_status_
Cached health status.
void check_storage(health_status &status)
Check storage availability.
std::shared_mutex mutex_
Mutex for thread safety.
health_checker(const health_checker &)=delete
Non-copyable.
health_checker()
Construct health checker with default configuration.
std::function< bool(std::string &error_message)> check_callback
Custom health check callback type.
Health status data structures for PACS system monitoring.
Configuration options for the health checker.
std::chrono::seconds cache_duration
Cache health check results for this duration.
std::chrono::seconds check_interval
Interval between automatic health checks.
std::chrono::milliseconds database_timeout
Timeout for database connectivity test.
std::chrono::milliseconds storage_timeout
Timeout for storage write test.
double storage_critical_threshold
Storage usage threshold for unhealthy status (percentage)
double storage_warning_threshold
Storage usage threshold for degraded status (percentage)
bool background_checks_enabled
Enable background health checking.
Comprehensive health status of the PACS system.
DICOM storage operation statistics.
PACS system version information.
std::string_view name