Don't report empty bw-history lines in extrainfo

Some tor relays would report lines like these in their extrainfo
documents:
dirreq-write-history 2011-03-14 16:46:44 (900 s)

This was confusing to some people who look at the stats. It would happen
whenever a relay first starts up, or when a relay has dirport disabled.
Change this so that lines without actual bw entries are omitted.
Implements ticket 2497.
This commit is contained in:
Sebastian Hahn 2011-04-16 16:01:36 +02:00
parent 4cbbb92e7f
commit c1927d7d5f
2 changed files with 16 additions and 2 deletions

4
changes/ticket2497 Normal file
View File

@ -0,0 +1,4 @@
o Minor features:
- Ensure that no empty [dirreq-](read|write)-history lines are added
to an extrainfo document. Implements ticket 2497.

View File

@ -1524,10 +1524,15 @@ rep_hist_get_bandwidth_lines(void)
size_t len; size_t len;
/* opt [dirreq-](read|write)-history yyyy-mm-dd HH:MM:SS (n s) n,n,n... */ /* opt [dirreq-](read|write)-history yyyy-mm-dd HH:MM:SS (n s) n,n,n... */
len = (67+21*NUM_TOTALS)*4; /* The n,n,n part above. Largest representation of a uint64_t is 20 chars
* long, plus the comma. */
#define MAX_HIST_VALUE_LEN 21*NUM_TOTALS
len = (67+MAX_HIST_VALUE_LEN)*4;
buf = tor_malloc_zero(len); buf = tor_malloc_zero(len);
cp = buf; cp = buf;
for (r=0;r<4;++r) { for (r=0;r<4;++r) {
char tmp[MAX_HIST_VALUE_LEN];
size_t slen;
switch (r) { switch (r) {
case 0: case 0:
b = write_array; b = write_array;
@ -1547,11 +1552,16 @@ rep_hist_get_bandwidth_lines(void)
break; break;
} }
tor_assert(b); tor_assert(b);
slen = rep_hist_fill_bandwidth_history(tmp, MAX_HIST_VALUE_LEN, b);
/* If we don't have anything to write, skip to the next entry. */
if (slen == 0)
continue;
format_iso_time(t, b->next_period-NUM_SECS_BW_SUM_INTERVAL); format_iso_time(t, b->next_period-NUM_SECS_BW_SUM_INTERVAL);
tor_snprintf(cp, len-(cp-buf), "%s %s (%d s) ", tor_snprintf(cp, len-(cp-buf), "%s %s (%d s) ",
desc, t, NUM_SECS_BW_SUM_INTERVAL); desc, t, NUM_SECS_BW_SUM_INTERVAL);
cp += strlen(cp); cp += strlen(cp);
cp += rep_hist_fill_bandwidth_history(cp, len-(cp-buf), b); strlcat(cp, tmp, len-(cp-buf));
cp += slen;
strlcat(cp, "\n", len-(cp-buf)); strlcat(cp, "\n", len-(cp-buf));
++cp; ++cp;
} }