[tor-commits] [tor] 01/03: metrics: Split connections with a counter and gauge

gitolite role git at cupani.torproject.org
Thu Nov 10 14:33:45 UTC 2022


This is an automated email from the git hooks/post-receive script.

dgoulet pushed a commit to branch main
in repository tor.

commit 2737037ccd8391adcfe18f90d80a64310df88c84
Author: David Goulet <dgoulet at torproject.org>
AuthorDate: Thu Nov 10 07:29:18 2022 -0500

    metrics: Split connections with a counter and gauge
    
    Created and Rejected connections are ever going up counters. While
    Opened connections are gauges going up and down.
    
    Fixes #40712
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 src/feature/relay/relay_metrics.c | 58 +++++++++++++++++++++++++++------------
 src/feature/relay/relay_metrics.h | 18 ++++++------
 2 files changed, 51 insertions(+), 25 deletions(-)

diff --git a/src/feature/relay/relay_metrics.c b/src/feature/relay/relay_metrics.c
index c9a3c7944d..6805f0e48b 100644
--- a/src/feature/relay/relay_metrics.c
+++ b/src/feature/relay/relay_metrics.c
@@ -41,7 +41,8 @@
 /** Declarations of each fill function for metrics defined in base_metrics. */
 static void fill_cc_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 +111,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,
@@ -563,12 +571,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 +604,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 +644,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));
   }
 }
 
diff --git a/src/feature/relay/relay_metrics.h b/src/feature/relay/relay_metrics.h
index 8ac24ebdb4..f9fafd427c 100644
--- a/src/feature/relay/relay_metrics.h
+++ b/src/feature/relay/relay_metrics.h
@@ -29,20 +29,22 @@ typedef enum {
   RELAY_METRICS_NUM_DNS_ERRORS = 5,
   /** Number of TCP exhaustion reached. */
   RELAY_METRICS_NUM_TCP_EXHAUSTION = 6,
-  /** Number of connections. */
-  RELAY_METRICS_NUM_CONNECTIONS = 7,
+  /** Connections counters (always going up). */
+  RELAY_METRICS_CONN_COUNTERS = 7,
+  /** Connections gauges. */
+  RELAY_METRICS_CONN_GAUGES = 8,
   /** Number of streams. */
-  RELAY_METRICS_NUM_STREAMS = 8,
+  RELAY_METRICS_NUM_STREAMS = 9,
   /** Congestion control counters. */
-  RELAY_METRICS_NUM_CC = 9,
+  RELAY_METRICS_NUM_CC = 10,
   /** Denial of Service defenses subsystem. */
-  RELAY_METRICS_NUM_DOS = 10,
+  RELAY_METRICS_NUM_DOS = 11,
   /** Denial of Service defenses subsystem. */
-  RELAY_METRICS_NUM_TRAFFIC = 11,
+  RELAY_METRICS_NUM_TRAFFIC = 12,
   /** Relay flags. */
-  RELAY_METRICS_RELAY_FLAGS = 12,
+  RELAY_METRICS_RELAY_FLAGS = 13,
   /** Numer of circuits. */
-  RELAY_METRICS_NUM_CIRCUITS = 13,
+  RELAY_METRICS_NUM_CIRCUITS = 14,
 } relay_metrics_key_t;
 
 /** The metadata of a relay metric. */

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the tor-commits mailing list