aboutsummaryrefslogtreecommitdiff
path: root/src/or/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/main.c')
-rw-r--r--src/or/main.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/or/main.c b/src/or/main.c
index 4417ceced..24b7c15f4 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -16,6 +16,10 @@ extern char *conn_state_to_string[][_CONN_TYPE_MAX+1];
or_options_t options; /* command-line and config-file options */
int global_read_bucket; /* max number of bytes I can read this second */
+static int stats_prev_global_read_bucket;
+static uint64_t stats_n_bytes_read = 0;
+static long stats_n_seconds_reading = 0;
+
static connection_t *connection_array[MAXCONNECTIONS] =
{ NULL };
@@ -270,6 +274,8 @@ static int prepare_for_poll(void) {
if(now.tv_sec > current_second) { /* the second has rolled over. check more stuff. */
+ ++stats_n_seconds_reading;
+
if(time_to_fetch_directory < now.tv_sec) {
/* it's time to fetch a new directory and/or post our descriptor */
if(options.OnionRouter) {
@@ -296,10 +302,12 @@ static int prepare_for_poll(void) {
time_to_new_circuit = now.tv_sec + options.NewCircuitPeriod;
}
+ stats_n_bytes_read += stats_prev_global_read_bucket-global_read_bucket;
if(global_read_bucket < 9*options.TotalBandwidth) {
global_read_bucket += options.TotalBandwidth;
log_fn(LOG_DEBUG,"global_read_bucket now %d.", global_read_bucket);
}
+ stats_prev_global_read_bucket = global_read_bucket;
/* do housekeeping for each connection */
for(i=0;i<nfds;i++) {
@@ -670,6 +678,33 @@ static void dumpstats(void) { /* dump stats to stdout */
circuit_dump_by_conn(conn); /* dump info about all the circuits using this conn */
printf("\n");
}
+ printf("Cells processed: % 10lud padding\n"
+ " % 10lud create\n"
+ " % 10lud created\n"
+ " % 10lud relay\n"
+ " (% 10lud relayed)\n"
+ " (% 10lud delivered)\n"
+ " % 10lud destroy\n",
+ stats_n_padding_cells_processed,
+ stats_n_create_cells_processed,
+ stats_n_created_cells_processed,
+ stats_n_relay_cells_processed,
+ stats_n_relay_cells_relayed,
+ stats_n_relay_cells_delivered,
+ stats_n_destroy_cells_processed);
+ if (stats_n_data_cells_packaged)
+ printf("Average outgoing cell fullness: %2.3f%%\n",
+ 100*(((double)stats_n_data_bytes_packaged) /
+ (stats_n_data_cells_packaged*(CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE))) );
+ if (stats_n_data_cells_packaged)
+ printf("Average incomoing cell fullness: %2.3f%%\n",
+ 100*(((double)stats_n_data_bytes_received) /
+ (stats_n_data_cells_received*(CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE))) );
+
+ if (stats_n_seconds_reading)
+ printf("Average bandwidth used: %d bytes/sec\n",
+ (int) (stats_n_bytes_read/stats_n_seconds_reading));
+
}
void daemonize(void) {
@@ -700,6 +735,7 @@ int tor_main(int argc, char *argv[]) {
}
log_set_severity(options.loglevel); /* assign logging severity level from options */
global_read_bucket = options.TotalBandwidth; /* start it at 1 second of traffic */
+ stats_prev_global_read_bucket = global_read_bucket;
if(options.Daemon)
daemonize();