[tor-commits] [nyx/master] Revise connection panel's run() method

atagar at torproject.org atagar at torproject.org
Tue Sep 22 17:08:39 UTC 2015


commit 38eeb26b80ed336adc050e9646178a4fc28e6567
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jul 5 15:10:30 2015 -0700

    Revise connection panel's run() method
    
    Changing the method to be identical to the header panel's. We had a sleep to be
    more responsive during startup but seems as though this is no longer needed
    with the rewritten trackers.
    
    This also drops the '-features.connection.refreshRate' option. Another that
    honestly I doubt anyone ever even tried.
---
 nyx/connections/conn_panel.py |   52 ++++++++++++++---------------------------
 nyxrc.sample                  |    6 -----
 2 files changed, 17 insertions(+), 41 deletions(-)

diff --git a/nyx/connections/conn_panel.py b/nyx/connections/conn_panel.py
index 5c4a17a..a7b1009 100644
--- a/nyx/connections/conn_panel.py
+++ b/nyx/connections/conn_panel.py
@@ -25,13 +25,12 @@ DETAILS_HEIGHT = 7
 Listing = enum.Enum(('IP_ADDRESS', 'IP Address'), 'HOSTNAME', 'FINGERPRINT', 'NICKNAME')
 
 EXIT_USAGE_WIDTH = 15
+UPDATE_RATE = 5  # rate in seconds at which we refresh
 
 
 def conf_handler(key, value):
   if key == 'features.connection.listing_type':
     return conf.parse_enum(key, value, Listing)
-  elif key == 'features.connection.refreshRate':
-    return max(1, value)
   elif key == 'features.connection.order':
     return conf.parse_enum_csv(key, value[0], entries.SortAttr, 3)
 
@@ -43,7 +42,6 @@ CONFIG = conf.config_dict('nyx', {
     entries.SortAttr.CATEGORY,
     entries.SortAttr.LISTING,
     entries.SortAttr.UPTIME],
-  'features.connection.refreshRate': 5,
   'features.connection.showIps': True,
 }, conf_handler)
 
@@ -78,10 +76,11 @@ class ConnectionPanel(panel.Panel, threading.Thread):
     self._last_update = -1        # time the content was last revised
     self._is_tor_running = True   # indicates if tor is currently running or not
     self._halt_time = None        # time when tor was stopped
-    self._halt = False            # terminates thread if true
-    self._cond = threading.Condition()  # used for pausing the thread
     self.vals_lock = threading.RLock()
 
+    self._pause_condition = threading.Condition()
+    self._halt = False  # terminates thread if true
+
     # Tracks exiting port and client country statistics
 
     self._client_locale_usage = {}
@@ -322,36 +321,19 @@ class ConnectionPanel(panel.Panel, threading.Thread):
     Keeps connections listing updated, checking for new entries at a set rate.
     """
 
-    last_draw = time.time() - 1
-
-    # Fetches out initial connection results. The wait is so this doesn't
-    # run during nyx's interface initialization (otherwise there's a
-    # noticeable pause before the first redraw).
-
-    with self._cond:
-      self._cond.wait(0.2)
-
-    self._update()             # populates initial entries
-    self._resolve_apps(False)  # resolves initial applications
+    last_ran = -1
 
     while not self._halt:
-      current_time = time.time()
-
-      if self.is_paused() or not self._is_tor_running or current_time - last_draw < CONFIG['features.connection.refreshRate']:
-        with self._cond:
+      if self.is_paused() or not self._is_tor_running or (time.time() - last_ran) < UPDATE_RATE:
+        with self._pause_condition:
           if not self._halt:
-            self._cond.wait(0.2)
-      else:
-        # updates content if their's new results, otherwise just redraws
-
-        self._update()
-        self.redraw(True)
+            self._pause_condition.wait(0.2)
 
-        # we may have missed multiple updates due to being paused, showing
-        # another panel, etc so last_draw might need to jump multiple ticks
+        continue  # done waiting, try again
 
-        draw_ticks = (time.time() - last_draw) / CONFIG['features.connection.refreshRate']
-        last_draw += CONFIG['features.connection.refreshRate'] * draw_ticks
+      self._update()
+      self.redraw(True)
+      last_ran = time.time()
 
   def get_help(self):
     resolver_util = nyx.util.tracker.get_connection_tracker().get_custom_resolver()
@@ -364,6 +346,9 @@ class ConnectionPanel(panel.Panel, threading.Thread):
       ('page down', 'scroll down a page', None),
       ('enter', 'show connection details', None),
       ('d', 'raw consensus descriptor', None),
+      ('l', 'listed identity', self.get_listing_type().lower()),
+      ('s', 'sort ordering', None),
+      ('u', 'resolving utility', 'auto' if resolver_util is None else resolver_util),
     ]
 
     if user_traffic_allowed.inbound:
@@ -372,9 +357,6 @@ class ConnectionPanel(panel.Panel, threading.Thread):
     if user_traffic_allowed.outbound:
       options.append(('e', 'exit port usage summary', None))
 
-    options.append(('l', 'listed identity', self.get_listing_type().lower()))
-    options.append(('s', 'sort ordering', None))
-    options.append(('u', 'resolving utility', 'auto' if resolver_util is None else resolver_util))
     return options
 
   def get_selection(self):
@@ -468,9 +450,9 @@ class ConnectionPanel(panel.Panel, threading.Thread):
     Halts further resolutions and terminates the thread.
     """
 
-    with self._cond:
+    with self._pause_condition:
       self._halt = True
-      self._cond.notifyAll()
+      self._pause_condition.notifyAll()
 
   def _update(self):
     """
diff --git a/nyxrc.sample b/nyxrc.sample
index 44b0228..aae13dc 100644
--- a/nyxrc.sample
+++ b/nyxrc.sample
@@ -197,11 +197,6 @@ features.graph.bw.accounting.show true
 #   * NICKNAME
 #   * COUNTRY
 #
-# refreshRate
-#   rate at which the connection panel contents is redrawn (if higher than the
-#   connection resolution rate then reducing this won't casue new data to
-#   appear more frequently - just increase the rate at which the uptime field
-#   is updated)
 # resolveApps
 #   issues lsof queries to determining the applications involved in local
 #   SOCKS and CONTROL connections
@@ -219,7 +214,6 @@ features.graph.bw.accounting.show true
 
 features.connection.listingType IP_ADDRESS
 features.connection.order CATEGORY, LISTING, UPTIME
-features.connection.refreshRate 5
 features.connection.resolveApps true
 features.connection.markInitialConnections true
 features.connection.showIps true





More information about the tor-commits mailing list