mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 15:43:32 +01:00
Remember dirctory bw usage, and log it in the heartbeat
Closes ticket 32720.
This commit is contained in:
parent
17724a7cde
commit
93af83e16a
4
changes/ticket32720
Normal file
4
changes/ticket32720
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
o Minor features (directory):
|
||||||
|
- Remember the number of bytes we have downloaded for each directory
|
||||||
|
purpose while bootstrapping, and while fully bootstrapped. Log this
|
||||||
|
information as part of the heartbeat message. Closes ticket 32720.
|
@ -17,6 +17,7 @@
|
|||||||
#include "core/or/or.h"
|
#include "core/or/or.h"
|
||||||
#include "core/or/circuituse.h"
|
#include "core/or/circuituse.h"
|
||||||
#include "app/config/config.h"
|
#include "app/config/config.h"
|
||||||
|
#include "feature/dirclient/dirclient.h"
|
||||||
#include "core/or/status.h"
|
#include "core/or/status.h"
|
||||||
#include "feature/nodelist/nodelist.h"
|
#include "feature/nodelist/nodelist.h"
|
||||||
#include "core/or/relay.h"
|
#include "core/or/relay.h"
|
||||||
@ -146,6 +147,8 @@ log_heartbeat(time_t now)
|
|||||||
uptime, count_circuits(), bw_sent, bw_rcvd,
|
uptime, count_circuits(), bw_sent, bw_rcvd,
|
||||||
hibernating?" We are currently hibernating.":"");
|
hibernating?" We are currently hibernating.":"");
|
||||||
|
|
||||||
|
dirclient_dump_total_dls();
|
||||||
|
|
||||||
if (server_mode(options) && accounting_is_enabled(options) && !hibernating) {
|
if (server_mode(options) && accounting_is_enabled(options) && !hibernating) {
|
||||||
log_accounting(now, options);
|
log_accounting(now, options);
|
||||||
}
|
}
|
||||||
|
@ -171,6 +171,12 @@ control_event_bootstrap_core(int loglevel, bootstrap_status_t status,
|
|||||||
control_event_client_status(LOG_NOTICE, "%s", buf);
|
control_event_client_status(LOG_NOTICE, "%s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
control_get_bootstrap_percent(void)
|
||||||
|
{
|
||||||
|
return bootstrap_percent;
|
||||||
|
}
|
||||||
|
|
||||||
/** Called when Tor has made progress at bootstrapping its directory
|
/** Called when Tor has made progress at bootstrapping its directory
|
||||||
* information and initial circuits.
|
* information and initial circuits.
|
||||||
*
|
*
|
||||||
|
@ -164,6 +164,7 @@ int control_event_buildtimeout_set(buildtimeout_set_event_t type,
|
|||||||
int control_event_signal(uintptr_t signal);
|
int control_event_signal(uintptr_t signal);
|
||||||
|
|
||||||
void control_event_bootstrap(bootstrap_status_t status, int progress);
|
void control_event_bootstrap(bootstrap_status_t status, int progress);
|
||||||
|
int control_get_bootstrap_percent(void);
|
||||||
MOCK_DECL(void, control_event_bootstrap_prob_or,(const char *warn,
|
MOCK_DECL(void, control_event_bootstrap_prob_or,(const char *warn,
|
||||||
int reason,
|
int reason,
|
||||||
or_connection_t *or_conn));
|
or_connection_t *or_conn));
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "feature/client/entrynodes.h"
|
#include "feature/client/entrynodes.h"
|
||||||
#include "feature/control/control_events.h"
|
#include "feature/control/control_events.h"
|
||||||
#include "feature/dirauth/authmode.h"
|
#include "feature/dirauth/authmode.h"
|
||||||
|
#include "feature/dirclient/dirclient.h"
|
||||||
#include "feature/dirauth/dirvote.h"
|
#include "feature/dirauth/dirvote.h"
|
||||||
#include "feature/dirauth/shared_random.h"
|
#include "feature/dirauth/shared_random.h"
|
||||||
#include "feature/dircache/dirserv.h"
|
#include "feature/dircache/dirserv.h"
|
||||||
@ -1964,6 +1965,40 @@ dir_client_decompress_response_body(char **bodyp, size_t *bodylenp,
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Total number of bytes downloaded of each directory purpose, when
|
||||||
|
* bootstrapped, and when not bootstrapped.
|
||||||
|
*
|
||||||
|
* (For example, the number of bytes downloaded of purpose p while
|
||||||
|
* not fully bootstrapped is total_dl[p][false].)
|
||||||
|
**/
|
||||||
|
static uint64_t total_dl[DIR_PURPOSE_MAX_][2];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heartbeat: dump a summary of how many bytes of which purpose we've
|
||||||
|
* downloaded, when bootstrapping and when not bootstrapping.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
dirclient_dump_total_dls(void)
|
||||||
|
{
|
||||||
|
log_notice(LD_NET,
|
||||||
|
"While bootstrapping, fetched this many bytes: ");
|
||||||
|
for (int i=0; i < DIR_PURPOSE_MAX_; ++i) {
|
||||||
|
uint64_t n = total_dl[i][0];
|
||||||
|
if (n) {
|
||||||
|
log_notice(LD_NET, " %zu (%s)", n, dir_conn_purpose_to_string(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log_notice(LD_NET,
|
||||||
|
"While not bootsrapping, fetched this many bytes: ");
|
||||||
|
for (int i=0; i < DIR_PURPOSE_MAX_; ++i) {
|
||||||
|
uint64_t n = total_dl[i][1];
|
||||||
|
if (n) {
|
||||||
|
log_notice(LD_NET, " %zu (%s)", n, dir_conn_purpose_to_string(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** We are a client, and we've finished reading the server's
|
/** We are a client, and we've finished reading the server's
|
||||||
* response. Parse it and act appropriately.
|
* response. Parse it and act appropriately.
|
||||||
*
|
*
|
||||||
@ -1997,6 +2032,16 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
|||||||
|
|
||||||
received_bytes = connection_get_inbuf_len(TO_CONN(conn));
|
received_bytes = connection_get_inbuf_len(TO_CONN(conn));
|
||||||
|
|
||||||
|
log_debug(LD_DIR, "Downloaded %zu bytes on connection of purpose "
|
||||||
|
"%s; bootstrap %d%%",
|
||||||
|
received_bytes,
|
||||||
|
dir_conn_purpose_to_string(conn->base_.purpose),
|
||||||
|
control_get_bootstrap_percent());
|
||||||
|
{
|
||||||
|
bool bootstrapped = control_get_bootstrap_percent() == 100;
|
||||||
|
total_dl[conn->base_.purpose][bootstrapped] += received_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
switch (connection_fetch_from_buf_http(TO_CONN(conn),
|
switch (connection_fetch_from_buf_http(TO_CONN(conn),
|
||||||
&headers, MAX_HEADERS_SIZE,
|
&headers, MAX_HEADERS_SIZE,
|
||||||
&body, &body_len, MAX_DIR_DL_SIZE,
|
&body, &body_len, MAX_DIR_DL_SIZE,
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#include "feature/hs/hs_ident.h"
|
#include "feature/hs/hs_ident.h"
|
||||||
|
|
||||||
|
void dirclient_dump_total_dls(void);
|
||||||
|
|
||||||
int directories_have_accepted_server_descriptor(void);
|
int directories_have_accepted_server_descriptor(void);
|
||||||
void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
|
void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
|
||||||
dirinfo_type_t type, const char *payload,
|
dirinfo_type_t type, const char *payload,
|
||||||
|
Loading…
Reference in New Issue
Block a user