|
@@ -347,7 +347,6 @@ geoip_determine_shares(time_t now)
|
|
|
last_time_determined_shares = now;
|
|
|
}
|
|
|
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
/** Calculate which fraction of v2 and v3 directory requests aimed at caches
|
|
|
* have been sent to us since the last call of this function up to time
|
|
|
* <b>now</b>. Set *<b>v2_share_out</b> and *<b>v3_share_out</b> to the
|
|
@@ -367,7 +366,6 @@ geoip_get_mean_shares(time_t now, double *v2_share_out,
|
|
|
share_seconds = 0;
|
|
|
return 0;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
/** Note that we've seen a client connect from the IP <b>addr</b> (host order)
|
|
|
* at time <b>now</b>. Ignored by all but bridges and directories if
|
|
@@ -379,24 +377,17 @@ geoip_note_client_seen(geoip_client_action_t action,
|
|
|
or_options_t *options = get_options();
|
|
|
clientmap_entry_t lookup, *ent;
|
|
|
if (action == GEOIP_CLIENT_CONNECT) {
|
|
|
-#ifdef ENABLE_ENTRY_STATS
|
|
|
- if (!options->EntryStatistics)
|
|
|
- return;
|
|
|
-#else
|
|
|
- if (!(options->BridgeRelay && options->BridgeRecordUsageByCountry))
|
|
|
+ /* Only remember statistics as entry guard or as bridge. */
|
|
|
+ if (!options->EntryStatistics ||
|
|
|
+ (!(options->BridgeRelay && options->BridgeRecordUsageByCountry)))
|
|
|
return;
|
|
|
-#endif
|
|
|
/* Did we recently switch from bridge to relay or back? */
|
|
|
if (client_history_starts > now)
|
|
|
return;
|
|
|
} else {
|
|
|
-#ifndef ENABLE_DIRREQ_STATS
|
|
|
- return;
|
|
|
-#else
|
|
|
if (options->BridgeRelay || options->BridgeAuthoritativeDir ||
|
|
|
!options->DirReqStatistics)
|
|
|
return;
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
/* Rotate the current request period. */
|
|
@@ -495,7 +486,6 @@ geoip_remove_old_clients(time_t cutoff)
|
|
|
client_history_starts = cutoff;
|
|
|
}
|
|
|
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
/** How many responses are we giving to clients requesting v2 network
|
|
|
* statuses? */
|
|
|
static uint32_t ns_v2_responses[GEOIP_NS_RESPONSE_NUM];
|
|
@@ -503,7 +493,6 @@ static uint32_t ns_v2_responses[GEOIP_NS_RESPONSE_NUM];
|
|
|
/** How many responses are we giving to clients requesting v3 network
|
|
|
* statuses? */
|
|
|
static uint32_t ns_v3_responses[GEOIP_NS_RESPONSE_NUM];
|
|
|
-#endif
|
|
|
|
|
|
/** Note that we've rejected a client's request for a v2 or v3 network
|
|
|
* status, encoded in <b>action</b> for reason <b>reason</b> at time
|
|
@@ -512,7 +501,6 @@ void
|
|
|
geoip_note_ns_response(geoip_client_action_t action,
|
|
|
geoip_ns_response_t response)
|
|
|
{
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
static int arrays_initialized = 0;
|
|
|
if (!get_options()->DirReqStatistics)
|
|
|
return;
|
|
@@ -528,10 +516,6 @@ geoip_note_ns_response(geoip_client_action_t action,
|
|
|
ns_v3_responses[response]++;
|
|
|
else
|
|
|
ns_v2_responses[response]++;
|
|
|
-#else
|
|
|
- (void) action;
|
|
|
- (void) response;
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
/** Do not mention any country from which fewer than this number of IPs have
|
|
@@ -709,7 +693,6 @@ geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
/** Return a newly allocated comma-separated string containing statistics
|
|
|
* on network status downloads. The string contains the number of completed
|
|
|
* requests, timeouts, and still running requests as well as the download
|
|
@@ -800,25 +783,18 @@ geoip_get_dirreq_history(geoip_client_action_t action,
|
|
|
smartlist_free(dirreq_times);
|
|
|
return result;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
/** How long do we have to have observed per-country request history before we
|
|
|
* are willing to talk about it? */
|
|
|
#define GEOIP_MIN_OBSERVATION_TIME (12*60*60)
|
|
|
|
|
|
-/** Return a newly allocated comma-separated string containing entries for all
|
|
|
- * the countries from which we've seen enough clients connect. The entry
|
|
|
- * format is cc=num where num is the number of IPs we've seen connecting from
|
|
|
- * that country, and cc is a lowercased country code. Returns NULL if we don't
|
|
|
- * want to export geoip data yet. */
|
|
|
-char *
|
|
|
-geoip_get_client_history(time_t now, geoip_client_action_t action)
|
|
|
+/** Helper for geoip_get_client_history_dirreq() and
|
|
|
+ * geoip_get_client_history_bridge(). */
|
|
|
+static char *
|
|
|
+geoip_get_client_history(time_t now, geoip_client_action_t action,
|
|
|
+ int min_observation_time, unsigned granularity)
|
|
|
{
|
|
|
char *result = NULL;
|
|
|
- int min_observation_time = GEOIP_MIN_OBSERVATION_TIME;
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
- min_observation_time = DIR_RECORD_USAGE_MIN_OBSERVATION_TIME;
|
|
|
-#endif
|
|
|
if (!geoip_is_loaded())
|
|
|
return NULL;
|
|
|
if (client_history_starts < (now - min_observation_time)) {
|
|
@@ -830,10 +806,6 @@ geoip_get_client_history(time_t now, geoip_client_action_t action)
|
|
|
clientmap_entry_t **ent;
|
|
|
unsigned *counts = tor_malloc_zero(sizeof(unsigned)*n_countries);
|
|
|
unsigned total = 0;
|
|
|
- unsigned granularity = IP_GRANULARITY;
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
- granularity = DIR_RECORD_USAGE_GRANULARITY;
|
|
|
-#endif
|
|
|
HT_FOREACH(ent, clientmap, &client_history) {
|
|
|
int country;
|
|
|
if ((*ent)->action != (int)action)
|
|
@@ -889,6 +861,34 @@ geoip_get_client_history(time_t now, geoip_client_action_t action)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+/** Return a newly allocated comma-separated string containing entries for
|
|
|
+ * all the countries from which we've seen enough clients connect as a
|
|
|
+ * directory. The entry format is cc=num where num is the number of IPs
|
|
|
+ * we've seen connecting from that country, and cc is a lowercased country
|
|
|
+ * code. Returns NULL if we don't want to export geoip data yet. */
|
|
|
+char *
|
|
|
+geoip_get_client_history_dirreq(time_t now,
|
|
|
+ geoip_client_action_t action)
|
|
|
+{
|
|
|
+ return geoip_get_client_history(now, action,
|
|
|
+ DIR_RECORD_USAGE_MIN_OBSERVATION_TIME,
|
|
|
+ DIR_RECORD_USAGE_GRANULARITY);
|
|
|
+}
|
|
|
+
|
|
|
+/** Return a newly allocated comma-separated string containing entries for
|
|
|
+ * all the countries from which we've seen enough clients connect as a
|
|
|
+ * bridge. The entry format is cc=num where num is the number of IPs
|
|
|
+ * we've seen connecting from that country, and cc is a lowercased country
|
|
|
+ * code. Returns NULL if we don't want to export geoip data yet. */
|
|
|
+char *
|
|
|
+geoip_get_client_history_bridge(time_t now,
|
|
|
+ geoip_client_action_t action)
|
|
|
+{
|
|
|
+ return geoip_get_client_history(now, action,
|
|
|
+ GEOIP_MIN_OBSERVATION_TIME,
|
|
|
+ IP_GRANULARITY);
|
|
|
+}
|
|
|
+
|
|
|
/** Return a newly allocated string holding the per-country request history
|
|
|
* for <b>action</b> in a format suitable for an extra-info document, or NULL
|
|
|
* on failure. */
|
|
@@ -899,10 +899,6 @@ geoip_get_request_history(time_t now, geoip_client_action_t action)
|
|
|
char *result;
|
|
|
unsigned granularity = IP_GRANULARITY;
|
|
|
int min_observation_time = GEOIP_MIN_OBSERVATION_TIME;
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
- granularity = DIR_RECORD_USAGE_GRANULARITY;
|
|
|
- min_observation_time = DIR_RECORD_USAGE_MIN_OBSERVATION_TIME;
|
|
|
-#endif
|
|
|
|
|
|
if (client_history_starts >= (now - min_observation_time))
|
|
|
return NULL;
|
|
@@ -948,7 +944,6 @@ geoip_get_request_history(time_t now, geoip_client_action_t action)
|
|
|
static void
|
|
|
dump_geoip_stats(void)
|
|
|
{
|
|
|
-#ifdef ENABLE_DIRREQ_STATS
|
|
|
time_t now = time(NULL);
|
|
|
time_t request_start;
|
|
|
char *filename = get_datadir_fname("dirreq-stats");
|
|
@@ -962,8 +957,10 @@ dump_geoip_stats(void)
|
|
|
if (!get_options()->DirReqStatistics)
|
|
|
goto done;
|
|
|
|
|
|
- data_v2 = geoip_get_client_history(now, GEOIP_CLIENT_NETWORKSTATUS_V2);
|
|
|
- data_v3 = geoip_get_client_history(now, GEOIP_CLIENT_NETWORKSTATUS);
|
|
|
+ data_v2 = geoip_get_client_history_dirreq(now,
|
|
|
+ GEOIP_CLIENT_NETWORKSTATUS_V2);
|
|
|
+ data_v3 = geoip_get_client_history_dirreq(now,
|
|
|
+ GEOIP_CLIENT_NETWORKSTATUS);
|
|
|
format_iso_time(since, geoip_get_history_start());
|
|
|
format_iso_time(written, now);
|
|
|
out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND,
|
|
@@ -1045,7 +1042,6 @@ dump_geoip_stats(void)
|
|
|
tor_free(filename);
|
|
|
tor_free(data_v2);
|
|
|
tor_free(data_v3);
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
/** Store all our geoip statistics as entry guards into
|