[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [nyx/master] Split address column rendering into its own function
commit 173d57fce6dee829b7bc6177a965990000940769
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Sun Sep 20 11:54:38 2015 -0700
Split address column rendering into its own function
---
nyx/connection_panel.py | 132 +++++++++++++++++++----------------------------
1 file changed, 54 insertions(+), 78 deletions(-)
diff --git a/nyx/connection_panel.py b/nyx/connection_panel.py
index d313e28..7b6d4df 100644
--- a/nyx/connection_panel.py
+++ b/nyx/connection_panel.py
@@ -272,7 +272,7 @@ class ConnectionPanel(panel.Panel, threading.Thread):
self._show_details = False # presents the details panel if true
self._sort_order = CONFIG['features.connection.order']
- self._last_update = -1 # time the content was last revised
+ self._last_resource_fetch = -1 # timestamp of the last ConnectionResolver results used
self._pause_condition = threading.Condition()
self._halt = False # terminates thread if true
@@ -285,8 +285,7 @@ class ConnectionPanel(panel.Panel, threading.Thread):
# If we're a bridge and been running over a day then prepopulates with the
# last day's clients.
- controller = tor_controller()
- bridge_clients = controller.get_info('status/clients-seen', None)
+ bridge_clients = tor_controller().get_info('status/clients-seen', None)
if bridge_clients:
# Response has a couple arguments...
@@ -305,11 +304,6 @@ class ConnectionPanel(panel.Panel, threading.Thread):
locale, count = entry.split('=', 1)
self._client_locale_usage[locale] = int(count)
- # Last sampling received from the ConnectionResolver, used to detect when
- # it changes.
-
- self._last_resource_fetch = -1
-
def show_sort_dialog(self):
"""
Provides a dialog for sorting our connections.
@@ -569,25 +563,9 @@ class ConnectionPanel(panel.Panel, threading.Thread):
for char in prefix:
x = self.addch(y, x, char)
- entry_type = line.entry.get_type()
- attr = nyx.util.ui_tools.get_color(CONFIG['attr.connection.category_color'].get(entry_type, 'white'))
+ attr = nyx.util.ui_tools.get_color(CONFIG['attr.connection.category_color'].get(line.entry.get_type(), 'white'))
attr |= curses.A_STANDOUT if is_selected else curses.A_NORMAL
- def get_destination_label(line, width):
- output = '<scrubbed>' if line.entry.is_private() else line.connection.remote_address
- output += ':%s' % line.connection.remote_port
- space_available = width - len(output) - 3
-
- if line.entry.get_type() == Category.EXIT and space_available >= 5:
- purpose = connection.port_usage(line.connection.remote_port)
-
- if purpose:
- output += ' (%s)' % str_tools.crop(purpose, space_available)
- elif space_available >= 2 and not tor_controller().is_geoip_unavailable() and not line.entry.is_private():
- output += ' (%s)' % (line.locale if line.locale else '??')
-
- return output[:width]
-
def get_etc_content(line, width):
if line.line_type == LineType.CIRCUIT_HEADER:
etc_attr = ['Purpose: %s' % line.circuit.purpose.capitalize(), 'Circuit ID: %s' % line.circuit.id]
@@ -595,81 +573,53 @@ class ConnectionPanel(panel.Panel, threading.Thread):
for i in range(len(etc_attr), -1, -1):
etc_label = ', '.join(etc_attr[:i])
- if len(etc_label) <= width:
+ if width >= len(etc_label):
return etc_label
return ''
- else:
+ elif line.entry.get_type() in (Category.SOCKS, Category.HIDDEN, Category.CONTROL):
# for applications show the command/pid
- if line.entry.get_type() in (Category.SOCKS, Category.HIDDEN, Category.CONTROL):
+ try:
port = line.connection.local_port if line.entry.get_type() == Category.HIDDEN else line.connection.remote_port
+ process = nyx.util.tracker.get_port_usage_tracker().fetch(port)
+ display_label = '%s (%s)' % (process.name, process.pid) if process.pid else process.name
+ except nyx.util.tracker.UnresolvedResult:
+ display_label = 'resolving...'
+ except nyx.util.tracker.UnknownApplication:
+ display_label = 'UNKNOWN'
+
+ return display_label if len(display_label) < width else ''
+ else:
+ fingerprint = line.fingerprint if line.fingerprint else 'UNKNOWN'
+ nickname = line.nickname if line.nickname else 'UNKNOWN'
- try:
- process = nyx.util.tracker.get_port_usage_tracker().fetch(port)
- display_label = '%s (%s)' % (process.name, process.pid) if process.pid else process.name
- except nyx.util.tracker.UnresolvedResult:
- display_label = 'resolving...'
- except nyx.util.tracker.UnknownApplication:
- display_label = 'UNKNOWN'
-
- if len(display_label) < width:
- return display_label
- else:
- return ''
-
- # for everything else display connection/consensus information
-
- etc, used_space = '', 0
-
- if width > used_space + 42:
- # show fingerprint (column width: 42 characters)
-
- etc += '%-40s ' % (line.fingerprint if line.fingerprint else 'UNKNOWN')
- used_space += 42
-
- if width > used_space + 10:
- # show nickname (column width: remainder)
-
- nickname_space = width - used_space
- nickname_label = str_tools.crop(line.nickname if line.nickname else 'UNKNOWN', nickname_space, 0)
- etc += ('%%-%is ' % nickname_space) % nickname_label
- used_space += nickname_space + 2
-
- return etc
+ if width > 52:
+ return '%-40s %s' % (fingerprint, str_tools.crop(nickname, width - 42, 0))
+ elif width > 42:
+ return fingerprint
+ else:
+ return ''
self.addstr(y, x, ' ' * (width - x), attr)
if line.line_type != LineType.CIRCUIT:
subsection_width = width - x - 19
- include_port = line.line_type != LineType.CIRCUIT_HEADER
- src = tor_controller().get_info('address', line.connection.local_address)
- src += ':%s' % line.connection.local_port if include_port else ''
-
- if line.line_type == LineType.CIRCUIT_HEADER and line.circuit.status != 'BUILT':
- dst = 'Building...'
- else:
- dst = get_destination_label(line, 26)
-
- if entry_type in (Category.INBOUND, Category.SOCKS, Category.CONTROL):
- dst, src = src, dst
-
time_prefix = '+' if line.connection.is_legacy else ' '
time_label = time_prefix + '%5s' % str_tools.time_label(current_time - line.connection.start_time, 1)
- x = self.addstr(y, x + 1, '%-21s --> %-26s' % (src, dst), attr)
- x = self.addstr(y, x + 2, get_etc_content(line, subsection_width - 11 - max(21, len(src)) - max(26, len(dst))), attr)
+ x = self._draw_address_column(x + 1, y, line, attr)
+ x = self.addstr(y, x + 2, get_etc_content(line, subsection_width - x), attr)
x = self.addstr(y, subsection_width + 1, time_label, attr)
x = self.addstr(y, x, ' (', attr)
- x = self.addstr(y, x, entry_type.upper(), attr | curses.A_BOLD)
+ x = self.addstr(y, x, line.entry.get_type().upper(), attr | curses.A_BOLD)
x = self.addstr(y, x, ')', attr)
else:
- self.addstr(y, x, get_destination_label(line, 25), attr)
- self.addstr(y, x + 25, str_tools.crop(line.nickname if line.nickname else 'UNKNOWN', 25, 0), attr)
+ self._draw_address_column(x, y, line, attr)
self.addstr(y, x + 53, get_etc_content(line, width - x - 19 - 53), attr)
- circ_path = [path_entry[0] for path_entry in line.circuit.path]
+ circ_path = [fp for fp, _ in line.circuit.path]
circ_index = circ_path.index(line.fingerprint)
if circ_index == len(circ_path) - 1:
@@ -681,6 +631,32 @@ class ConnectionPanel(panel.Panel, threading.Thread):
self.addstr(y, width - 14, '%i / %s' % (circ_index + 1, placement_type), attr)
+ def _draw_address_column(self, x, y, line, attr):
+ src = tor_controller().get_info('address', line.connection.local_address)
+ src += ':%s' % line.connection.local_port if line.line_type == LineType.CONNECTION else ''
+
+ if line.line_type == LineType.CIRCUIT_HEADER and line.circuit.status != 'BUILT':
+ dst = 'Building...'
+ else:
+ dst = '<scrubbed>' if line.entry.is_private() else line.connection.remote_address
+ dst += ':%s' % line.connection.remote_port
+
+ if line.entry.get_type() == Category.EXIT:
+ purpose = connection.port_usage(line.connection.remote_port)
+
+ if purpose:
+ dst += ' (%s)' % str_tools.crop(purpose, 26 - len(dst) - 3)
+ elif not tor_controller().is_geoip_unavailable() and not line.entry.is_private():
+ dst += ' (%s)' % (line.locale if line.locale else '??')
+
+ if line.entry.get_type() in (Category.INBOUND, Category.SOCKS, Category.CONTROL):
+ dst, src = src, dst
+
+ if line.line_type == LineType.CIRCUIT:
+ return self.addstr(y, x, dst, attr)
+ else:
+ return self.addstr(y, x, '%-21s --> %-26s' % (src, dst), attr)
+
def stop(self):
"""
Halts further resolutions and terminates the thread.
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits