[tor-commits] [arm/master] Revising title stat handling
atagar at torproject.org
atagar at torproject.org
Sun Sep 21 01:48:08 UTC 2014
commit d25eeb1a163ab7c0c4d69f211fa01056de70e6b7
Author: Damian Johnson <atagar at torproject.org>
Date: Sat Sep 20 18:45:20 2014 -0700
Revising title stat handling
Not only tidying up the code a bit but addressing several issues (stacktrace
due to accessing a NewDesc event attribute that didn't exist, didn't properly
initialize attributes, no reason in including observed bandwidth if measured is
available).
---
arm/graphing/bandwidth_stats.py | 60 +++++++++++++++++----------------------
1 file changed, 26 insertions(+), 34 deletions(-)
diff --git a/arm/graphing/bandwidth_stats.py b/arm/graphing/bandwidth_stats.py
index bc61bb6..0dffde2 100644
--- a/arm/graphing/bandwidth_stats.py
+++ b/arm/graphing/bandwidth_stats.py
@@ -44,18 +44,18 @@ class BandwidthStats(graph_panel.GraphStats):
def __init__(self, is_pause_buffer = False):
graph_panel.GraphStats.__init__(self)
- self.accounting_stats = None
-
# listens for tor reload (sighup) events which can reset the bandwidth
# rate/burst and if tor's using accounting
controller = tor_controller()
self._title_stats = []
+ self._accounting_stats = None
if not is_pause_buffer:
self.reset_listener(controller, State.INIT, None) # initializes values
controller.add_status_listener(self.reset_listener)
+ self.new_desc_event(None) # updates title params
# We both show our 'total' attributes and use it to determine our average.
#
@@ -78,10 +78,7 @@ class BandwidthStats(graph_panel.GraphStats):
if not new_copy:
new_copy = BandwidthStats(True)
- new_copy.accounting_stats = self.accounting_stats
-
- # attributes that would have been initialized from calling the reset_listener
-
+ new_copy._accounting_stats = self._accounting_stats
new_copy._title_stats = self._title_stats
return graph_panel.GraphStats.clone(self, new_copy)
@@ -89,14 +86,13 @@ class BandwidthStats(graph_panel.GraphStats):
def reset_listener(self, controller, event_type, _):
# updates title parameters and accounting status if they changed
- self._title_stats = [] # force reset of title
self.new_desc_event(None) # updates title params
if event_type in (State.INIT, State.RESET) and CONFIG['features.graph.bw.accounting.show']:
is_accounting_enabled = controller.get_info('accounting/enabled', None) == '1'
- if is_accounting_enabled != bool(self.accounting_stats):
- self.accounting_stats = tor_controller().get_accounting_stats(None)
+ if is_accounting_enabled != bool(self._accounting_stats):
+ self._accounting_stats = tor_controller().get_accounting_stats(None)
# redraws the whole screen since our height changed
@@ -160,9 +156,9 @@ class BandwidthStats(graph_panel.GraphStats):
return time.time() - min(stats.last_read_time, stats.last_write_time)
def bandwidth_event(self, event):
- if self.accounting_stats and self.is_next_tick_redraw():
- if time.time() - self.accounting_stats.retrieved >= CONFIG['features.graph.bw.accounting.rate']:
- self.accounting_stats = tor_controller().get_accounting_stats(None)
+ if self._accounting_stats and self.is_next_tick_redraw():
+ if time.time() - self._accounting_stats.retrieved >= CONFIG['features.graph.bw.accounting.rate']:
+ self._accounting_stats = tor_controller().get_accounting_stats(None)
# scales units from B to KB for graphing
@@ -194,19 +190,19 @@ class BandwidthStats(graph_panel.GraphStats):
# provides accounting stats if enabled
- if self.accounting_stats:
+ if self._accounting_stats:
if tor_controller().is_alive():
- hibernate_color = CONFIG['attr.hibernate_color'].get(self.accounting_stats.status, 'red')
+ hibernate_color = CONFIG['attr.hibernate_color'].get(self._accounting_stats.status, 'red')
x, y = 0, labeling_line + 2
x = panel.addstr(y, x, 'Accounting (', curses.A_BOLD)
- x = panel.addstr(y, x, self.accounting_stats.status, curses.A_BOLD, hibernate_color)
+ x = panel.addstr(y, x, self._accounting_stats.status, curses.A_BOLD, hibernate_color)
x = panel.addstr(y, x, ')', curses.A_BOLD)
- panel.addstr(y, 35, 'Time to reset: %s' % str_tools.short_time_label(self.accounting_stats.time_until_reset))
+ panel.addstr(y, 35, 'Time to reset: %s' % str_tools.short_time_label(self._accounting_stats.time_until_reset))
- panel.addstr(y + 1, 2, '%s / %s' % (self.accounting_stats.read_bytes, self.accounting_stats.read_limit), self.get_color(True))
- panel.addstr(y + 1, 37, '%s / %s' % (self.accounting_stats.written_bytes, self.accounting_stats.write_limit), self.get_color(True))
+ panel.addstr(y + 1, 2, '%s / %s' % (self._accounting_stats.read_bytes, self._accounting_stats.read_limit), self.get_color(True))
+ panel.addstr(y + 1, 37, '%s / %s' % (self._accounting_stats.written_bytes, self._accounting_stats.write_limit), self.get_color(True))
else:
panel.addstr(labeling_line + 2, 0, 'Accounting:', curses.A_BOLD)
panel.addstr(labeling_line + 2, 12, 'Connection Closed...')
@@ -258,11 +254,9 @@ class BandwidthStats(graph_panel.GraphStats):
def get_content_height(self):
base_height = graph_panel.GraphStats.get_content_height(self)
- return base_height + 3 if self.accounting_stats else base_height
+ return base_height + 3 if self._accounting_stats else base_height
def new_desc_event(self, event):
- # updates self._title_stats with updated values
-
controller = tor_controller()
if not controller.is_alive():
@@ -270,8 +264,9 @@ class BandwidthStats(graph_panel.GraphStats):
my_fingerprint = controller.get_info('fingerprint', None)
- if not self._title_stats or not my_fingerprint or (event and my_fingerprint in event.idlist):
+ if not event or (my_fingerprint and my_fingerprint in [fp for fp, _ in event.relays]):
stats = []
+
bw_rate = controller.get_effective_rate(None)
bw_burst = controller.get_effective_rate(None, burst = True)
@@ -288,20 +283,17 @@ class BandwidthStats(graph_panel.GraphStats):
stats.append('limit: %s/s' % bw_rate_label)
stats.append('burst: %s/s' % bw_burst_label)
- # Provide the observed bandwidth either if the measured bandwidth isn't
- # available or if the measured bandwidth is the observed (this happens
- # if there isn't yet enough bandwidth measurements).
-
- my_server_descriptor = controller.get_server_descriptor(default = None)
- bw_observed = getattr(my_server_descriptor, 'observed_bandwidth', None)
-
my_router_status_entry = controller.get_network_status(default = None)
- bw_measured = getattr(my_router_status_entry, 'bandwidth', None)
+ measured_bw = getattr(my_router_status_entry, 'bandwidth', None)
+
+ if measured_bw:
+ stats.append('measured: %s/s' % _size_label(measured_bw))
+ else:
+ my_server_descriptor = controller.get_server_descriptor(default = None)
+ observed_bw = getattr(my_server_descriptor, 'observed_bandwidth', None)
- if bw_observed and (not bw_measured or bw_measured == bw_observed):
- stats.append('observed: %s/s' % _size_label(bw_observed))
- elif bw_measured:
- stats.append('measured: %s/s' % _size_label(bw_measured))
+ if observed_bw:
+ stats.append('observed: %s/s' % _size_label(observed_bw))
self._title_stats = stats
More information about the tor-commits
mailing list