[tor-commits] [nyx/master] Use stem's address caching

atagar at torproject.org atagar at torproject.org
Fri Oct 27 15:39:57 UTC 2017


commit 5766118620a45d9df9731e1c00f7538a001dd3d4
Author: Damian Johnson <atagar at torproject.org>
Date:   Thu Oct 26 10:55:19 2017 -0700

    Use stem's address caching
    
    Now that stem can cache our address we can drop our our_address() helper.
---
 nyx/__init__.py          | 25 +++----------------------
 nyx/panel/connection.py  |  6 +++---
 nyx/panel/header.py      |  2 +-
 nyx/tracker.py           |  4 ++--
 test/panel/connection.py |  8 ++++----
 test/panel/header.py     |  2 +-
 6 files changed, 14 insertions(+), 33 deletions(-)

diff --git a/nyx/__init__.py b/nyx/__init__.py
index 5947294..7c61651 100644
--- a/nyx/__init__.py
+++ b/nyx/__init__.py
@@ -9,7 +9,6 @@ Tor curses monitoring application.
   nyx_interface - nyx interface singleton
   tor_controller - tor connection singleton
   cache - provides our application cache
-  our_address - provides our ip address
 
   show_message - shows a message to the user
   input_prompt - prompts the user for text input
@@ -105,9 +104,9 @@ CACHE = None
 CHROOT = None
 BASE_DIR = os.path.sep.join(__file__.split(os.path.sep)[:-1])
 
-CACHED_ADDRESS = None
-ADDRESS_FETCHED = None
-ADDRESS_FETCH_RATE = 60
+# our address infrequently changes so we can cache it for a while
+
+stem.control.CACHE_ADDRESS_FOR = 30
 
 # disable trace level messages about cache hits
 
@@ -251,24 +250,6 @@ def cache():
   return CACHE
 
 
