diff options
Diffstat (limited to 'src/or/main.c')
-rw-r--r-- | src/or/main.c | 36 |
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(); |