PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
atna_service_auditor.h
Go to the documentation of this file.
1
15#ifndef PACS_SECURITY_ATNA_SERVICE_AUDITOR_HPP
16#define PACS_SECURITY_ATNA_SERVICE_AUDITOR_HPP
17
18#include "atna_audit_logger.h"
20
21#include <atomic>
22#include <memory>
23#include <string>
24
25namespace kcenon::pacs::security {
26
53public:
54 // =========================================================================
55 // Construction
56 // =========================================================================
57
65 std::string audit_source_id);
66
68
69 // Non-copyable, movable
73 atna_service_auditor& operator=(atna_service_auditor&&) noexcept;
74
75 // =========================================================================
76 // DICOM Service Audit Methods
77 // =========================================================================
78
88 void audit_instance_stored(const std::string& source_ae,
89 const std::string& dest_ae,
90 const std::string& study_uid,
91 const std::string& patient_id,
92 bool success);
93
102 void audit_query(const std::string& calling_ae,
103 const std::string& called_ae,
104 const std::string& query_level,
105 bool success);
106
114 void audit_authentication(const std::string& user_id,
115 bool is_login,
116 bool success);
117
124 void audit_security_alert(const std::string& user_id,
125 const std::string& alert_description);
126
127 // =========================================================================
128 // Enable / Disable
129 // =========================================================================
130
139 void set_enabled(bool enabled) noexcept;
140
145 [[nodiscard]] bool is_enabled() const noexcept;
146
147 // =========================================================================
148 // Statistics
149 // =========================================================================
150
154 [[nodiscard]] size_t events_sent() const noexcept;
155
159 [[nodiscard]] size_t events_failed() const noexcept;
160
164 void reset_statistics() noexcept;
165
166 // =========================================================================
167 // Configuration Access
168 // =========================================================================
169
173 [[nodiscard]] const std::string& audit_source_id() const noexcept;
174
178 [[nodiscard]] const atna_syslog_transport& transport() const noexcept;
179
180private:
181 // =========================================================================
182 // Private Helpers
183 // =========================================================================
184
192 void send_audit(const atna_audit_message& message);
193
194 // =========================================================================
195 // Private Members
196 // =========================================================================
197
199 std::string audit_source_id_;
200
203
205 std::atomic<bool> enabled_{true};
206
208 std::atomic<size_t> events_sent_{0};
209 std::atomic<size_t> events_failed_{0};
210};
211
212} // namespace kcenon::pacs::security
213
214#endif // PACS_SECURITY_ATNA_SERVICE_AUDITOR_HPP
IHE ATNA-compliant audit message generator (RFC 3881 XML format)
Syslog transport for ATNA audit messages (RFC 5424/5425/5426)
High-level facade for emitting ATNA audit events from DICOM services.
size_t events_failed() const noexcept
Get the number of audit event send failures.
void audit_authentication(const std::string &user_id, bool is_login, bool success)
Audit a User Authentication event.
void set_enabled(bool enabled) noexcept
Enable or disable audit event emission.
size_t events_sent() const noexcept
Get the number of audit events successfully sent.
std::atomic< bool > enabled_
Whether audit is enabled.
bool is_enabled() const noexcept
Check if audit event emission is enabled.
std::string audit_source_id_
Audit source identifier (e.g., "PACS_SYSTEM_01")
void audit_query(const std::string &calling_ae, const std::string &called_ae, const std::string &query_level, bool success)
Audit a C-FIND (Query) event.
void send_audit(const atna_audit_message &message)
Send an audit message via syslog transport.
const atna_syslog_transport & transport() const noexcept
Get the underlying transport (for advanced use)
atna_service_auditor(const syslog_transport_config &config, std::string audit_source_id)
Construct an auditor with syslog transport configuration.
void audit_security_alert(const std::string &user_id, const std::string &alert_description)
Audit a Security Alert event (e.g., access denied)
const std::string & audit_source_id() const noexcept
Get the audit source identifier.
std::atomic< size_t > events_sent_
Statistics.
atna_service_auditor(const atna_service_auditor &)=delete
atna_service_auditor & operator=(const atna_service_auditor &)=delete
void reset_statistics() noexcept
Reset statistics counters.
atna_syslog_transport transport_
Syslog transport for sending audit messages.
void audit_instance_stored(const std::string &source_ae, const std::string &dest_ae, const std::string &study_uid, const std::string &patient_id, bool success)
Audit a C-STORE (DICOM Instances Transferred) event.
Sends ATNA audit messages via Syslog protocol.
Configuration for the Syslog transport.