metrics: Split cc with counters and gauges

Part of #40712

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
David Goulet 2022-11-10 08:57:39 -05:00
parent 2737037ccd
commit e94c27c0ab
2 changed files with 75 additions and 56 deletions

View File

@ -39,7 +39,8 @@
#include <event2/dns.h>
/** Declarations of each fill function for metrics defined in base_metrics. */
static void fill_cc_values(void);
static void fill_cc_counters_values(void);
static void fill_cc_gauges_values(void);
static void fill_circuits_values(void);
static void fill_conn_counter_values(void);
static void fill_conn_gauge_values(void);
@ -132,11 +133,18 @@ static const relay_metrics_entry_t base_metrics[] =
.fill_fn = fill_streams_values,
},
{
.key = RELAY_METRICS_NUM_CC,
.key = RELAY_METRICS_CC_COUNTERS,
.type = METRICS_TYPE_COUNTER,
.name = METRICS_NAME(relay_congestion_control_total),
.help = "Congestion control related counters",
.fill_fn = fill_cc_values,
.fill_fn = fill_cc_counters_values,
},
{
.key = RELAY_METRICS_CC_GAUGES,
.type = METRICS_TYPE_GAUGE,
.name = METRICS_NAME(relay_congestion_control),
.help = "Congestion control related gauges",
.fill_fn = fill_cc_gauges_values,
},
{
.key = RELAY_METRICS_NUM_DOS,
@ -384,14 +392,15 @@ fill_dos_values(void)
metrics_store_entry_update(sentry, hs_dos_get_intro2_rejected_count());
}
/** Fill function for the RELAY_METRICS_NUM_CC metric. */
/** Fill function for the RELAY_METRICS_CC_COUNTERS metric. */
static void
fill_cc_values(void)
fill_cc_counters_values(void)
{
const relay_metrics_entry_t *rentry = &base_metrics[RELAY_METRICS_NUM_CC];
const relay_metrics_entry_t *rentry =
&base_metrics[RELAY_METRICS_CC_COUNTERS];
metrics_store_entry_t *sentry =
metrics_store_add(the_store, rentry->type, rentry->name, rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "starvation"));
metrics_store_entry_add_label(sentry,
@ -409,6 +418,48 @@ fill_cc_values(void)
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "flow_control"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "xoff_num_sent"));
metrics_store_entry_update(sentry,
cc_stats_flow_num_xoff_sent);
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "flow_control"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "xon_num_sent"));
metrics_store_entry_update(sentry,
cc_stats_flow_num_xon_sent);
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "cc_limits"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "above_delta"));
metrics_store_entry_update(sentry, cc_stats_vegas_above_delta);
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "cc_limits"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "above_ss_cwnd_max"));
metrics_store_entry_update(sentry, cc_stats_vegas_above_ss_cwnd_max);
}
/** Fill function for the RELAY_METRICS_CC_GAUGES metric. */
static void
fill_cc_gauges_values(void)
{
const relay_metrics_entry_t *rentry =
&base_metrics[RELAY_METRICS_CC_GAUGES];
metrics_store_entry_t *sentry =
metrics_store_add(the_store, rentry->type, rentry->name, rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "slow_start_exit"));
metrics_store_entry_add_label(sentry,
@ -434,24 +485,6 @@ fill_cc_values(void)
metrics_store_entry_update(sentry,
tor_llround(cc_stats_circ_close_ss_cwnd_ma));
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "flow_control"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "xoff_num_sent"));
metrics_store_entry_update(sentry,
cc_stats_flow_num_xoff_sent);
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "flow_control"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "xon_num_sent"));
metrics_store_entry_update(sentry,
cc_stats_flow_num_xon_sent);
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
@ -470,22 +503,6 @@ fill_cc_values(void)
metrics_store_entry_update(sentry,
tor_llround(cc_stats_flow_xoff_outbuf_ma));
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "cc_limits"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "above_delta"));
metrics_store_entry_update(sentry, cc_stats_vegas_above_delta);
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,
metrics_format_label("state", "cc_limits"));
metrics_store_entry_add_label(sentry,
metrics_format_label("action", "above_ss_cwnd_max"));
metrics_store_entry_update(sentry, cc_stats_vegas_above_ss_cwnd_max);
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
rentry->help);
metrics_store_entry_add_label(sentry,

View File

@ -16,35 +16,37 @@
* the base_metrics array. */
typedef enum {
/** Number of OOM invocation. */
RELAY_METRICS_NUM_OOM_BYTES = 0,
RELAY_METRICS_NUM_OOM_BYTES,
/** Number of onionskines handled. */
RELAY_METRICS_NUM_ONIONSKINS = 1,
RELAY_METRICS_NUM_ONIONSKINS,
/** Number of sockets. */
RELAY_METRICS_NUM_SOCKETS = 2,
RELAY_METRICS_NUM_SOCKETS,
/** Number of global connection rate limit. */
RELAY_METRICS_NUM_GLOBAL_RW_LIMIT = 3,
RELAY_METRICS_NUM_GLOBAL_RW_LIMIT,
/** Number of DNS queries. */
RELAY_METRICS_NUM_DNS = 4,
RELAY_METRICS_NUM_DNS,
/** Number of DNS query errors. */
RELAY_METRICS_NUM_DNS_ERRORS = 5,
RELAY_METRICS_NUM_DNS_ERRORS,
/** Number of TCP exhaustion reached. */
RELAY_METRICS_NUM_TCP_EXHAUSTION = 6,
RELAY_METRICS_NUM_TCP_EXHAUSTION,
/** Connections counters (always going up). */
RELAY_METRICS_CONN_COUNTERS = 7,
RELAY_METRICS_CONN_COUNTERS,
/** Connections gauges. */
RELAY_METRICS_CONN_GAUGES = 8,
RELAY_METRICS_CONN_GAUGES,
/** Number of streams. */
RELAY_METRICS_NUM_STREAMS = 9,
RELAY_METRICS_NUM_STREAMS,
/** Congestion control counters. */
RELAY_METRICS_NUM_CC = 10,
RELAY_METRICS_CC_COUNTERS,
/** Congestion control gauges. */
RELAY_METRICS_CC_GAUGES,
/** Denial of Service defenses subsystem. */
RELAY_METRICS_NUM_DOS = 11,
RELAY_METRICS_NUM_DOS,
/** Denial of Service defenses subsystem. */
RELAY_METRICS_NUM_TRAFFIC = 12,
RELAY_METRICS_NUM_TRAFFIC,
/** Relay flags. */
RELAY_METRICS_RELAY_FLAGS = 13,
RELAY_METRICS_RELAY_FLAGS,
/** Numer of circuits. */
RELAY_METRICS_NUM_CIRCUITS = 14,
RELAY_METRICS_NUM_CIRCUITS,
} relay_metrics_key_t;
/** The metadata of a relay metric. */