Commit 4b28cf79 authored by David Goulet's avatar David Goulet 🐼
Browse files

Merge branch 'maint-0.4.7' into release-0.4.7

parents 421e3dab e94c27c0
Loading
Loading
Loading
Loading
+96 −55
Original line number Diff line number Diff line
@@ -39,9 +39,11 @@
#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_connections_values(void);
static void fill_conn_counter_values(void);
static void fill_conn_gauge_values(void);
static void fill_dns_error_values(void);
static void fill_dns_query_values(void);
static void fill_dos_values(void);
@@ -110,11 +112,18 @@ static const relay_metrics_entry_t base_metrics[] =
    .fill_fn = fill_tcp_exhaustion_values,
  },
  {
    .key = RELAY_METRICS_NUM_CONNECTIONS,
    .type = METRICS_TYPE_GAUGE,
    .key = RELAY_METRICS_CONN_COUNTERS,
    .type = METRICS_TYPE_COUNTER,
    .name = METRICS_NAME(relay_connections_total),
    .help = "Total number of connections",
    .fill_fn = fill_connections_values,
    .help = "Total number of created/rejected connections",
    .fill_fn = fill_conn_counter_values,
  },
  {
    .key = RELAY_METRICS_CONN_GAUGES,
    .type = METRICS_TYPE_GAUGE,
    .name = METRICS_NAME(relay_connections),
    .help = "Total number of opened connections",
    .fill_fn = fill_conn_gauge_values,
  },
  {
    .key = RELAY_METRICS_NUM_STREAMS,
@@ -124,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,
@@ -376,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,
@@ -402,81 +419,89 @@ 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", "slow_start_exit"));
          metrics_format_label("state", "flow_control"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "cwnd"));
          metrics_format_label("action", "xoff_num_sent"));
  metrics_store_entry_update(sentry,
                             tor_llround(cc_stats_vegas_exit_ss_cwnd_ma));
                             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", "on_circ_close"));
          metrics_format_label("state", "flow_control"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "cwnd"));
          metrics_format_label("action", "xon_num_sent"));
  metrics_store_entry_update(sentry,
                             tor_llround(cc_stats_circ_close_cwnd_ma));
                             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", "on_circ_close"));
          metrics_format_label("state", "cc_limits"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "ss_cwnd"));
  metrics_store_entry_update(sentry,
                             tor_llround(cc_stats_circ_close_ss_cwnd_ma));
          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", "flow_control"));
          metrics_format_label("state", "cc_limits"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "xoff_num_sent"));
  metrics_store_entry_update(sentry,
                             cc_stats_flow_num_xoff_sent);
          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);
/** 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", "flow_control"));
          metrics_format_label("state", "slow_start_exit"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "xon_num_sent"));
          metrics_format_label("action", "cwnd"));
  metrics_store_entry_update(sentry,
                             cc_stats_flow_num_xon_sent);
                             tor_llround(cc_stats_vegas_exit_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", "buffers"));
          metrics_format_label("state", "on_circ_close"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "xon_outbuf"));
          metrics_format_label("action", "cwnd"));
  metrics_store_entry_update(sentry,
                             tor_llround(cc_stats_flow_xon_outbuf_ma));
                             tor_llround(cc_stats_circ_close_cwnd_ma));

  sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                             rentry->help);
  metrics_store_entry_add_label(sentry,
          metrics_format_label("state", "buffers"));
          metrics_format_label("state", "on_circ_close"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "xoff_outbuf"));
          metrics_format_label("action", "ss_cwnd"));
  metrics_store_entry_update(sentry,
                             tor_llround(cc_stats_flow_xoff_outbuf_ma));
                             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", "cc_limits"));
          metrics_format_label("state", "buffers"));
  metrics_store_entry_add_label(sentry,
          metrics_format_label("action", "above_delta"));
  metrics_store_entry_update(sentry, cc_stats_vegas_above_delta);
          metrics_format_label("action", "xon_outbuf"));
  metrics_store_entry_update(sentry,
                             tor_llround(cc_stats_flow_xon_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_format_label("state", "buffers"));
  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);
          metrics_format_label("action", "xoff_outbuf"));
  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);
@@ -563,12 +588,12 @@ fill_single_connection_value(metrics_store_entry_t *sentry,
  metrics_store_entry_update(sentry, value);
}

/** Fill function for the RELAY_METRICS_NUM_CONNECTIONS metric. */
/** Fill function for the RELAY_METRICS_CONN_COUNTERS metric. */
static void
fill_connections_values(void)
fill_conn_counter_values(void)
{
  const relay_metrics_entry_t *rentry =
    &base_metrics[RELAY_METRICS_NUM_CONNECTIONS];
    &base_metrics[RELAY_METRICS_CONN_COUNTERS];

  for (unsigned int i = CONN_TYPE_MIN_; i < CONN_TYPE_MAX_ ; i++) {
    /* Type is unused. Ugly but else we clobber the output. */
@@ -596,6 +621,31 @@ fill_connections_values(void)

    sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                               rentry->help);
    fill_single_connection_value(sentry, i, "received", "rejected", AF_INET,
                                 rep_hist_get_conn_rejected(i, AF_INET));
    sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                               rentry->help);
    fill_single_connection_value(sentry, i, "received", "rejected", AF_INET6,
                                 rep_hist_get_conn_rejected(i, AF_INET6));

    /* No counter for "initiated" + "rejected" connections exists. */
  }
}

