Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::collector_base< Derived > Class Template Reference

CRTP base class for metric collectors. More...

#include <collector_base.h>

Collaboration diagram for kcenon::monitoring::collector_base< Derived >:
Collaboration graph

Public Member Functions

 collector_base ()=default
 
virtual ~collector_base ()=default
 
 collector_base (const collector_base &)=delete
 
collector_baseoperator= (const collector_base &)=delete
 
 collector_base (collector_base &&)=delete
 
collector_baseoperator= (collector_base &&)=delete
 
bool initialize (const config_map &config)
 Initialize the collector with configuration.
 
std::vector< metriccollect ()
 Collect metrics from the data source.
 
std::string get_name () const
 Get the name of this collector.
 
std::vector< std::string > get_metric_types () const
 Get supported metric types.
 
bool is_healthy () const
 Check if the collector is healthy.
 
stats_map get_statistics () const
 Get collector statistics.
 
bool is_enabled () const
 Check if collector is enabled.
 
size_t get_collection_count () const
 Get collection count.
 
size_t get_collection_errors () const
 Get error count.
 

Protected Member Functions

metric create_base_metric (const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags={}, const std::string &="") const
 Create a metric with common tags.
 

Protected Attributes

bool enabled_ {true}
 
std::mutex stats_mutex_
 
std::atomic< size_t > collection_count_ {0}
 
std::atomic< size_t > collection_errors_ {0}
 

Private Member Functions

Derived & derived ()
 Get reference to derived class (CRTP helper)
 
const Derived & derived () const
 

Detailed Description

template<typename Derived>
class kcenon::monitoring::collector_base< Derived >

CRTP base class for metric collectors.

This template class implements common functionality shared by all collectors:

  • Configuration parsing (enabled state)
  • Collection with error handling and statistics
  • Health monitoring
  • Statistics tracking (collection count, error count)
Template Parameters
DerivedThe derived collector class (CRTP pattern)

Definition at line 83 of file collector_base.h.

Constructor & Destructor Documentation

◆ collector_base() [1/3]

template<typename Derived >
kcenon::monitoring::collector_base< Derived >::collector_base ( )
default

◆ ~collector_base()

template<typename Derived >
virtual kcenon::monitoring::collector_base< Derived >::~collector_base ( )
virtualdefault

◆ collector_base() [2/3]

template<typename Derived >
kcenon::monitoring::collector_base< Derived >::collector_base ( const collector_base< Derived > & )
delete

◆ collector_base() [3/3]

template<typename Derived >
kcenon::monitoring::collector_base< Derived >::collector_base ( collector_base< Derived > && )
delete

Member Function Documentation

◆ collect()

template<typename Derived >
std::vector< metric > kcenon::monitoring::collector_base< Derived >::collect ( )
inline

Collect metrics from the data source.

Returns
Collection of metrics

Definition at line 113 of file collector_base.h.

113 {
114 if (!enabled_) {
115 return {};
116 }
117
118 try {
119 auto metrics = derived().do_collect();
121 return metrics;
122 } catch (...) {
124 return {};
125 }
126 }
Derived & derived()
Get reference to derived class (CRTP helper)
std::atomic< size_t > collection_errors_
std::atomic< size_t > collection_count_

References kcenon::monitoring::collector_base< Derived >::collection_count_, kcenon::monitoring::collector_base< Derived >::collection_errors_, kcenon::monitoring::collector_base< Derived >::derived(), and kcenon::monitoring::collector_base< Derived >::enabled_.

Here is the call graph for this function:

◆ create_base_metric()

template<typename Derived >
metric kcenon::monitoring::collector_base< Derived >::create_base_metric ( const std::string & name,
double value,
const std::unordered_map< std::string, std::string > & tags = {},
const std::string & = "" ) const
inlineprotected

Create a metric with common tags.

Parameters
nameMetric name
valueMetric value
tagsAdditional tags
unitOptional unit string (not used, for documentation)
Returns
Created metric

Definition at line 201 of file collector_base.h.

202 {},
203 const std::string& /* unit */ = "") const {
204 metric m;
205 m.name = name;
206 m.value = value;
207 m.timestamp = std::chrono::system_clock::now();
208 m.tags = tags;
209 m.tags["collector"] = Derived::collector_name;
210 return m;
211 }

◆ derived() [1/2]

template<typename Derived >
Derived & kcenon::monitoring::collector_base< Derived >::derived ( )
inlineprivate

◆ derived() [2/2]

template<typename Derived >
const Derived & kcenon::monitoring::collector_base< Derived >::derived ( ) const
inlineprivate

Definition at line 226 of file collector_base.h.

226{ return static_cast<const Derived&>(*this); }

◆ get_collection_count()

