PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
kcenon::pacs::monitoring::dicom_association_collector Class Reference

Collector for DICOM association lifecycle metrics. More...

#include <dicom_association_collector.h>

Collaboration diagram for kcenon::pacs::monitoring::dicom_association_collector:
Collaboration graph

Public Member Functions

 dicom_association_collector (std::string ae_title="PACS_SCP")
 Default constructor.
 
 ~dicom_association_collector ()=default
 Destructor.
 
 dicom_association_collector (const dicom_association_collector &)=delete
 
dicom_association_collectoroperator= (const dicom_association_collector &)=delete
 
 dicom_association_collector (dicom_association_collector &&)=delete
 
dicom_association_collectoroperator= (dicom_association_collector &&)=delete
 
bool initialize (const std::unordered_map< std::string, std::string > &config)
 Initialize the collector with configuration.
 
std::vector< association_metriccollect ()
 Collect current association metrics.
 
std::string get_name () const
 Get the collector name.
 
std::vector< std::string > get_metric_types () const
 Get supported metric types.
 
bool is_healthy () const
 Check if the collector is healthy.
 
std::unordered_map< std::string, double > get_statistics () const
 Get collector statistics.
 
void set_ae_title (std::string ae_title)
 Set the AE title for metric labels.
 
std::string get_ae_title () const
 Get the current AE title.
 

Private Member Functions

association_metric create_metric (const std::string &name, double value, const std::string &type) const
 

Private Attributes

std::string ae_title_
 
bool initialized_ {false}
 
std::mutex stats_mutex_
 
std::uint64_t collection_count_ {0}
 
std::chrono::steady_clock::time_point init_time_
 

Detailed Description

Collector for DICOM association lifecycle metrics.

This collector gathers metrics related to DICOM associations including:

  • Active association count
  • Total associations established
  • Association success/failure rates
  • Peak active associations
  • Association duration statistics

Thread Safety: All public methods are thread-safe.

Definition at line 79 of file dicom_association_collector.h.

Constructor & Destructor Documentation

◆ dicom_association_collector() [1/3]

kcenon::pacs::monitoring::dicom_association_collector::dicom_association_collector ( std::string ae_title = "PACS_SCP")
inlineexplicit

Default constructor.

Parameters
ae_titleOptional AE title for labeling metrics
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 181 of file dicom_association_collector.h.

◆ ~dicom_association_collector()

kcenon::pacs::monitoring::dicom_association_collector::~dicom_association_collector ( )
default

◆ dicom_association_collector() [2/3]

kcenon::pacs::monitoring::dicom_association_collector::dicom_association_collector ( const dicom_association_collector & )
delete

◆ dicom_association_collector() [3/3]

kcenon::pacs::monitoring::dicom_association_collector::dicom_association_collector ( dicom_association_collector && )
delete

Member Function Documentation

◆ collect()

std::vector< association_metric > kcenon::pacs::monitoring::dicom_association_collector::collect ( )
inlinenodiscard

Collect current association metrics.

Returns
Vector of association metrics
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 196 of file dicom_association_collector.h.

196 {
197 std::vector<association_metric> metrics;
198
199 if (!initialized_) {
200 return metrics;
201 }
202
203 const auto& counters = pacs_metrics::global_metrics().associations();
204
205 // Active associations (gauge)
206 metrics.push_back(create_metric(
207 "dicom_associations_active",
208 static_cast<double>(counters.current_active.load(std::memory_order_relaxed)),
209 "gauge"));
210
211 // Peak active associations (gauge)
212 metrics.push_back(create_metric(
213 "dicom_associations_peak_active",
214 static_cast<double>(counters.peak_active.load(std::memory_order_relaxed)),
215 "gauge"));
216
217 // Total established (counter)
218 metrics.push_back(create_metric(
219 "dicom_associations_total",
220 static_cast<double>(counters.total_established.load(std::memory_order_relaxed)),
221 "counter"));
222
223 // Total rejected (counter)
224 metrics.push_back(create_metric(
225 "dicom_associations_rejected_total",
226 static_cast<double>(counters.total_rejected.load(std::memory_order_relaxed)),
227 "counter"));
228
229 // Total aborted (counter)
230 metrics.push_back(create_metric(
231 "dicom_associations_aborted_total",
232 static_cast<double>(counters.total_aborted.load(std::memory_order_relaxed)),
233 "counter"));
234
235 // Success rate (gauge) - calculated metric
236 const auto total = counters.total_established.load(std::memory_order_relaxed);
237 const auto rejected = counters.total_rejected.load(std::memory_order_relaxed);
238 const auto attempted = total + rejected;
239 const double success_rate = (attempted > 0)
240 ? static_cast<double>(total) / static_cast<double>(attempted)
241 : 1.0;
242
243 metrics.push_back(create_metric(
244 "dicom_associations_success_rate",
245 success_rate,
246 "gauge"));
247
248 // Update statistics
249 {
250 std::lock_guard<std::mutex> lock(stats_mutex_);
252 }
253
254 return metrics;
255}
association_metric create_metric(const std::string &name, double value, const std::string &type) const
static pacs_metrics & global_metrics() noexcept
Get the global singleton instance.
const association_counters & associations() const noexcept
Get association counters.

