17#include <condition_variable>
27#include <unordered_map>
36namespace kcenon {
namespace monitoring {
51 virtual bool initialize(
const std::unordered_map<std::string, std::string>& config) = 0;
57 virtual std::vector<metric>
collect() = 0;
180 std::vector<metric>
get_cached_metrics(
const std::optional<std::string>& plugin_name = std::nullopt)
const;
197 common::VoidResult
register_observer(std::shared_ptr<interface_monitoring_observer> observer)
override;
205 std::unordered_map<std::string, std::unique_ptr<metric_collector_plugin>>
plugins_;
209 std::vector<std::weak_ptr<interface_monitoring_observer>>
observers_;
253 const std::unordered_map<std::string, std::string>& config = {});
261 const std::unordered_map<std::string, std::string>& config = {});
269 const std::unordered_map<std::string, std::string>& config = {});
277 const std::string& type,
278 std::function<std::unique_ptr<metric_collector_plugin>(
const std::unordered_map<std::string, std::string>&)>
287 static std::unique_ptr<metric_collector_plugin>
create(
const std::string& type,
288 const std::unordered_map<std::string, std::string>& config = {});
291 static std::unordered_map<
292 std::string, std::function<std::unique_ptr<metric_collector_plugin>(
const std::unordered_map<std::string, std::string>&)>>
Pure virtual interface for metric collectors.
virtual bool initialize(const std::unordered_map< std::string, std::string > &config)=0
virtual bool is_healthy() const =0
virtual std::unordered_map< std::string, double > get_statistics() const =0
virtual ~metric_collector_plugin()=default
virtual std::vector< std::string > get_metric_types() const =0
virtual std::string get_name() const =0
virtual std::vector< metric > collect()=0
static std::unordered_map< std::string, std::function< std::unique_ptr< metric_collector_plugin >(const std::unordered_map< std::string, std::string > &)> > factories_
static std::mutex factories_mutex_
static std::unique_ptr< metric_collector_plugin > create(const std::string &type, const std::unordered_map< std::string, std::string > &config={})
static std::unique_ptr< metric_collector_plugin > create_thread_system_collector(const std::unordered_map< std::string, std::string > &config={})
static void register_factory(const std::string &type, std::function< std::unique_ptr< metric_collector_plugin >(const std::unordered_map< std::string, std::string > &)> factory)
static std::unique_ptr< metric_collector_plugin > create_logger_system_collector(const std::unordered_map< std::string, std::string > &config={})
static std::unique_ptr< metric_collector_plugin > create_system_resource_collector(const std::unordered_map< std::string, std::string > &config={})
~plugin_metric_collector() override
plugin_metric_collector & operator=(plugin_metric_collector &&)=delete
common::VoidResult unregister_observer(std::shared_ptr< interface_monitoring_observer > observer) override
Unregister an observer.
plugin_metric_collector(const plugin_collector_config &config={})
common::VoidResult update_config(const collection_config &config) override
Update collection configuration.
std::vector< metric > get_cached_metrics(const std::optional< std::string > &plugin_name=std::nullopt) const
std::unordered_map< std::string, std::unique_ptr< metric_collector_plugin > > plugins_
plugin_metric_collector & operator=(const plugin_metric_collector &)=delete
std::condition_variable work_cv_
std::mutex observers_mutex_
std::vector< cached_metric > metric_cache_
common::VoidResult stop_collection() override
Stop automatic metric collection.
common::Result< std::vector< metric > > collect_metrics() override
Collect metrics based on current configuration.
std::atomic< size_t > total_metrics_collected_
std::vector< std::string > get_registered_plugins() const
std::vector< std::thread > worker_threads_
plugin_metric_collector(const plugin_metric_collector &)=delete
bool register_plugin(std::unique_ptr< metric_collector_plugin > plugin)
std::vector< std::weak_ptr< interface_monitoring_observer > > observers_
plugin_metric_collector(plugin_metric_collector &&)=delete
void collect_from_plugin(const std::string &name, metric_collector_plugin *plugin)
std::atomic< bool > running_
plugin_collector_config config_
std::vector< metric_stats > get_aggregated_metrics(size_t window_seconds=60) const
void reset_stats() override
Reset collector statistics.
common::Result< std::vector< metric > > force_collect() override
collection_config get_config() const override
Get current collection configuration.
std::atomic< size_t > collection_errors_
bool is_collecting() const override
Check if collector is currently active.
std::vector< std::string > get_metric_types() const override
Get the types of metrics this collector supports.
std::chrono::steady_clock::time_point start_time_
bool unregister_plugin(const std::string &plugin_name)
void notify_observers(const metric &m)
metric_stats get_stats() const override
Get collector statistics.
common::VoidResult start_collection(const collection_config &config) override
Start automatic metric collection.
std::mutex plugins_mutex_
common::VoidResult register_observer(std::shared_ptr< interface_monitoring_observer > observer) override
Register an observer for events.
Abstract interface for metric collection components.
Common metric type definitions for efficient storage.
Adapter for metric types to support interface definitions.
Observer pattern interface for monitoring system event handling.
Configuration for metric collection.
Statistics about metric collection.
Basic metric structure for interface compatibility.
std::chrono::seconds cache_ttl
std::chrono::seconds aggregation_window
std::chrono::milliseconds collection_interval
std::chrono::steady_clock::time_point timestamp