template<typename Derived >
size_t kcenon::monitoring::collector_base< Derived >::get_collection_count ( ) const
inline

Get collection count.

Returns
Number of successful collections

Definition at line 184 of file collector_base.h.

184{ return collection_count_.load(); }

References kcenon::monitoring::collector_base< Derived >::collection_count_.

◆ get_collection_errors()

template<typename Derived >
size_t kcenon::monitoring::collector_base< Derived >::get_collection_errors ( ) const
inline

Get error count.

Returns
Number of failed collections

Definition at line 190 of file collector_base.h.

190{ return collection_errors_.load(); }

References kcenon::monitoring::collector_base< Derived >::collection_errors_.

◆ get_metric_types()

template<typename Derived >
std::vector< std::string > kcenon::monitoring::collector_base< Derived >::get_metric_types ( ) const
inline

Get supported metric types.

Returns
Vector of supported metric type names

Definition at line 140 of file collector_base.h.

140 {
141 return derived().do_get_metric_types();
142 }

References kcenon::monitoring::collector_base< Derived >::derived().

Here is the call graph for this function:

◆ get_name()

template<typename Derived >
std::string kcenon::monitoring::collector_base< Derived >::get_name ( ) const
inline

Get the name of this collector.

Returns
Collector name from Derived::collector_name

Definition at line 132 of file collector_base.h.

132 {
133 return Derived::collector_name;
134 }

◆ get_statistics()

template<typename Derived >
stats_map kcenon::monitoring::collector_base< Derived >::get_statistics ( ) const
inline

Get collector statistics.

Returns
Map of statistic name to value

Definition at line 159 of file collector_base.h.

159 {
160 std::lock_guard<std::mutex> lock(stats_mutex_);
161 stats_map stats;
162
163 // Common statistics
164 stats["enabled"] = enabled_ ? 1.0 : 0.0;
165 stats["collection_count"] = static_cast<double>(collection_count_.load());
166 stats["collection_errors"] = static_cast<double>(collection_errors_.load());
167
168 // Let derived class add specific statistics
169 derived().do_add_statistics(stats);
170
171 return stats;
172 }
std::unordered_map< std::string, double > stats_map
Type alias for statistics map.

References kcenon::monitoring::collector_base< Derived >::collection_count_, kcenon::monitoring::collector_base< Derived >::collection_errors_, kcenon::monitoring::collector_base< Derived >::derived(), kcenon::monitoring::collector_base< Derived >::enabled_, and kcenon::monitoring::collector_base< Derived >::stats_mutex_.

Here is the call graph for this function:

◆ initialize()

template<typename Derived >
bool kcenon::monitoring::collector_base< Derived >::initialize ( const config_map & config)
inline

Initialize the collector with configuration.

Parameters
configConfiguration options (common: "enabled")
Returns
true if initialization successful

Definition at line 99 of file collector_base.h.

99 {
100 // Parse common configuration
101 if (auto it = config.find("enabled"); it != config.end()) {
102 enabled_ = (it->second == "true" || it->second == "1");
103 }
104
105 // Delegate to derived class for specific initialization
106 return derived().do_initialize(config);
107 }

References kcenon::monitoring::collector_base< Derived >::derived(), and kcenon::monitoring::collector_base< Derived >::enabled_.

Here is the call graph for this function:

◆ is_enabled()

template<typename Derived >
bool kcenon::monitoring::collector_base< Derived >::is_enabled ( ) const
inline

Check if collector is enabled.

Returns
true if enabled

Definition at line 178 of file collector_base.h.

178{ return enabled_; }

References kcenon::monitoring::collector_base< Derived >::enabled_.

◆ is_healthy()

template<typename Derived >
bool kcenon::monitoring::collector_base< Derived >::is_healthy ( ) const
inline

Check if the collector is healthy.

Returns
true if collector is operational

Definition at line 148 of file collector_base.h.

148 {
149 if (!enabled_) {
150 return true; // Disabled collectors are considered healthy
151 }
152 return derived().is_available();
153 }

References kcenon::monitoring::collector_base< Derived >::derived(), and kcenon::monitoring::collector_base< Derived >::enabled_.

Here is the call graph for this function:

◆ operator=() [1/2]

template<typename Derived >
collector_base & kcenon::monitoring::collector_base< Derived >::operator= ( collector_base< Derived > && )
delete

◆ operator=() [2/2]

template<typename Derived >
collector_base & kcenon::monitoring::collector_base< Derived >::operator= ( const collector_base< Derived > & )
delete

Member Data Documentation

◆ collection_count_

◆ collection_errors_

◆ enabled_

◆ stats_mutex_

template<typename Derived >
std::mutex kcenon::monitoring::collector_base< Derived >::stats_mutex_
mutableprotected

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