]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix a couple of smaller issues with gathering statistics.
authorKarsten Loesing <karsten.loesing@gmx.net>
Thu, 24 Sep 2009 19:58:56 +0000 (21:58 +0200)
committerKarsten Loesing <karsten.loesing@gmx.net>
Thu, 24 Sep 2009 19:58:56 +0000 (21:58 +0200)
- 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.

ChangeLog
src/or/geoip.c
src/or/main.c
src/or/or.h
src/or/rephist.c

index 8f36d6773d3d19ba81dd059ceb159559a6d66bbb..cc729c365840d6050d8ae396ce68fcc255de93e5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
       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
   o Major bugfixes:
index 00e608214cc4326ba495d9c043eb9f727e8d9ded..5b40c2e058b1efdf28007336f04e354dbbe856ff 100644 (file)
@@ -370,10 +370,12 @@ static void
 rotate_request_period(void)
 {
   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],
               sizeof(uint32_t)*(REQUEST_HIST_LEN-1));
       memmove(&c->n_v3_ns_requests[0], &c->n_v3_ns_requests[1],
               sizeof(uint32_t)*(REQUEST_HIST_LEN-1));
+#endif
       c->n_v2_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;
   if (action == GEOIP_CLIENT_CONNECT) {
     /* Only remember statistics as entry guard or as bridge. */
-    if (!options->EntryStatistics ||
+    if (!options->EntryStatistics &&
         (!(options->BridgeRelay && options->BridgeRecordUsageByCountry)))
       return;
     /* 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",
               data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
     goto done;
+  tor_free(data_v2);
+  tor_free(data_v3);
 #define RESPONSE_GRANULARITY 8
   for (i = 0; i < GEOIP_NS_RESPONSE_NUM; i++) {
     ns_v2_responses[i] = round_uint32_to_next_multiple_of(
index c33d1b39b4c5c7573cecbda7e35c59c4a7207d35..25182919ae73216e0126cc908e90f3fbcdb96ed4 100644 (file)
@@ -981,7 +981,6 @@ run_scheduled_events(time_t now)
         time_to_write_stats_files = now + WRITE_STATS_INTERVAL;
       } else {
         /* Write stats to disk. */
-        time_to_write_stats_files += WRITE_STATS_INTERVAL;
         if (options->CellStatistics)
           rep_hist_buffer_stats_write(time_to_write_stats_files);
         if (options->DirReqStatistics)
@@ -990,6 +989,7 @@ run_scheduled_events(time_t now)
           geoip_entry_stats_write(time_to_write_stats_files);
         if (options->ExitPortStatistics)
           rep_hist_exit_stats_write(time_to_write_stats_files);
+        time_to_write_stats_files += WRITE_STATS_INTERVAL;
       }
     } else {
       /* Never write stats to disk */
index a7db06f71d9507d7a6f107dac019b83f3d13937c..0162e31f0165e883f38eba7b530afa081178cbda 100644 (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)
 /** How long do we have to have observed per-country request history before
  * 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
 int geoip_parse_entry(const char *line);
index 8d78ac26c35ac9d3d8855cc33ca42dca103d5854..1ff9cde69fb706ca1073e7b0c04fe87e9f27ef2d 100644 (file)
@@ -1461,9 +1461,9 @@ rep_hist_exit_stats_write(time_t now)
               comma ? "," : "", other_streams)<0)
     goto done;
   /* Reset counters */
-  memset(exit_bytes_read, 0, sizeof(exit_bytes_read));
-  memset(exit_bytes_written, 0, sizeof(exit_bytes_written));
-  memset(exit_streams, 0, sizeof(exit_streams));
+  memset(exit_bytes_read, 0, EXIT_STATS_NUM_PORTS * sizeof(uint64_t));
+  memset(exit_bytes_written, 0, EXIT_STATS_NUM_PORTS * sizeof(uint64_t));
+  memset(exit_streams, 0, EXIT_STATS_NUM_PORTS * sizeof(uint32_t));
   start_of_exit_stats_interval = now;
 
   if (open_file)
@@ -2771,6 +2771,7 @@ rep_hist_buffer_stats_write(time_t now)
     goto done;
   finish_writing_to_file(open_file);
   open_file = NULL;
+  start_of_buffer_stats_interval = now;
  done:
   if (open_file)
     abort_writing_to_file(open_file);