14#if KCENON_WITH_COMMON_SYSTEM
16#include <kcenon/common/patterns/event_bus.h>
24struct histogram_storage
31 static auto instance() -> histogram_storage&
33 static histogram_storage storage;
38#if KCENON_WITH_COMMON_SYSTEM
50void publish_metric(
const std::string& name,
double value,
52 const std::map<std::string, std::string>& labels = {})
58 auto& bus = kcenon::common::get_event_bus();
59 bus.publish(events::network_metric_event{name, value, type, labels});
67#if KCENON_WITH_COMMON_SYSTEM
71 {{
"event",
"accepted"}});
81#if KCENON_WITH_COMMON_SYSTEM
84 {{
"reason", reason}});
93 auto byte_value =
static_cast<double>(bytes);
95#if KCENON_WITH_COMMON_SYSTEM
110 auto byte_value =
static_cast<double>(bytes);
112#if KCENON_WITH_COMMON_SYSTEM
127#if KCENON_WITH_COMMON_SYSTEM
138#if KCENON_WITH_COMMON_SYSTEM
141 {{
"error_type", error_type}});
150#if KCENON_WITH_COMMON_SYSTEM
161 auto count_value =
static_cast<double>(count);
163#if KCENON_WITH_COMMON_SYSTEM
174#if KCENON_WITH_COMMON_SYSTEM
190 auto& storage = histogram_storage::instance();
191 storage.latency.record(ms);
199 auto& storage = histogram_storage::instance();
200 storage.connection_time.record(ms);
202#if KCENON_WITH_COMMON_SYSTEM
213 auto& storage = histogram_storage::instance();
214 storage.request_duration.record(ms);
216#if KCENON_WITH_COMMON_SYSTEM
227 auto& storage = histogram_storage::instance();
228 return storage.latency.p50();
233 auto& storage = histogram_storage::instance();
234 return storage.latency.p95();
239 auto& storage = histogram_storage::instance();
240 return storage.latency.p99();
245 auto& storage = histogram_storage::instance();
246 return storage.connection_time.p99();
251 auto& storage = histogram_storage::instance();
252 return storage.request_duration.p99();
257 auto& storage = histogram_storage::instance();
258 std::map<std::string, histogram_snapshot> result;
261 storage.latency.snapshot({{
"metric",
"latency"}});
263 storage.connection_time.snapshot({{
"metric",
"connection_time"}});
265 storage.request_duration.snapshot({{
"metric",
"request_duration"}});
272 auto& storage = histogram_storage::instance();
273 storage.latency.reset();
274 storage.connection_time.reset();
275 storage.request_duration.reset();
static bool is_logging_safe()
Check if logging is safe (not in static destruction)
static monitoring_integration_manager & instance()
Get the singleton instance.
void report_histogram(const std::string &name, double value, const std::map< std::string, std::string > &labels={})
Report a histogram metric.
void report_counter(const std::string &name, double value, const std::map< std::string, std::string > &labels={})
Report a counter metric.
void report_gauge(const std::string &name, double value, const std::map< std::string, std::string > &labels={})
Report a gauge metric.
static void report_error(const std::string &error_type)
Report a network error.
static auto get_connection_time_p99() -> double
Get connection time 99th percentile.
static void record_connection_time(double ms)
Record connection time to internal histogram.
static void report_session_duration(double ms)
Report session duration.
static void report_latency(double ms)
Report network latency.
static auto get_latency_p99() -> double
Get latency 99th percentile.
static void record_latency(double ms)
Record latency to internal histogram.
static void report_connection_failed(const std::string &reason)
Report a failed connection attempt.
static auto get_latency_p95() -> double
Get latency 95th percentile.
static auto get_all_histograms() -> std::map< std::string, histogram_snapshot >
Get all histogram snapshots for export.
static void reset_histograms()
Reset all histogram data.
static void report_connection_accepted()
Report a new connection accepted.
static void record_request_duration(double ms)
Record request duration to internal histogram.
static void report_timeout()
Report a timeout.
static void report_active_connections(size_t count)
Report active connections count.
static auto get_request_duration_p99() -> double
Get request duration 99th percentile.
static void report_bytes_received(size_t bytes)
Report bytes received.
static void report_bytes_sent(size_t bytes)
Report bytes sent.
static auto get_latency_p50() -> double
Get latency 50th percentile (median)
Feature flags for network_system.
Histogram metric implementation for latency distribution tracking.
Logger system integration interface for network_system.
Monitoring system integration interface for network_system.
network_metric_type
Types of network metrics.
constexpr const char * SESSION_DURATION_MS
constexpr const char * CONNECTIONS_ACTIVE
constexpr const char * CONNECTION_TIME_HISTOGRAM
constexpr const char * CONNECTIONS_FAILED
constexpr const char * ERRORS_TOTAL
constexpr const char * LATENCY_MS
constexpr const char * LATENCY_HISTOGRAM
constexpr const char * PACKETS_RECEIVED
constexpr const char * BYTES_RECEIVED
constexpr const char * CONNECTIONS_TOTAL
constexpr const char * REQUEST_DURATION_HISTOGRAM
constexpr const char * PACKETS_SENT
constexpr const char * TIMEOUTS_TOTAL
constexpr const char * BYTES_SENT
Network metric events for EventBus-based metric publishing.
sliding_histogram request_duration
sliding_histogram connection_time
sliding_histogram latency
Network system metrics definitions and reporting utilities.
Sliding window histogram for time-based latency tracking.
static auto default_config() -> sliding_histogram_config
Create default configuration (60 second window, 6 buckets = 10s each)