[tor-commits] [tor/master] Print accounting information in heartbeat messages.

nickm at torproject.org nickm at torproject.org
Wed Aug 21 17:43:16 UTC 2013


commit a337d4b7cb9ae7f4e4ec4567b9efd64bbed70298
Author: Peter Retzlaff <peter.retzlaff at student.hpi.uni-potsdam.de>
Date:   Wed Jun 12 10:51:39 2013 +0200

    Print accounting information in heartbeat messages.
    
    Implements ticket 5526.
---
 changes/ticket5526 |    4 ++++
 src/or/hibernate.c |    6 ++++++
 src/or/hibernate.h |    1 +
 src/or/status.c    |   28 ++++++++++++++++++++++++++++
 src/or/status.h    |    1 +
 5 files changed, 40 insertions(+)

diff --git a/changes/ticket5526 b/changes/ticket5526
new file mode 100644
index 0000000..35c982b
--- /dev/null
+++ b/changes/ticket5526
@@ -0,0 +1,4 @@
+  o Minor features:
+    - Log current accounting state (bytes sent and received + remaining
+      time for the current accounting period) in the server's
+      heartbeat message. 
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index 22c0f25..712a695 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -255,6 +255,12 @@ accounting_get_interval_length(void)
   return (int)(interval_end_time - interval_start_time);
 }
 
+time_t
+accounting_get_end_time(void)
+{
+  return interval_end_time;
+}
+
 /** Called from main.c to tell us that <b>seconds</b> seconds have
  * passed, <b>n_read</b> bytes have been read, and <b>n_written</b>
  * bytes have been written. */
diff --git a/src/or/hibernate.h b/src/or/hibernate.h
index 18832fb..4f7331c 100644
--- a/src/or/hibernate.h
+++ b/src/or/hibernate.h
@@ -15,6 +15,7 @@
 int accounting_parse_options(const or_options_t *options, int validate_only);
 int accounting_is_enabled(const or_options_t *options);
 int accounting_get_interval_length(void);
+time_t accounting_get_end_time(void);
 void configure_accounting(time_t now);
 void accounting_run_housekeeping(time_t now);
 void accounting_add_bytes(size_t n_read, size_t n_written, int seconds);
diff --git a/src/or/status.c b/src/or/status.c
index 577587d..2fda471 100644
--- a/src/or/status.c
+++ b/src/or/status.c
@@ -15,6 +15,7 @@
 #include "circuitlist.h"
 #include "main.h"
 #include "hibernate.h"
+#include "statefile.h"
 
 /** Return the total number of circuits. */
 static int
@@ -111,6 +112,10 @@ log_heartbeat(time_t now)
          uptime, count_circuits(),bw_sent,bw_rcvd,
          hibernating?" We are currently hibernating.":"");
 
+  if (server_mode(options) && accounting_is_enabled(options) && !hibernating) {
+    log_accounting(now, options);
+  }
+
   if (stats_n_data_cells_packaged && !hibernating)
     log_notice(LD_HEARTBEAT, "Average packaged cell fullness: %2.3f%%",
         100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
@@ -128,3 +133,26 @@ log_heartbeat(time_t now)
   return 0;
 }
 
+void
+log_accounting(const time_t now, const or_options_t *options)
+{
+  or_state_t *state = get_or_state();
+  char *acc_rcvd = bytes_to_usage(state->AccountingBytesReadInInterval);
+  char *acc_sent = bytes_to_usage(state->AccountingBytesWrittenInInterval);
+  char *acc_max = bytes_to_usage(options->AccountingMax);
+  time_t interval_end = accounting_get_end_time();
+  char end_buf[ISO_TIME_LEN + 1];
+  char *remaining = NULL;
+  format_local_iso_time(end_buf, interval_end);
+  remaining = secs_to_uptime(interval_end - now);
+
+  log_notice(LD_HEARTBEAT, "Heartbeat: "
+      "Sent: %s / %s, Received: %s / %s. The "
+      "current accounting period ends on %s. That's %s left to go.",
+      acc_sent, acc_max, acc_rcvd, acc_max, end_buf, remaining);
+
+  tor_free(acc_rcvd);
+  tor_free(acc_sent);
+  tor_free(acc_max);
+  tor_free(remaining);
+}
diff --git a/src/or/status.h b/src/or/status.h
index 7c3b969..4a334b1 100644
--- a/src/or/status.h
+++ b/src/or/status.h
@@ -5,6 +5,7 @@
 #define TOR_STATUS_H
 
 int log_heartbeat(time_t now);
+void log_accounting(const time_t now, const or_options_t *options);
 
 #endif
 





More information about the tor-commits mailing list