|
PACS System 0.1.0
PACS DICOM system library
|
#include <remote_node_manager.h>

Classes | |
| struct | impl |
Public Member Functions | |
| remote_node_manager (std::shared_ptr< storage::node_repository > repo, node_manager_config config={}, std::shared_ptr< di::ILogger > logger=nullptr) | |
| Construct a remote node manager. | |
| ~remote_node_manager () | |
| Destructor - stops health check if running. | |
| remote_node_manager (const remote_node_manager &)=delete | |
| auto | operator= (const remote_node_manager &) -> remote_node_manager &=delete |
| remote_node_manager (remote_node_manager &&)=delete | |
| auto | operator= (remote_node_manager &&) -> remote_node_manager &=delete |
| auto | add_node (const remote_node &node) -> kcenon::pacs::VoidResult |
| Add a new remote node. | |
| auto | update_node (const remote_node &node) -> kcenon::pacs::VoidResult |
| Update an existing remote node. | |
| auto | remove_node (std::string_view node_id) -> kcenon::pacs::VoidResult |
| Remove a remote node. | |
| auto | get_node (std::string_view node_id) const -> std::optional< remote_node > |
| Get a node by ID. | |
| auto | list_nodes () const -> std::vector< remote_node > |
| List all registered nodes. | |
| auto | list_nodes_by_status (node_status status) const -> std::vector< remote_node > |
| List nodes filtered by status. | |
| auto | verify_node (std::string_view node_id) -> kcenon::pacs::VoidResult |
| Verify a node's connectivity synchronously. | |
| auto | verify_node_async (std::string_view node_id) -> std::future< kcenon::pacs::VoidResult > |
| Verify a node's connectivity asynchronously. | |
| void | verify_all_nodes_async () |
| Verify all nodes asynchronously. | |
| auto | acquire_association (std::string_view node_id, std::span< const std::string > sop_classes) -> kcenon::pacs::Result< std::unique_ptr< network::association > > |
| Acquire an association from the pool. | |
| void | release_association (std::string_view node_id, std::unique_ptr< network::association > assoc) |
| Release an association back to the pool. | |
| void | start_health_check () |
| Start the automatic health check scheduler. | |
| void | stop_health_check () |
| Stop the automatic health check scheduler. | |
| auto | is_health_check_running () const noexcept -> bool |
| Check if health check is running. | |
| auto | get_status (std::string_view node_id) const -> node_status |
| Get the current status of a node. | |
| void | set_status_callback (node_status_callback callback) |
| Set the status change callback. | |
| auto | get_statistics (std::string_view node_id) const -> node_statistics |
| Get statistics for a node. | |
| void | reset_statistics (std::string_view node_id="") |
| Reset statistics for a node. | |
| auto | config () const noexcept -> const node_manager_config & |
| Get the current configuration. | |
| void | set_config (node_manager_config new_config) |
| Update the configuration. | |
Private Attributes | |
| std::unique_ptr< impl > | impl_ |
Definition at line 93 of file remote_node_manager.h.
|
explicit |
Construct a remote node manager.
| repo | Repository for node persistence (required) |
| config | Configuration options |
| logger | Logger instance (optional, defaults to NullLogger) |
Definition at line 288 of file remote_node_manager.cpp.
References kcenon::pacs::client::node_manager_config::auto_start_health_check, config(), kcenon::pacs::client::remote_node_manager::impl::config, impl_, kcenon::pacs::client::remote_node_manager::impl::load_nodes_from_repo(), kcenon::pacs::client::remote_node_manager::impl::logger, kcenon::pacs::di::null_logger(), kcenon::pacs::client::remote_node_manager::impl::repo, and start_health_check().

| kcenon::pacs::client::remote_node_manager::~remote_node_manager | ( | ) |
Destructor - stops health check if running.
Definition at line 307 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::connection_pool, impl_, kcenon::pacs::client::remote_node_manager::impl::pool_mutex, and stop_health_check().

