30#include <unordered_map>
34namespace kcenon {
namespace monitoring {
37class metrics_collector;
39class metrics_analyzer;
40struct metrics_snapshot;
41struct monitoring_config;
42struct health_check_result;
52 std::unordered_map<std::string, std::string>
tags;
57 ,
timestamp(std::chrono::system_clock::now()) {}
78 metrics.emplace_back(name, value);
88 const std::unordered_map<std::string, std::string>& tags) {
91 metrics.push_back(std::move(mv));
99 std::optional<double>
get_metric(
const std::string& name)
const {
100 for (
const auto& m :
metrics) {
101 if (m.name == name) {
131 std::unordered_map<std::string, std::string>
metadata;
132 std::optional<std::exception_ptr>
error;
135 :
check_time(std::chrono::system_clock::now()),
136 timestamp(std::chrono::system_clock::now()) {}
151 result.
timestamp = std::chrono::system_clock::now();
160 result.
timestamp = std::chrono::system_clock::now();
169 result.
timestamp = std::chrono::system_clock::now();
194 "History size must be greater than 0");
199 "Collection interval must be at least 10ms");
204 "Buffer size must be at least as large as history size");
268 virtual common::VoidResult
add_collector(std::unique_ptr<metrics_collector> collector) = 0;
273 virtual common::VoidResult
start() = 0;
274 virtual common::VoidResult
stop() = 0;
277 virtual common::Result<std::vector<metrics_snapshot>>
get_history(std::size_t count)
const = 0;
282 const std::string& name,
290 virtual common::VoidResult
add_analyzer(std::unique_ptr<metrics_analyzer> analyzer) = 0;
345 virtual common::Result<metrics_snapshot>
collect() = 0;
436 virtual common::Result<metrics_snapshot>
retrieve(std::size_t index)
const = 0;
445 std::size_t start_index, std::size_t count)
const = 0;
457 virtual std::size_t
size()
const = 0;
463 virtual common::VoidResult
clear() = 0;
469 virtual common::VoidResult
flush() = 0;
533 const std::vector<metrics_snapshot>& snapshots) = 0;
545 virtual common::VoidResult
reset() = 0;
Abstract interface for metrics analysis.
virtual ~metrics_analyzer()=default
virtual std::string get_name() const =0
Get analyzer name.
virtual common::Result< std::string > analyze(const metrics_snapshot &snapshot)=0
Analyze a metrics snapshot.
virtual common::Result< std::string > analyze_trend(const std::vector< metrics_snapshot > &snapshots)=0
Analyze multiple snapshots for trends.
virtual common::VoidResult reset()=0
Reset analyzer state.
Abstract base class for metric collectors.
virtual std::string get_name() const =0
Get collector name.
virtual bool is_enabled() const =0
Check if collector is enabled.
virtual ~metrics_collector()=default
virtual common::VoidResult initialize()=0
Initialize the collector.
virtual common::VoidResult cleanup()=0
Cleanup collector resources.
virtual common::Result< metrics_snapshot > collect()=0
Collect metrics.
virtual common::VoidResult set_enabled(bool enable)=0
Enable or disable the collector.
Abstract interface for monitoring operations.
virtual common::VoidResult set_storage_backend(std::unique_ptr< storage_backend > storage)=0
virtual common::Result< monitoring_config > get_configuration() const =0
virtual bool is_running() const =0
virtual common::VoidResult flush_storage()=0
virtual common::VoidResult stop()=0
virtual common::Result< health_check_result > check_health() const =0
virtual common::Result< metrics_snapshot > collect_now()=0
virtual common::Result< std::vector< std::string > > get_analysis_results() const =0
virtual common::VoidResult start()=0
virtual common::Result< std::vector< metrics_snapshot > > get_history(std::size_t count) const =0
virtual ~monitoring_interface()=default
virtual common::VoidResult register_health_check(const std::string &name, std::function< health_check_result()> checker)=0
virtual common::Result< std::string > get_status_summary() const =0
virtual common::Result< std::vector< std::string > > list_collectors() const =0
virtual common::Result< metrics_snapshot > get_latest_snapshot() const =0
virtual common::VoidResult remove_collector(const std::string &name)=0
virtual common::VoidResult add_analyzer(std::unique_ptr< metrics_analyzer > analyzer)=0
virtual common::VoidResult configure(const monitoring_config &config)=0
virtual common::VoidResult add_collector(std::unique_ptr< metrics_collector > collector)=0
Abstract interface for metrics storage.
virtual common::Result< metrics_snapshot > retrieve(std::size_t index) const =0
Retrieve a stored snapshot by index.
virtual common::VoidResult store(const metrics_snapshot &snapshot)=0
Store a metrics snapshot.
virtual common::VoidResult flush()=0
Flush any buffered data to persistent storage.
virtual ~storage_backend()=default
virtual std::size_t capacity() const =0
Get storage capacity.
virtual common::VoidResult clear()=0
Clear all stored data.
virtual std::size_t size() const =0
Get current storage usage.
virtual common::Result< std::vector< metrics_snapshot > > retrieve_range(std::size_t start_index, std::size_t count) const =0
Retrieve multiple snapshots.
Monitoring system specific error codes.
@ storage
Storage device sensor.
health_status
System health status levels.
Result pattern type definitions for monitoring system.
Extended error information with context.
common::error_info to_common_error() const
Convert to common_system error_info.
Result of a health check operation.
static health_check_result unhealthy(const std::string &msg)
std::chrono::system_clock::time_point timestamp
static health_check_result healthy(const std::string &msg="OK")
std::unordered_map< std::string, std::string > metadata
bool is_operational() const
static health_check_result degraded(const std::string &msg)
std::chrono::milliseconds check_duration
std::chrono::system_clock::time_point check_time
std::vector< std::string > issues
std::optional< std::exception_ptr > error
Represents a single metric value with metadata.
std::chrono::system_clock::time_point timestamp
metric_value(const std::string &n="", double v=0.0)
std::unordered_map< std::string, std::string > tags
Complete snapshot of metrics at a point in time.
std::chrono::system_clock::time_point capture_time
std::optional< double > get_metric(const std::string &name) const
Get a specific metric value.
std::vector< metric_value > metrics
void add_metric(const std::string &name, double value)
Add a metric to the snapshot.
void add_metric(const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags)
Add a metric to the snapshot with tags.
Configuration for the monitoring system.
std::chrono::milliseconds collection_interval
common::VoidResult validate() const
Validate configuration parameters.
std::size_t max_collectors