-def our_address(default = None):
-  """
-  Provides our ip address.
-
-  :param str default: response if address is unavailable
-
-  :returns: **str** with our address
-  """
-
-  global CACHED_ADDRESS, ADDRESS_FETCHED
-
-  if ADDRESS_FETCHED is None or (time.time() - ADDRESS_FETCHED) > ADDRESS_FETCH_RATE:
-    CACHED_ADDRESS = tor_controller().get_info('address', None)
-    ADDRESS_FETCHED = time.time()
-
-  return CACHED_ADDRESS if CACHED_ADDRESS is not None else default
-
-
 def show_message(message = None, *attr, **kwargs):
   """
   Shows a message in our header.
diff --git a/nyx/panel/connection.py b/nyx/panel/connection.py
index 1a090ac..fc586b6 100644
--- a/nyx/panel/connection.py
+++ b/nyx/panel/connection.py
@@ -608,10 +608,10 @@ def _draw_line(subwindow, x, y, line, is_selected, width, current_time):
 
 
 def _draw_address_column(subwindow, x, y, line, attr):
+  src = tor_controller().get_info('address', line.connection.local_address)
+
   if line.line_type == LineType.CONNECTION:
-    src = '%s:%s' % (nyx.our_address(line.connection.local_address), line.connection.local_port)
-  else:
-    src = nyx.our_address(line.connection.local_address)
+    src = '%s:%s' % (src, line.connection.local_port)
 
   if line.line_type == LineType.CIRCUIT_HEADER and line.circuit.status != 'BUILT':
     dst = 'Building...'
diff --git a/nyx/panel/header.py b/nyx/panel/header.py
index 0820a21..b1cbfbf 100644
--- a/nyx/panel/header.py
+++ b/nyx/panel/header.py
@@ -268,7 +268,7 @@ class Sampling(object):
       'version': str(controller.get_version('Unknown')).split()[0],
       'version_status': controller.get_info('status/version/current', 'Unknown'),
 
-      'address': or_listeners[0][0] if (or_listeners and or_listeners[0][0] != '0.0.0.0') else nyx.our_address('Unknown'),
+      'address': or_listeners[0][0] if (or_listeners and or_listeners[0][0] != '0.0.0.0') else controller.get_info('address', 'Unknown'),
       'or_port': or_listeners[0][1] if or_listeners else '',
       'dir_port': controller.get_conf('DirPort', '0'),
       'control_port': str(control_listeners[0][1]) if control_listeners else None,
diff --git a/nyx/tracker.py b/nyx/tracker.py
index fb41f9e..fa2381e 100644
--- a/nyx/tracker.py
+++ b/nyx/tracker.py
@@ -903,7 +903,7 @@ class ConsensusTracker(object):
 
     controller = tor_controller()
 
-    if nyx.our_address() == address:
+    if controller.get_info('address', None) == address:
       fingerprint = controller.get_info('fingerprint', None)
       ports = controller.get_ports(stem.control.Listener.OR, None)
 
@@ -924,7 +924,7 @@ class ConsensusTracker(object):
     controller = tor_controller()
 
     if fingerprint == controller.get_info('fingerprint', None):
-      my_address = nyx.our_address()
+      my_address = controller.get_info('address', None)
       my_or_ports = controller.get_ports(stem.control.Listener.OR, [])
 
       if my_address and len(my_or_ports) == 1:
diff --git a/test/panel/connection.py b/test/panel/connection.py
index c95f31a..f075f77 100644
--- a/test/panel/connection.py
+++ b/test/panel/connection.py
@@ -195,9 +195,9 @@ class TestConnectionPanel(unittest.TestCase):
 
   @require_curses
   @patch('nyx.panel.connection.tor_controller')
-  @patch('nyx.our_address', Mock(return_value = '82.121.9.9'))
   def test_draw_line(self, tor_controller_mock):
     tor_controller_mock().is_geoip_unavailable.return_value = False
+    tor_controller_mock().get_info.return_value = '82.121.9.9'
 
     test_data = ((
       line(),
@@ -213,7 +213,7 @@ class TestConnectionPanel(unittest.TestCase):
       ' |  82.121.9.9                                                    2 / Middle',
     ), (
       line(line_type = LineType.CIRCUIT, fingerprint = 'E0BD57A11F00041A9789577C53A1B784473669E4'),
-      ' +- 82.121.9.9                                                    3 / Exit',
+      ' +- 82.121.9.9                                                    3 / End',
     ))
 
     for test_line, expected in test_data:
@@ -222,9 +222,9 @@ class TestConnectionPanel(unittest.TestCase):
 
   @require_curses
   @patch('nyx.panel.connection.tor_controller')
-  @patch('nyx.our_address', Mock(return_value = '82.121.9.9'))
   def test_draw_address_column(self, tor_controller_mock):
     tor_controller_mock().is_geoip_unavailable.return_value = False
+    tor_controller_mock().get_info.return_value = '82.121.9.9'
 
     test_data = ((
       line(),
@@ -282,7 +282,7 @@ class TestConnectionPanel(unittest.TestCase):
     test_data = {
       '1F43EE37A0670301AD9CB555D94AFEC2C89FDE86': '    1 / Guard',
       'B6D83EC2D9E18B0A7A33428F8CFA9C536769E209': '    2 / Middle',
-      'E0BD57A11F00041A9789577C53A1B784473669E4': '    3 / Exit',
+      'E0BD57A11F00041A9789577C53A1B784473669E4': '    3 / End',
     }
 
     for fp, expected in test_data.items():
diff --git a/test/panel/header.py b/test/panel/header.py
index 73259da..1b07799 100644
--- a/test/panel/header.py
+++ b/test/panel/header.py
@@ -87,7 +87,6 @@ class TestHeaderPanel(unittest.TestCase):
   @patch('time.time', Mock(return_value = 1234.5))
   @patch('os.times', Mock(return_value = (0.08, 0.03, 0.0, 0.0, 18759021.31)))
   @patch('os.uname', Mock(return_value = ('Linux', 'odin', '3.5.0-54-generic', '#81~precise1-Ubuntu SMP Tue Jul 15 04:05:58 UTC 2014', 'i686')))
-  @patch('nyx.our_address', Mock(return_value = '174.21.17.28'))
   @patch('stem.util.system.start_time', Mock(return_value = 5678))
   @patch('stem.util.proc.file_descriptors_used', Mock(return_value = 89))
   def test_sample(self, consensus_tracker_mock, resource_tracker_mock, tor_controller_mock):
@@ -100,6 +99,7 @@ class TestHeaderPanel(unittest.TestCase):
     tor_controller_mock().get_pid.return_value = '123'
 
     tor_controller_mock().get_info.side_effect = lambda param, default = None: {
+      'address': '174.21.17.28',
       'fingerprint': '1A94D1A794FCB2F8B6CBC179EF8FDD4008A98D3B',
       'status/version/current': 'recommended',
       'process/descriptor-limit': 678,



More information about the tor-commits mailing list