|
delete |
|
delete |
|
nodiscard |
Acquire an association from the pool.
Gets a pooled association or creates a new one if none available. The association is configured for the specified SOP classes.
| node_id | ID of the node to connect to |
| sop_classes | SOP Class UIDs needed for the operation |
Definition at line 563 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, kcenon::pacs::network::association_config::called_ae_title, kcenon::pacs::network::association_config::calling_ae_title, config(), kcenon::pacs::client::remote_node_manager::impl::config, kcenon::pacs::network::association::connect(), kcenon::pacs::client::remote_node_manager::impl::connection_pool, impl_, kcenon::pacs::client::node_manager_config::local_ae_title, kcenon::pacs::client::remote_node_manager::impl::logger, kcenon::pacs::client::remote_node_manager::impl::node_cache, kcenon::pacs::client::offline, kcenon::pacs::client::remote_node_manager::impl::pool_mutex, kcenon::pacs::network::association_config::proposed_contexts, kcenon::pacs::client::remote_node_manager::impl::statistics, kcenon::pacs::client::remote_node_manager::impl::stats_mutex, and kcenon::pacs::client::remote_node_manager::impl::update_node_status().

|
nodiscard |
Add a new remote node.
| node | The node to add |
Definition at line 321 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node::ae_title, kcenon::pacs::client::remote_node_manager::impl::cache_mutex, kcenon::pacs::client::remote_node::host, impl_, kcenon::pacs::client::remote_node_manager::impl::logger, kcenon::pacs::client::remote_node_manager::impl::node_cache, kcenon::pacs::client::remote_node::node_id, kcenon::pacs::pacs_void_error(), kcenon::pacs::client::remote_node::port, and kcenon::pacs::client::remote_node_manager::impl::repo.

|
nodiscardnoexcept |
Get the current configuration.
Definition at line 757 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::config, and impl_.
Referenced by acquire_association(), and remote_node_manager().

|
nodiscard |
Get a node by ID.
| node_id | ID of the node to retrieve |
Definition at line 466 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, impl_, and kcenon::pacs::client::remote_node_manager::impl::node_cache.
|
nodiscard |
Get statistics for a node.
| node_id | ID of the node |
Definition at line 735 of file remote_node_manager.cpp.
References impl_, kcenon::pacs::client::remote_node_manager::impl::statistics, and kcenon::pacs::client::remote_node_manager::impl::stats_mutex.
|
nodiscard |
Get the current status of a node.
| node_id | ID of the node |
Definition at line 717 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, impl_, kcenon::pacs::client::remote_node_manager::impl::node_cache, and kcenon::pacs::client::unknown.
|
nodiscardnoexcept |
Check if health check is running.
Definition at line 709 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::health_check_running, and impl_.
|
nodiscard |
List all registered nodes.
Definition at line 475 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, impl_, and kcenon::pacs::client::remote_node_manager::impl::node_cache.
|
nodiscard |
List nodes filtered by status.
| status | The status to filter by |
Definition at line 485 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, impl_, and kcenon::pacs::client::remote_node_manager::impl::node_cache.
|
delete |
|
delete |
| void kcenon::pacs::client::remote_node_manager::release_association | ( | std::string_view | node_id, |
| std::unique_ptr< network::association > | assoc ) |
Release an association back to the pool.
Returns an association to the pool for reuse. If the pool is full or the association is in a bad state, it will be closed instead.
| node_id | ID of the node the association is for |
| assoc | The association to release |
Definition at line 640 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::pooled_association::acquired_at, kcenon::pacs::client::remote_node_manager::impl::pooled_association::assoc, kcenon::pacs::client::remote_node_manager::impl::config, kcenon::pacs::client::remote_node_manager::impl::connection_pool, impl_, kcenon::pacs::client::remote_node_manager::impl::logger, kcenon::pacs::client::node_manager_config::max_pool_connections_per_node, kcenon::pacs::client::remote_node_manager::impl::pool_mutex, kcenon::pacs::client::remote_node_manager::impl::statistics, and kcenon::pacs::client::remote_node_manager::impl::stats_mutex.
|
nodiscard |
Remove a remote node.
| node_id | ID of the node to remove |
Definition at line 422 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, kcenon::pacs::client::remote_node_manager::impl::connection_pool, impl_, kcenon::pacs::client::remote_node_manager::impl::logger, kcenon::pacs::client::remote_node_manager::impl::node_cache, kcenon::pacs::pacs_void_error(), kcenon::pacs::client::remote_node_manager::impl::pool_mutex, kcenon::pacs::client::remote_node_manager::impl::repo, kcenon::pacs::client::remote_node_manager::impl::statistics, and kcenon::pacs::client::remote_node_manager::impl::stats_mutex.