/** Fill function for the RELAY_METRICS_CONN_GAUGES metric. */
static void
fill_conn_gauge_values(void)
{
  const relay_metrics_entry_t *rentry =
    &base_metrics[RELAY_METRICS_CONN_GAUGES];

  for (unsigned int i = CONN_TYPE_MIN_; i < CONN_TYPE_MAX_ ; i++) {
    /* Type is unused. Ugly but else we clobber the output. */
    if (i == 10) {
      continue;
    }
    metrics_store_entry_t *sentry =
      metrics_store_add(the_store, rentry->type, rentry->name, rentry->help);
    fill_single_connection_value(sentry, i, "initiated", "opened", AF_INET,
                                 rep_hist_get_conn_opened(false, i, AF_INET));
    sentry = metrics_store_add(the_store, rentry->type, rentry->name,
@@ -611,15 +661,6 @@ fill_connections_values(void)
                               rentry->help);
    fill_single_connection_value(sentry, i, "received", "opened", AF_INET6,
                                 rep_hist_get_conn_opened(true, i, AF_INET6));

    sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                               rentry->help);
    fill_single_connection_value(sentry, i, "received", "rejected", AF_INET,
                                 rep_hist_get_conn_rejected(i, AF_INET));
    sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                               rentry->help);
    fill_single_connection_value(sentry, i, "received", "rejected", AF_INET6,
                                 rep_hist_get_conn_rejected(i, AF_INET6));
  }
}

+19 −15
Original line number Diff line number Diff line
@@ -16,33 +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,
  /** Number of connections. */
  RELAY_METRICS_NUM_CONNECTIONS = 7,
  RELAY_METRICS_NUM_TCP_EXHAUSTION,
  /** Connections counters (always going up). */
  RELAY_METRICS_CONN_COUNTERS,
  /** Connections gauges. */
  RELAY_METRICS_CONN_GAUGES,
  /** Number of streams. */
  RELAY_METRICS_NUM_STREAMS = 8,
  RELAY_METRICS_NUM_STREAMS,
  /** Congestion control counters. */
  RELAY_METRICS_NUM_CC = 9,
  RELAY_METRICS_CC_COUNTERS,
  /** Congestion control gauges. */
  RELAY_METRICS_CC_GAUGES,
  /** Denial of Service defenses subsystem. */
  RELAY_METRICS_NUM_DOS = 10,
  RELAY_METRICS_NUM_DOS,
  /** Denial of Service defenses subsystem. */
  RELAY_METRICS_NUM_TRAFFIC = 11,
  RELAY_METRICS_NUM_TRAFFIC,
  /** Relay flags. */
  RELAY_METRICS_RELAY_FLAGS = 12,
  RELAY_METRICS_RELAY_FLAGS,
  /** Numer of circuits. */
  RELAY_METRICS_NUM_CIRCUITS = 13,
  RELAY_METRICS_NUM_CIRCUITS,
} relay_metrics_key_t;

/** The metadata of a relay metric. */