mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
rephist: Add a counter for the onioniskins stats
Current counters are reset every heartbeat. This commit adds two counters for the assigned and dropped onionskins that are not reset so they can be exported onto the MetricsPort. Closes #40387 Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
3fbd510c52
commit
d4fbfb54d4
@ -265,7 +265,7 @@ fill_onionskins_values(void)
|
|||||||
metrics_store_entry_add_label(sentry,
|
metrics_store_entry_add_label(sentry,
|
||||||
metrics_format_label("action", "processed"));
|
metrics_format_label("action", "processed"));
|
||||||
metrics_store_entry_update(sentry,
|
metrics_store_entry_update(sentry,
|
||||||
rep_hist_get_circuit_handshake_assigned(t));
|
rep_hist_get_circuit_n_handshake_assigned(t));
|
||||||
|
|
||||||
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
|
sentry = metrics_store_add(the_store, rentry->type, rentry->name,
|
||||||
rentry->help);
|
rentry->help);
|
||||||
@ -273,7 +273,7 @@ fill_onionskins_values(void)
|
|||||||
metrics_store_entry_add_label(sentry,
|
metrics_store_entry_add_label(sentry,
|
||||||
metrics_format_label("action", "dropped"));
|
metrics_format_label("action", "dropped"));
|
||||||
metrics_store_entry_update(sentry,
|
metrics_store_entry_update(sentry,
|
||||||
rep_hist_get_circuit_handshake_dropped(t));
|
rep_hist_get_circuit_n_handshake_dropped(t));
|
||||||
tor_free(type_label);
|
tor_free(type_label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1997,12 +1997,18 @@ rep_hist_note_desc_served(const char * desc)
|
|||||||
/** Internal statistics to track how many requests of each type of
|
/** Internal statistics to track how many requests of each type of
|
||||||
* handshake we've received, and how many we've assigned to cpuworkers.
|
* handshake we've received, and how many we've assigned to cpuworkers.
|
||||||
* Useful for seeing trends in cpu load.
|
* Useful for seeing trends in cpu load.
|
||||||
|
*
|
||||||
|
* They are reset at every heartbeat.
|
||||||
* @{ */
|
* @{ */
|
||||||
STATIC int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
|
STATIC int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
|
||||||
STATIC int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
|
STATIC int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
|
||||||
STATIC uint64_t onion_handshakes_dropped[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
||||||
|
/** Counters keeping the same stats as above but for the entire duration of the
|
||||||
|
* process (not reset). */
|
||||||
|
static uint64_t stats_n_onionskin_assigned[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
|
||||||
|
static uint64_t stats_n_onionskin_dropped[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
|
||||||
|
|
||||||
/** A new onionskin (using the <b>type</b> handshake) has arrived. */
|
/** A new onionskin (using the <b>type</b> handshake) has arrived. */
|
||||||
void
|
void
|
||||||
rep_hist_note_circuit_handshake_requested(uint16_t type)
|
rep_hist_note_circuit_handshake_requested(uint16_t type)
|
||||||
@ -2016,8 +2022,10 @@ rep_hist_note_circuit_handshake_requested(uint16_t type)
|
|||||||
void
|
void
|
||||||
rep_hist_note_circuit_handshake_assigned(uint16_t type)
|
rep_hist_note_circuit_handshake_assigned(uint16_t type)
|
||||||
{
|
{
|
||||||
if (type <= MAX_ONION_HANDSHAKE_TYPE)
|
if (type <= MAX_ONION_HANDSHAKE_TYPE) {
|
||||||
onion_handshakes_assigned[type]++;
|
onion_handshakes_assigned[type]++;
|
||||||
|
stats_n_onionskin_assigned[type]++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** We've just drop an onionskin (using the <b>type</b> handshake) due to being
|
/** We've just drop an onionskin (using the <b>type</b> handshake) due to being
|
||||||
@ -2025,8 +2033,9 @@ rep_hist_note_circuit_handshake_assigned(uint16_t type)
|
|||||||
void
|
void
|
||||||
rep_hist_note_circuit_handshake_dropped(uint16_t type)
|
rep_hist_note_circuit_handshake_dropped(uint16_t type)
|
||||||
{
|
{
|
||||||
if (type <= MAX_ONION_HANDSHAKE_TYPE)
|
if (type <= MAX_ONION_HANDSHAKE_TYPE) {
|
||||||
onion_handshakes_dropped[type]++;
|
stats_n_onionskin_dropped[type]++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the circuit handshake value that is requested. */
|
/** Get the circuit handshake value that is requested. */
|
||||||
@ -2049,14 +2058,24 @@ rep_hist_get_circuit_handshake_assigned, (uint16_t type))
|
|||||||
return onion_handshakes_assigned[type];
|
return onion_handshakes_assigned[type];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the circuit handshake value that is dropped. */
|
/** Get the total number of circuit handshake value that is assigned. */
|
||||||
MOCK_IMPL(uint64_t,
|
MOCK_IMPL(uint64_t,
|
||||||
rep_hist_get_circuit_handshake_dropped, (uint16_t type))
|
rep_hist_get_circuit_n_handshake_assigned, (uint16_t type))
|
||||||
{
|
{
|
||||||
if (BUG(type > MAX_ONION_HANDSHAKE_TYPE)) {
|
if (BUG(type > MAX_ONION_HANDSHAKE_TYPE)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return onion_handshakes_dropped[type];
|
return stats_n_onionskin_assigned[type];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get the total number of circuit handshake value that is dropped. */
|
||||||
|
MOCK_IMPL(uint64_t,
|
||||||
|
rep_hist_get_circuit_n_handshake_dropped, (uint16_t type))
|
||||||
|
{
|
||||||
|
if (BUG(type > MAX_ONION_HANDSHAKE_TYPE)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return stats_n_onionskin_dropped[type];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Log our onionskin statistics since the last time we were called. */
|
/** Log our onionskin statistics since the last time we were called. */
|
||||||
|
@ -63,7 +63,11 @@ void rep_hist_log_circuit_handshake_stats(time_t now);
|
|||||||
|
|
||||||
MOCK_DECL(int, rep_hist_get_circuit_handshake_requested, (uint16_t type));
|
MOCK_DECL(int, rep_hist_get_circuit_handshake_requested, (uint16_t type));
|
||||||
MOCK_DECL(int, rep_hist_get_circuit_handshake_assigned, (uint16_t type));
|
MOCK_DECL(int, rep_hist_get_circuit_handshake_assigned, (uint16_t type));
|
||||||
MOCK_DECL(uint64_t, rep_hist_get_circuit_handshake_dropped, (uint16_t type));
|
|
||||||
|
MOCK_DECL(uint64_t, rep_hist_get_circuit_n_handshake_assigned,
|
||||||
|
(uint16_t type));
|
||||||
|
MOCK_DECL(uint64_t, rep_hist_get_circuit_n_handshake_dropped,
|
||||||
|
(uint16_t type));
|
||||||
|
|
||||||
void rep_hist_hs_stats_init(time_t now);
|
void rep_hist_hs_stats_init(time_t now);
|
||||||
void rep_hist_hs_stats_term(void);
|
void rep_hist_hs_stats_term(void);
|
||||||
@ -90,7 +94,6 @@ extern uint32_t rephist_total_num;
|
|||||||
#ifdef TOR_UNIT_TESTS
|
#ifdef TOR_UNIT_TESTS
|
||||||
extern int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1];
|
extern int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1];
|
||||||
extern int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1];
|
extern int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1];
|
||||||
extern uint64_t onion_handshakes_dropped[MAX_ONION_HANDSHAKE_TYPE+1];
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef REPHIST_PRIVATE
|
#ifdef REPHIST_PRIVATE
|
||||||
|
Loading…
Reference in New Issue
Block a user