| void kcenon::pacs::client::remote_node_manager::reset_statistics | ( | std::string_view | node_id = "" | ) |
Reset statistics for a node.
| node_id | ID of the node (empty to reset all) |
Definition at line 744 of file remote_node_manager.cpp.
References impl_, kcenon::pacs::client::remote_node_manager::impl::statistics, and kcenon::pacs::client::remote_node_manager::impl::stats_mutex.
| void kcenon::pacs::client::remote_node_manager::set_config | ( | node_manager_config | new_config | ) |
Update the configuration.
Note: Some changes may not take effect until health check is restarted.
| new_config | New configuration to apply |
Definition at line 761 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::config, and impl_.
| void kcenon::pacs::client::remote_node_manager::set_status_callback | ( | node_status_callback | callback | ) |
Set the status change callback.
The callback is invoked whenever a node's status changes. Only one callback can be set; setting a new one replaces the old.
| callback | Function to call on status change |
Definition at line 726 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::callback_mutex, impl_, and kcenon::pacs::client::remote_node_manager::impl::status_callback.
| void kcenon::pacs::client::remote_node_manager::start_health_check | ( | ) |
Start the automatic health check scheduler.
Begins periodic verification of all nodes at the configured interval. Does nothing if already running.
Definition at line 681 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::health_check_loop(), kcenon::pacs::client::remote_node_manager::impl::health_check_running, kcenon::pacs::client::remote_node_manager::impl::health_check_thread, impl_, and kcenon::pacs::client::remote_node_manager::impl::logger.
Referenced by remote_node_manager().


| void kcenon::pacs::client::remote_node_manager::stop_health_check | ( | ) |
Stop the automatic health check scheduler.
Stops periodic verification. Does nothing if not running.
Definition at line 694 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::health_check_cv, kcenon::pacs::client::remote_node_manager::impl::health_check_running, kcenon::pacs::client::remote_node_manager::impl::health_check_thread, impl_, and kcenon::pacs::client::remote_node_manager::impl::logger.
Referenced by ~remote_node_manager().

|
nodiscard |
Update an existing remote node.
| node | The node to update (node_id must match existing) |
Definition at line 381 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, impl_, kcenon::pacs::client::remote_node_manager::impl::logger, kcenon::pacs::client::remote_node_manager::impl::node_cache, kcenon::pacs::client::remote_node::node_id, kcenon::pacs::pacs_void_error(), and kcenon::pacs::client::remote_node_manager::impl::repo.

| void kcenon::pacs::client::remote_node_manager::verify_all_nodes_async | ( | ) |
Verify all nodes asynchronously.
Initiates verification of all registered nodes. Results are reported via status callbacks.
Definition at line 543 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, impl_, kcenon::pacs::client::remote_node_manager::impl::node_cache, and verify_node().

|
nodiscard |
Verify a node's connectivity synchronously.
Sends a C-ECHO to the specified node and waits for response. Updates the node's status based on the result.
| node_id | ID of the node to verify |
Definition at line 500 of file remote_node_manager.cpp.
References kcenon::pacs::client::remote_node_manager::impl::cache_mutex, impl_, kcenon::pacs::client::remote_node_manager::impl::node_cache, kcenon::pacs::client::offline, kcenon::pacs::client::online, kcenon::pacs::pacs_void_error(), kcenon::pacs::client::remote_node_manager::impl::perform_echo(), kcenon::pacs::client::remote_node_manager::impl::repo, kcenon::pacs::client::remote_node_manager::impl::update_node_status(), and kcenon::pacs::client::verifying.
Referenced by verify_all_nodes_async(), and verify_node_async().


|
nodiscard |
Verify a node's connectivity asynchronously.
Returns immediately with a future that will contain the result.
| node_id | ID of the node to verify |
Definition at line 533 of file remote_node_manager.cpp.
References verify_node().

|
private |
Definition at line 336 of file remote_node_manager.h.
Referenced by acquire_association(), add_node(), config(), get_node(), get_statistics(), get_status(), is_health_check_running(), list_nodes(), list_nodes_by_status(), release_association(), remote_node_manager(), remove_node(), reset_statistics(), set_config(), set_status_callback(), start_health_check(), stop_health_check(), update_node(), verify_all_nodes_async(), verify_node(), and ~remote_node_manager().