References kcenon::pacs::monitoring::pacs_metrics::associations(), collection_count_, create_metric(), kcenon::pacs::monitoring::pacs_metrics::global_metrics(), initialized_, and stats_mutex_.

Here is the call graph for this function:

◆ create_metric()

association_metric kcenon::pacs::monitoring::dicom_association_collector::create_metric ( const std::string & name,
double value,
const std::string & type ) const
inlinenodiscardprivate
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 300 of file dicom_association_collector.h.

303 {
304 return association_metric(
305 name,
306 value,
307 type,
308 {{"ae", ae_title_}});
309}
std::string_view name

References ae_title_, and name.

Referenced by collect().

Here is the caller graph for this function:

◆ get_ae_title()

std::string kcenon::pacs::monitoring::dicom_association_collector::get_ae_title ( ) const
inlinenodiscard

Get the current AE title.

Returns
The Application Entity title
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 296 of file dicom_association_collector.h.

296 {
297 return ae_title_;
298}

References ae_title_.

◆ get_metric_types()

std::vector< std::string > kcenon::pacs::monitoring::dicom_association_collector::get_metric_types ( ) const
inlinenodiscard

Get supported metric types.

Returns
Vector of metric type names
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 261 of file dicom_association_collector.h.

261 {
262 return {
263 "dicom_associations_active",
264 "dicom_associations_peak_active",
265 "dicom_associations_total",
266 "dicom_associations_rejected_total",
267 "dicom_associations_aborted_total",
268 "dicom_associations_success_rate"
269 };
270}

◆ get_name()

std::string kcenon::pacs::monitoring::dicom_association_collector::get_name ( ) const
inlinenodiscard

Get the collector name.

Returns
"dicom_association_collector"
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 257 of file dicom_association_collector.h.

257 {
258 return "dicom_association_collector";
259}

◆ get_statistics()

std::unordered_map< std::string, double > kcenon::pacs::monitoring::dicom_association_collector::get_statistics ( ) const
inlinenodiscard

Get collector statistics.

Returns
Map of statistic name to value
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 277 of file dicom_association_collector.h.

277 {
278 std::lock_guard<std::mutex> lock(stats_mutex_);
279
280 std::unordered_map<std::string, double> stats;
281 stats["collection_count"] = static_cast<double>(collection_count_);
282
283 if (initialized_) {
284 const auto uptime = std::chrono::duration_cast<std::chrono::seconds>(
285 std::chrono::steady_clock::now() - init_time_);
286 stats["uptime_seconds"] = static_cast<double>(uptime.count());
287 }
288
289 return stats;
290}

References collection_count_, init_time_, initialized_, and stats_mutex_.

◆ initialize()

bool kcenon::pacs::monitoring::dicom_association_collector::initialize ( const std::unordered_map< std::string, std::string > & config)
inlinenodiscard

Initialize the collector with configuration.

Parameters
configConfiguration map (currently unused)
Returns
true if initialization succeeded
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 184 of file dicom_association_collector.h.

185 {
186 // Extract AE title from config if provided
187 if (auto it = config.find("ae_title"); it != config.end()) {
188 ae_title_ = it->second;
189 }
190
191 init_time_ = std::chrono::steady_clock::now();
192 initialized_ = true;
193 return true;
194}

References ae_title_, init_time_, and initialized_.

◆ is_healthy()

bool kcenon::pacs::monitoring::dicom_association_collector::is_healthy ( ) const
inlinenodiscard

Check if the collector is healthy.

Returns
true if operational
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 272 of file dicom_association_collector.h.

272 {
273 return initialized_;
274}

References initialized_.

◆ operator=() [1/2]

◆ operator=() [2/2]

dicom_association_collector & kcenon::pacs::monitoring::dicom_association_collector::operator= ( dicom_association_collector && )
delete

◆ set_ae_title()

void kcenon::pacs::monitoring::dicom_association_collector::set_ae_title ( std::string ae_title)
inline

Set the AE title for metric labels.

Parameters
ae_titleThe Application Entity title
Examples
/home/runner/work/pacs_system/pacs_system/include/kcenon/pacs/monitoring/collectors/dicom_association_collector.h.

Definition at line 292 of file dicom_association_collector.h.

292 {
293 ae_title_ = std::move(ae_title);
294}

References ae_title_.

Member Data Documentation

◆ ae_title_

std::string kcenon::pacs::monitoring::dicom_association_collector::ae_title_
private

◆ collection_count_

std::uint64_t kcenon::pacs::monitoring::dicom_association_collector::collection_count_ {0}
private

◆ init_time_

std::chrono::steady_clock::time_point kcenon::pacs::monitoring::dicom_association_collector::init_time_
private

◆ initialized_

bool kcenon::pacs::monitoring::dicom_association_collector::initialized_ {false}
private

◆ stats_mutex_

std::mutex kcenon::pacs::monitoring::dicom_association_collector::stats_mutex_
mutableprivate

The documentation for this class was generated from the following file: