Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
network_metrics.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
13#pragma once
14
15#include <cstddef>
16#include <map>
17#include <string>
18
20
21// Forward declarations
22struct histogram_snapshot;
23class histogram;
24
28namespace metric_names {
29 // Connection metrics
30 constexpr const char* CONNECTIONS_ACTIVE = "network.connections.active";
31 constexpr const char* CONNECTIONS_TOTAL = "network.connections.total";
32 constexpr const char* CONNECTIONS_FAILED = "network.connections.failed";
33
34 // Transfer metrics
35 constexpr const char* BYTES_SENT = "network.bytes.sent";
36 constexpr const char* BYTES_RECEIVED = "network.bytes.received";
37 constexpr const char* PACKETS_SENT = "network.packets.sent";
38 constexpr const char* PACKETS_RECEIVED = "network.packets.received";
39
40 // Performance metrics
41 constexpr const char* LATENCY_MS = "network.latency.ms";
42 constexpr const char* THROUGHPUT_MBPS = "network.throughput.mbps";
43 constexpr const char* SESSION_DURATION_MS = "network.session.duration.ms";
44
45 // Error metrics
46 constexpr const char* ERRORS_TOTAL = "network.errors.total";
47 constexpr const char* TIMEOUTS_TOTAL = "network.timeouts.total";
48
49 // Server metrics
50 constexpr const char* SERVER_START_TIME = "network.server.start_time.ms";
51 constexpr const char* SERVER_ACCEPT_COUNT = "network.server.accept.count";
52 constexpr const char* SERVER_ACCEPT_FAILED = "network.server.accept.failed";
53
54 // Histogram metrics
55 constexpr const char* LATENCY_HISTOGRAM = "network.latency.histogram";
56 constexpr const char* CONNECTION_TIME_HISTOGRAM = "network.connection_time.histogram";
57 constexpr const char* REQUEST_DURATION_HISTOGRAM = "network.request_duration.histogram";
58}
59
68public:
72 static void report_connection_accepted();
73
78 static void report_connection_failed(const std::string& reason);
79
84 static void report_bytes_sent(size_t bytes);
85
90 static void report_bytes_received(size_t bytes);
91
96 static void report_latency(double ms);
97
102 static void report_error(const std::string& error_type);
103
107 static void report_timeout();
108
113 static void report_active_connections(size_t count);
114
119 static void report_session_duration(double ms);
120
121 // ========================================================================
122 // Histogram-based metrics (with percentile support)
123 // ========================================================================
124
132 static void record_latency(double ms);
133
138 static void record_connection_time(double ms);
139
144 static void record_request_duration(double ms);
145
150 [[nodiscard]] static auto get_latency_p50() -> double;
151
156 [[nodiscard]] static auto get_latency_p95() -> double;
157
162 [[nodiscard]] static auto get_latency_p99() -> double;
163
168 [[nodiscard]] static auto get_connection_time_p99() -> double;
169
174 [[nodiscard]] static auto get_request_duration_p99() -> double;
175
180 [[nodiscard]] static auto get_all_histograms()
181 -> std::map<std::string, histogram_snapshot>;
182
189 static void reset_histograms();
190};
191
192} // namespace kcenon::network::metrics
Helper class for reporting network metrics.
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)
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 * SERVER_ACCEPT_COUNT
constexpr const char * REQUEST_DURATION_HISTOGRAM
constexpr const char * SERVER_ACCEPT_FAILED