Add unique client counter to the heartbeat message.

This commit is contained in:
George Kadianakis 2013-02-26 12:43:53 +02:00
parent 337e32f5b8
commit 05f8fd2878
4 changed files with 45 additions and 1 deletions

3
changes/bug6852 Normal file
View File

@ -0,0 +1,3 @@
o Minor features:
- Add a unique client counter to the heartbeat message. Resolves
ticket 6852.

View File

@ -1292,6 +1292,38 @@ format_bridge_stats_controller(time_t now)
return out;
}
/** Return a newly allocated string holding our bridge usage stats by
* country in a format suitable for inclusion in our heartbeat
* message. Return NULL on failure. */
char *
format_client_stats_heartbeat(time_t now)
{
char *out = NULL;
int n_clients = 0;
clientmap_entry_t **ent;
double elapsed_time = 0;
if (!start_of_bridge_stats_interval)
return NULL; /* Not initialized. */
/* count unique IPs */
HT_FOREACH(ent, clientmap, &client_history) {
/* only count directly connecting clients */
if ((*ent)->action != GEOIP_CLIENT_CONNECT)
continue;
n_clients++;
}
elapsed_time = difftime(now, start_of_bridge_stats_interval);
tor_asprintf(&out, "Heartbeat: "
"Since the last %ld hours, I have seen %d unique clients.",
tor_lround(elapsed_time / 3600),
n_clients);
return out;
}
/** Write bridge statistics to $DATADIR/stats/bridge-stats and return
* when we should next try to write statistics. */
time_t

View File

@ -60,6 +60,7 @@ time_t geoip_bridge_stats_write(time_t now);
void geoip_bridge_stats_term(void);
const char *geoip_get_bridge_stats_extrainfo(time_t);
char *geoip_get_bridge_stats_controller(time_t);
char *format_client_stats_heartbeat(time_t now);
#endif

View File

@ -14,6 +14,7 @@
#include "router.h"
#include "circuitlist.h"
#include "main.h"
#include "geoip.h"
/** Return the total number of circuits. */
static int
@ -87,7 +88,6 @@ log_heartbeat(time_t now)
const routerinfo_t *me;
const or_options_t *options = get_options();
(void)now;
if (public_server_mode(options)) {
/* Let's check if we are in the current cached consensus. */
@ -112,6 +112,14 @@ log_heartbeat(time_t now)
100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
U64_TO_DBL(stats_n_data_cells_packaged*RELAY_PAYLOAD_SIZE)) );
if (options->BridgeRelay) {
char *msg = NULL;
msg = format_client_stats_heartbeat(now);
if (msg)
log_notice(LD_HEARTBEAT, "%s", msg);
tor_free(msg);
}
tor_free(uptime);
tor_free(bw_sent);
tor_free(bw_rcvd);