Tor 0.4.9.0-alpha-dev
rephist.h
Go to the documentation of this file.
1/* Copyright (c) 2001 Matej Pfajfar.
2 * Copyright (c) 2001-2004, Roger Dingledine.
3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
5/* See LICENSE for licensing information */
6
7/**
8 * \file rephist.h
9 * \brief Header file for rephist.c.
10 **/
11
12#ifndef TOR_REPHIST_H
13#define TOR_REPHIST_H
14
15void rep_hist_init(void);
16void rep_hist_dump_stats(time_t now, int severity);
17
18void rep_hist_make_router_pessimal(const char *id, time_t when);
19
20void rep_history_clean(time_t before);
21
22void rep_hist_note_router_reachable(const char *id, const tor_addr_t *at_addr,
23 const uint16_t at_port, time_t when);
24void rep_hist_note_router_unreachable(const char *id, time_t when);
25int rep_hist_record_mtbf_data(time_t now, int missing_means_down);
26int rep_hist_load_mtbf_data(time_t now);
27
28time_t rep_hist_downrate_old_runs(time_t now);
29long rep_hist_get_uptime(const char *id, time_t when);
30double rep_hist_get_stability(const char *id, time_t when);
31double rep_hist_get_weighted_fractional_uptime(const char *id, time_t when);
32long rep_hist_get_weighted_time_known(const char *id, time_t when);
34
35void rep_hist_exit_stats_init(time_t now);
36void rep_hist_reset_exit_stats(time_t now);
38char *rep_hist_format_exit_stats(time_t now);
39time_t rep_hist_exit_stats_write(time_t now);
40void rep_hist_note_exit_bytes(uint16_t port, size_t num_written,
41 size_t num_read);
42void rep_hist_note_exit_stream_opened(uint16_t port);
43
44void rep_hist_note_conn_opened(bool initiated, unsigned int type, int af);
45void rep_hist_note_conn_closed(bool initiated, unsigned int type, int af);
46void rep_hist_note_conn_rejected(unsigned int type, int af);
47uint64_t rep_hist_get_conn_created(bool initiated, unsigned int type, int af);
48uint64_t rep_hist_get_conn_opened(bool initiated, unsigned int type, int af);
49uint64_t rep_hist_get_conn_rejected(unsigned int type, int af);
50
51void rep_hist_note_exit_stream(unsigned int cmd);
52uint64_t rep_hist_get_exit_stream_seen(unsigned int cmd);
53
54void rep_hist_buffer_stats_init(time_t now);
56 time_t end_of_interval);
57time_t rep_hist_buffer_stats_write(time_t now);
59void rep_hist_add_buffer_stats(double mean_num_cells_in_queue,
60 double mean_time_cells_in_queue, uint32_t processed_cells);
61char *rep_hist_format_buffer_stats(time_t now);
62void rep_hist_reset_buffer_stats(time_t now);
63
64void rep_hist_desc_stats_init(time_t now);
65void rep_hist_note_desc_served(const char * desc);
67time_t rep_hist_desc_stats_write(time_t now);
68
73
76
78 (uint16_t type));
80 (uint16_t type));
81
82void rep_hist_hs_stats_init(time_t now);
83void rep_hist_hs_stats_term(void);
84time_t rep_hist_hs_stats_write(time_t now, bool is_v3);
85
86void rep_hist_seen_new_rp_cell(bool is_v2);
87
88char *rep_hist_get_hs_v3_stats_string(void);
89void rep_hist_hsdir_stored_maybe_new_v3_onion(const uint8_t *blinded_key);
90
91void rep_hist_free_all(void);
92
93void rep_hist_note_negotiated_link_proto(unsigned link_proto,
94 int started_here);
96
97uint64_t rep_hist_get_n_dns_error(int type, uint8_t error);
98uint64_t rep_hist_get_n_dns_request(int type);
99void rep_hist_note_dns_request(int type);
100void rep_hist_note_dns_error(int type, uint8_t error);
101
103
104/** We combine ntor and ntorv3 stats, so we have 3 stat types:
105 * tap, fast, and ntor. The max type is ntor_v3 (3) */
106#define MAX_ONION_STAT_TYPE MAX_ONION_HANDSHAKE_TYPE
107
108extern uint64_t rephist_total_alloc;
109extern uint32_t rephist_total_num;
110#ifdef TOR_UNIT_TESTS
112extern int onion_handshakes_assigned[MAX_ONION_STAT_TYPE+1];
113#endif
114
115#ifdef REPHIST_PRIVATE
116/** Carries the various hidden service statistics, and any other
117 * information needed. */
118typedef struct hs_v2_stats_t {
119 /** How many v2 relay cells have we seen as rendezvous points? */
120 uint64_t rp_v2_relay_cells_seen;
121} hs_v2_stats_t;
122
123/** Structure that contains the various statistics we keep about v3
124 * services.
125 *
126 * Because of the time period logic of v3 services, v3 statistics are more
127 * sensitive to time than v2 stats. For this reason, we collect v3
128 * statistics strictly from 12:00UTC to 12:00UTC as dictated by
129 * 'start_of_hs_v3_stats_interval'.
130 **/
131typedef struct hs_v3_stats_t {
132 /** How many v3 relay cells have we seen as a rendezvous point? */
133 uint64_t rp_v3_relay_cells_seen;
134
135 /* The number of unique v3 onion descriptors (actually, unique v3 blind keys)
136 * we've seen during the measurement period */
137 digest256map_t *v3_onions_seen_this_period;
138} hs_v3_stats_t;
139
141
142STATIC char *rep_hist_format_hs_stats(time_t now, bool is_v3);
143#endif /* defined(REPHIST_PRIVATE) */
144
145/**
146 * Represents the type of a cell for padding accounting
147 */
148typedef enum padding_type_t {
149 /** A RELAY_DROP cell */
151 /** A CELL_PADDING cell */
153 /** Total counts of padding and non-padding together */
155 /** Total cell counts for all padding-enabled channels */
157 /** CELL_PADDING counts for all padding-enabled channels */
160
161/** The amount of time over which the padding cell counts were counted */
162#define REPHIST_CELL_PADDING_COUNTS_INTERVAL (24*60*60)
167void rep_hist_prep_published_padding_counts(time_t now);
168void rep_hist_padding_count_timers(uint64_t num_timers);
169
170/**
171 * Represents the various types of overload we keep track of and expose in our
172 * extra-info descriptor.
173*/
174typedef enum {
175 /* A general overload -- can have many different causes. */
176 OVERLOAD_GENERAL,
177 /* We went over our configured read rate/burst bandwidth limit */
178 OVERLOAD_READ,
179 /* We went over our configured write rate/burst bandwidth limit */
180 OVERLOAD_WRITE,
181 /* We exhausted the file descriptors in this system */
182 OVERLOAD_FD_EXHAUSTED,
184
188
190uint64_t rep_hist_get_n_tcp_exhaustion(void);
191
194
196
197#ifdef TOR_UNIT_TESTS
198struct hs_v2_stats_t;
199const struct hs_v2_stats_t *rep_hist_get_hs_v2_stats(void);
200struct hs_v3_stats_t;
201const struct hs_v3_stats_t *rep_hist_get_hs_v3_stats(void);
202#endif /* defined(TOR_UNIT_TESTS) */
203
204#endif /* !defined(TOR_REPHIST_H) */
STATIC int onion_handshakes_requested[MAX_ONION_STAT_TYPE+1]
Definition: rephist.c:2237
STATIC char * rep_hist_format_hs_stats(time_t now, bool is_v3)
Definition: rephist.c:2692
STATIC bool should_collect_v3_stats(void)
Definition: rephist.c:2587
void rep_hist_note_dns_error(int type, uint8_t error)
Definition: rephist.c:375
void rep_hist_note_desc_served(const char *desc)
Definition: rephist.c:2215
void rep_hist_consensus_has_changed(const networkstatus_t *ns)
Definition: rephist.c:3014
uint64_t rep_hist_get_drop_cell_received_count(void)
Definition: rephist.c:3032
void rep_hist_buffer_stats_term(void)
Definition: rephist.c:1922
time_t rep_hist_downrate_old_runs(time_t now)
Definition: rephist.c:774
void rep_hist_note_exit_bytes(uint16_t port, size_t num_written, size_t num_read)
Definition: rephist.c:1623
void rep_hist_note_negotiated_link_proto(unsigned link_proto, int started_here)
Definition: rephist.c:2786
padding_type_t
Definition: rephist.h:148
@ PADDING_TYPE_DROP
Definition: rephist.h:150
@ PADDING_TYPE_ENABLED_CELL
Definition: rephist.h:158
@ PADDING_TYPE_TOTAL
Definition: rephist.h:154
@ PADDING_TYPE_ENABLED_TOTAL
Definition: rephist.h:156
@ PADDING_TYPE_CELL
Definition: rephist.h:152
overload_type_t
Definition: rephist.h:174
void rep_hist_note_router_reachable(const char *id, const tor_addr_t *at_addr, const uint16_t at_port, time_t when)
Definition: rephist.c:633
uint64_t rephist_total_alloc
Definition: rephist.c:95
void rep_hist_seen_new_rp_cell(bool is_v2)
Definition: rephist.c:2621
char * rep_hist_get_overload_stats_lines(void)
Definition: rephist.c:494
void rep_hist_desc_stats_term(void)
Definition: rephist.c:2117
uint64_t rep_hist_get_n_dns_request(int type)
Definition: rephist.c:358
void rep_hist_hs_stats_term(void)
Definition: rephist.c:2656
void rep_hist_reset_padding_counts(void)
Definition: rephist.c:2871
void rep_hist_note_conn_closed(bool initiated, unsigned int type, int af)
Definition: rephist.c:1733
double rep_hist_get_stability(const char *id, time_t when)
Definition: rephist.c:895
int rep_hist_load_mtbf_data(time_t now)
Definition: rephist.c:1181
void rep_hist_note_circuit_handshake_dropped(uint16_t type)
Definition: rephist.c:2393
void rep_hist_note_conn_opened(bool initiated, unsigned int type, int af)
Definition: rephist.c:1710
char * rep_hist_get_overload_general_line(void)
Definition: rephist.c:476
void rep_hist_free_all(void)
Definition: rephist.c:2986
void rep_hist_init(void)
Definition: rephist.c:625
int rep_hist_get_circuit_handshake_assigned(uint16_t type)
Definition: rephist.c:2416
time_t rep_hist_desc_stats_write(time_t now)
Definition: rephist.c:2184
void rep_hist_note_exit_stream(unsigned int cmd)
Definition: rephist.c:1656
void rep_hist_buffer_stats_init(time_t now)
Definition: rephist.c:1830
uint64_t rep_hist_get_conn_rejected(unsigned int type, int af)
Definition: rephist.c:1809
void rep_hist_exit_stats_init(time_t now)
Definition: rephist.c:1396
uint64_t rep_hist_get_conn_opened(bool initiated, unsigned int type, int af)
Definition: rephist.c:1793
void rep_hist_note_exit_stream_opened(uint16_t port)
Definition: rephist.c:1637
char * rep_hist_get_padding_count_lines(void)
Definition: rephist.c:2916
double rep_hist_get_weighted_fractional_uptime(const char *id, time_t when)
Definition: rephist.c:907
void rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
Definition: rephist.c:1872
uint64_t rep_hist_get_circuit_n_handshake_assigned(uint16_t type)
Definition: rephist.c:2423
void rep_hist_note_dns_request(int type)
Definition: rephist.c:434
void rep_hist_padding_count_write(padding_type_t type)
Definition: rephist.c:2816
long rep_hist_get_uptime(const char *id, time_t when)
Definition: rephist.c:882
long rep_hist_get_weighted_time_known(const char *id, time_t when)
Definition: rephist.c:923
void rep_hist_note_conn_rejected(unsigned int type, int af)
Definition: rephist.c:1758
void rep_hist_dump_stats(time_t now, int severity)
Definition: rephist.c:946
void rep_hist_reset_buffer_stats(time_t now)
Definition: rephist.c:1930
uint64_t rep_hist_get_conn_created(bool initiated, unsigned int type, int af)
Definition: rephist.c:1777
void rep_hist_note_router_unreachable(const char *id, time_t when)
Definition: rephist.c:706
void rep_hist_hs_stats_init(time_t now)
Definition: rephist.c:2636
void rep_hist_hsdir_stored_maybe_new_v3_onion(const uint8_t *blinded_key)
Definition: rephist.c:2595
void rep_hist_log_link_protocol_counts(void)
Definition: rephist.c:2962
uint32_t rephist_total_num
Definition: rephist.c:97
void rep_hist_add_buffer_stats(double mean_num_cells_in_queue, double mean_time_cells_in_queue, uint32_t processed_cells)
Definition: rephist.c:1853
void rep_hist_note_circuit_handshake_requested(uint16_t type)
Definition: rephist.c:2365
int rep_hist_get_circuit_handshake_requested(uint16_t type)
Definition: rephist.c:2409
void rep_history_clean(time_t before)
Definition: rephist.c:985
void rep_hist_desc_stats_init(time_t now)
Definition: rephist.c:2094
char * rep_hist_format_buffer_stats(time_t now)
Definition: rephist.c:1944
uint64_t rep_hist_get_n_dns_error(int type, uint8_t error)
Definition: rephist.c:317
uint64_t rep_hist_get_n_read_limit_reached(void)
Definition: rephist.c:461
uint64_t rep_hist_get_n_tcp_exhaustion(void)
Definition: rephist.c:586
int rep_hist_record_mtbf_data(time_t now, int missing_means_down)
Definition: rephist.c:1018
char * rep_hist_format_exit_stats(time_t now)
Definition: rephist.c:1438
void rep_hist_reset_exit_stats(time_t now)
Definition: rephist.c:1406
void rep_hist_padding_count_timers(uint64_t num_timers)
Definition: rephist.c:2802
time_t rep_hist_hs_stats_write(time_t now, bool is_v3)
Definition: rephist.c:2743
time_t rep_hist_buffer_stats_write(time_t now)
Definition: rephist.c:2047
uint64_t rep_hist_get_circuit_n_handshake_dropped(uint16_t type)
Definition: rephist.c:2430
void rep_hist_make_router_pessimal(const char *id, time_t when)
Definition: rephist.c:760
void rep_hist_exit_stats_term(void)
Definition: rephist.c:1417
void rep_hist_note_overload(overload_type_t overload)
Definition: rephist.c:541
uint64_t rep_hist_get_exit_stream_seen(unsigned int cmd)
Definition: rephist.c:1676
void rep_hist_log_circuit_handshake_stats(time_t now)
Definition: rephist.c:2437
void rep_hist_note_circuit_handshake_assigned(uint16_t type)
Definition: rephist.c:2384
#define MAX_ONION_STAT_TYPE
Definition: rephist.h:106
void rep_hist_note_tcp_exhaustion(void)
Definition: rephist.c:578
void rep_hist_padding_count_read(padding_type_t type)
Definition: rephist.c:2846
int rep_hist_have_measured_enough_stability(void)
Definition: rephist.c:935
uint64_t rep_hist_get_n_write_limit_reached(void)
Definition: rephist.c:468
time_t rep_hist_exit_stats_write(time_t now)
Definition: rephist.c:1593
#define STATIC
Definition: testsupport.h:32
#define MOCK_DECL(rv, funcname, arglist)
Definition: testsupport.h:127