Fix a couple of smaller issues with gathering statistics.

- Avoid memmoving 0 bytes which might lead to compiler warnings.

- Don't require relays to be entry node AND bridge at the same to time to
  record clients.

- Fix a memory leak when writing dirreq-stats.

- Don't say in the stats files that measurement intervals are twice as long
  as they really are.

- Reduce minimum observation time for requests to 12 hours, or we might
  never record usage.

- Clear exit stats correctly after writing them, or we accumulate old stats
  over time.

- Reset interval start for buffer stats, too.
This commit is contained in:
Karsten Loesing 2009-09-24 21:58:56 +02:00
parent 52fa4f6428
commit 457bebe01a
5 changed files with 14 additions and 6 deletions

View File

@ -5,6 +5,9 @@ Changes in version 0.2.2.4-alpha - 2009-??-??
code, and so on. The unit test code has moved to its own code, and so on. The unit test code has moved to its own
subdirectory, and has been split into multiple modules. subdirectory, and has been split into multiple modules.
o Minor bugfixes:
- Fix a couple of smaller issues with gathering statistics. Bugfixes
on 0.2.2.1-alpha.
Changes in version 0.2.2.3-alpha - 2009-09-23 Changes in version 0.2.2.3-alpha - 2009-09-23
o Major bugfixes: o Major bugfixes:

View File

@ -370,10 +370,12 @@ static void
rotate_request_period(void) rotate_request_period(void)
{ {
SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, { SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, {
#if REQUEST_HIST_LEN > 1
memmove(&c->n_v2_ns_requests[0], &c->n_v2_ns_requests[1], memmove(&c->n_v2_ns_requests[0], &c->n_v2_ns_requests[1],
sizeof(uint32_t)*(REQUEST_HIST_LEN-1)); sizeof(uint32_t)*(REQUEST_HIST_LEN-1));
memmove(&c->n_v3_ns_requests[0], &c->n_v3_ns_requests[1], memmove(&c->n_v3_ns_requests[0], &c->n_v3_ns_requests[1],
sizeof(uint32_t)*(REQUEST_HIST_LEN-1)); sizeof(uint32_t)*(REQUEST_HIST_LEN-1));
#endif
c->n_v2_ns_requests[REQUEST_HIST_LEN-1] = 0; c->n_v2_ns_requests[REQUEST_HIST_LEN-1] = 0;
c->n_v3_ns_requests[REQUEST_HIST_LEN-1] = 0; c->n_v3_ns_requests[REQUEST_HIST_LEN-1] = 0;
}); });
@ -393,7 +395,7 @@ geoip_note_client_seen(geoip_client_action_t action,
clientmap_entry_t lookup, *ent; clientmap_entry_t lookup, *ent;
if (action == GEOIP_CLIENT_CONNECT) { if (action == GEOIP_CLIENT_CONNECT) {
/* Only remember statistics as entry guard or as bridge. */ /* Only remember statistics as entry guard or as bridge. */
if (!options->EntryStatistics || if (!options->EntryStatistics &&
(!(options->BridgeRelay && options->BridgeRecordUsageByCountry))) (!(options->BridgeRelay && options->BridgeRecordUsageByCountry)))
return; return;
/* Did we recently switch from bridge to relay or back? */ /* Did we recently switch from bridge to relay or back? */
@ -1009,6 +1011,8 @@ geoip_dirreq_stats_write(time_t now)
if (fprintf(out, "dirreq-v3-reqs %s\ndirreq-v2-reqs %s\n", if (fprintf(out, "dirreq-v3-reqs %s\ndirreq-v2-reqs %s\n",
data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0) data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
goto done; goto done;
tor_free(data_v2);
tor_free(data_v3);
#define RESPONSE_GRANULARITY 8 #define RESPONSE_GRANULARITY 8
for (i = 0; i < GEOIP_NS_RESPONSE_NUM; i++) { for (i = 0; i < GEOIP_NS_RESPONSE_NUM; i++) {
ns_v2_responses[i] = round_uint32_to_next_multiple_of( ns_v2_responses[i] = round_uint32_to_next_multiple_of(

View File

@ -981,7 +981,6 @@ run_scheduled_events(time_t now)
time_to_write_stats_files = now + WRITE_STATS_INTERVAL; time_to_write_stats_files = now + WRITE_STATS_INTERVAL;
} else { } else {
/* Write stats to disk. */ /* Write stats to disk. */
time_to_write_stats_files += WRITE_STATS_INTERVAL;
if (options->CellStatistics) if (options->CellStatistics)
rep_hist_buffer_stats_write(time_to_write_stats_files); rep_hist_buffer_stats_write(time_to_write_stats_files);
if (options->DirReqStatistics) if (options->DirReqStatistics)
@ -990,6 +989,7 @@ run_scheduled_events(time_t now)
geoip_entry_stats_write(time_to_write_stats_files); geoip_entry_stats_write(time_to_write_stats_files);
if (options->ExitPortStatistics) if (options->ExitPortStatistics)
rep_hist_exit_stats_write(time_to_write_stats_files); rep_hist_exit_stats_write(time_to_write_stats_files);
time_to_write_stats_files += WRITE_STATS_INTERVAL;
} }
} else { } else {
/* Never write stats to disk */ /* Never write stats to disk */

View File

@ -3867,7 +3867,7 @@ int dnsserv_launch_request(const char *name, int is_reverse);
#define DIR_ENTRY_RECORD_USAGE_RETAIN_IPS (24*60*60) #define DIR_ENTRY_RECORD_USAGE_RETAIN_IPS (24*60*60)
/** How long do we have to have observed per-country request history before /** How long do we have to have observed per-country request history before
* we are willing to talk about it? */ * we are willing to talk about it? */
#define DIR_RECORD_USAGE_MIN_OBSERVATION_TIME (24*60*60) #define DIR_RECORD_USAGE_MIN_OBSERVATION_TIME (12*60*60)
#ifdef GEOIP_PRIVATE #ifdef GEOIP_PRIVATE
int geoip_parse_entry(const char *line); int geoip_parse_entry(const char *line);

View File

@ -1461,9 +1461,9 @@ rep_hist_exit_stats_write(time_t now)
comma ? "," : "", other_streams)<0) comma ? "," : "", other_streams)<0)
goto done; goto done;
/* Reset counters */ /* Reset counters */
memset(exit_bytes_read, 0, sizeof(exit_bytes_read)); memset(exit_bytes_read, 0, EXIT_STATS_NUM_PORTS * sizeof(uint64_t));
memset(exit_bytes_written, 0, sizeof(exit_bytes_written)); memset(exit_bytes_written, 0, EXIT_STATS_NUM_PORTS * sizeof(uint64_t));
memset(exit_streams, 0, sizeof(exit_streams)); memset(exit_streams, 0, EXIT_STATS_NUM_PORTS * sizeof(uint32_t));
start_of_exit_stats_interval = now; start_of_exit_stats_interval = now;
if (open_file) if (open_file)
@ -2771,6 +2771,7 @@ rep_hist_buffer_stats_write(time_t now)
goto done; goto done;
finish_writing_to_file(open_file); finish_writing_to_file(open_file);
open_file = NULL; open_file = NULL;
start_of_buffer_stats_interval = now;
done: done:
if (open_file) if (open_file)
abort_writing_to_file(open_file); abort_writing_to_file(open_file);