aboutsummaryrefslogtreecommitdiff
path: root/src/feature/relay/relay_metrics.h
blob: cf9dddf955e7fc7ae73945e2fa6527c8be3b0033 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* Copyright (c) 2021, The Tor Project, Inc. */
/* See LICENSE for licensing information */

/**
 * @file relay_metrics.h
 * @brief Header for feature/relay/relay_metrics.c
 **/

#ifndef TOR_FEATURE_RELAY_RELAY_METRICS_H
#define TOR_FEATURE_RELAY_RELAY_METRICS_H

#include "lib/container/smartlist.h"
#include "lib/metrics/metrics_common.h"

/** Metrics key for each reported metrics. This key is also used as an index in
 * the base_metrics array. */
typedef enum {
  /** Number of OOM invocation. */
  RELAY_METRICS_NUM_OOM_BYTES,
  /** Number of onionskines handled. */
  RELAY_METRICS_NUM_ONIONSKINS,
  /** Number of sockets. */
  RELAY_METRICS_NUM_SOCKETS,
  /** Number of global connection rate limit. */
  RELAY_METRICS_NUM_GLOBAL_RW_LIMIT,
  /** Number of DNS queries. */
  RELAY_METRICS_NUM_DNS,
  /** Number of DNS query errors. */
  RELAY_METRICS_NUM_DNS_ERRORS,
  /** Number of TCP exhaustion reached. */
  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,
  /** Congestion control counters. */
  RELAY_METRICS_CC_COUNTERS,
  /** Congestion control gauges. */
  RELAY_METRICS_CC_GAUGES,
  /** Denial of Service defenses subsystem. */
  RELAY_METRICS_NUM_DOS,
  /** Denial of Service defenses subsystem. */
  RELAY_METRICS_NUM_TRAFFIC,
  /** Relay flags. */
  RELAY_METRICS_RELAY_FLAGS,
  /** Numer of circuits. */
  RELAY_METRICS_NUM_CIRCUITS,
  /** Timestamp at which the current online keys will expire. */
  RELAY_METRICS_SIGNING_CERT_EXPIRY,
  /** Number of times we received an EST_REND cell */
  RELAY_METRICS_NUM_EST_REND,
  /** Number of times we received an EST_INTRO cell */
  RELAY_METRICS_NUM_EST_INTRO,
  /** Number of times we received an INTRO1 cell */
  RELAY_METRICS_NUM_INTRO1_CELLS,
  /** Number of times we received a REND1 cell */
  RELAY_METRICS_NUM_REND1_CELLS,
} relay_metrics_key_t;

/** The metadata of a relay metric. */
typedef struct relay_metrics_entry_t {
  /* Metric key used as a static array index. */
  relay_metrics_key_t key;
  /* Metric type. */
  metrics_type_t type;
  /* Metrics output name. */
  const char *name;
  /* Metrics output help comment. */
  const char *help;
  /* Update value function. */
  void (*fill_fn)(void);
} relay_metrics_entry_t;

/* Init. */
void relay_metrics_init(void);
void relay_metrics_free(void);

/* Accessors. */
const smartlist_t *relay_metrics_get_stores(void);

typedef enum {
  EST_INTRO_SUCCESS,
  EST_INTRO_MALFORMED,
  EST_INTRO_UNSUITABLE_CIRCUIT,
  EST_INTRO_CIRCUIT_DEAD,

  EST_INTRO_ACTION_COUNT
} est_intro_action_t;

void relay_increment_est_intro_action(est_intro_action_t);

typedef enum {
  EST_REND_SUCCESS,
  EST_REND_UNSUITABLE_CIRCUIT,
  EST_REND_SINGLE_HOP,
  EST_REND_MALFORMED,
  EST_REND_DUPLICATE_COOKIE,
  EST_REND_CIRCUIT_DEAD,

  EST_REND_ACTION_COUNT
} est_rend_action_t;

void relay_increment_est_rend_action(est_rend_action_t);

typedef enum {
  INTRO1_SUCCESS,
  INTRO1_CIRCUIT_DEAD,
  INTRO1_MALFORMED,
  INTRO1_UNKNOWN_SERVICE,
  INTRO1_RATE_LIMITED,
  INTRO1_CIRCUIT_REUSED,
  INTRO1_SINGLE_HOP,

  INTRO1_ACTION_COUNT
} intro1_action_t;

void relay_increment_intro1_action(intro1_action_t);

typedef enum {
  REND1_SUCCESS,
  REND1_UNSUITABLE_CIRCUIT,
  REND1_MALFORMED,
  REND1_UNKNOWN_COOKIE,
  REND1_CIRCUIT_DEAD,

  REND1_ACTION_COUNT
} rend1_action_t;

void relay_increment_rend1_action(rend1_action_t);

#endif /* !defined(TOR_FEATURE_RELAY_RELAY_METRICS_H) */