16#include <unordered_map>
52 std::unordered_map<std::string, std::string>
labels;
55 timestamp(std::chrono::system_clock::now()) {}
59 timestamp(std::chrono::system_clock::now()) {}
81 metrics_.emplace_back(name, value, type);
161 if (
status_ == health_status::healthy) {
162 status_ = health_status::degraded;
195 return status_ == health_status::healthy;
286 case health_status::healthy:
288 case health_status::degraded:
290 case health_status::unhealthy:
292 case health_status::unknown:
void set_status(health_status status)
Set health status.
bool is_healthy() const
Check if healthy.
std::vector< std::string > issues_
void set_message(const std::string &message)
Set status message.
const std::string & get_message() const
Get status message.
const std::vector< std::string > & get_issues() const
Get all issues.
health_status get_status() const
Get health status.
std::chrono::system_clock::time_point check_time_
void add_issue(const std::string &issue)
Add an issue.
health_check_result(health_status status=health_status::healthy)
std::chrono::system_clock::time_point get_check_time() const
Get check timestamp.
size_t size() const
Get number of metrics.
const std::vector< metric_value > & get_metrics() const
Get all metrics.
std::chrono::system_clock::time_point get_collection_time() const
Get collection timestamp.
void clear()
Clear all metrics.
std::vector< metric_value > metrics_
void add_metric(const std::string &name, double value, metric_type type=metric_type::gauge)
Add a metric to the collection.
std::chrono::system_clock::time_point collection_time_
void add_metric(const metric_value &metric)
Add a pre-built metric.
Abstract monitoring interface.
virtual result< monitoring_data > collect_metrics() const =0
Collect current metrics.
virtual result< health_check_result > check_health() const =0
Perform health check.
virtual std::string get_backend_name() const =0
Get monitoring backend name.
virtual void increment_counter(const std::string &name, double value=1.0)=0
Record a counter increment.
virtual ~monitoring_interface()=default
Virtual destructor.
virtual common::VoidResult set_enabled(bool enable)=0
Enable or disable metric collection.
virtual void record_histogram(const std::string &name, double value)=0
Record a value in a histogram.
virtual common::VoidResult reset_metrics()=0
Reset all metrics.
virtual bool is_enabled() const =0
Check if monitoring is enabled.
virtual void update_gauge(const std::string &name, double value)=0
Update a gauge value.
Error codes specific to the logger system.
health_status
Health status levels.
@ healthy
Everything is working normally.
@ degraded
Some issues but still operational.
@ unknown
Status cannot be determined.
@ unhealthy
Major issues, may not be operational.
std::string metric_type_to_string(metric_type type)
Convert metric type to string.
metric_type
Types of metrics that can be recorded by the logger.
@ gauge
A metric that can go up or down (e.g., queue depth).
@ counter
A monotonically increasing metric (e.g., total messages).
@ summary
Statistical summary.
@ histogram
A distribution of values (e.g., processing latency).
std::string health_status_to_string(health_status status)
Convert health status to string.
Single metric value with metadata.
metric_value(const std::string &n, double v, metric_type t=metric_type::gauge)
std::chrono::system_clock::time_point timestamp
std::unordered_map< std::string, std::string > labels