[tor-commits] [nyx/master] Don't track start_time in the Entry

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


commit 45558ac8118d78a04c5e560843d5bd54c91e04d7
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Aug 30 10:50:22 2015 -0700

    Don't track start_time in the Entry
    
    The entry has access to the connection so no reason for it to track the start
    time separately. This also lets us move the to_unix_time() with the circuit
    which is nice since that's the only spot where it's now needed.
---
 nyx/connections/circ_entry.py |   19 +++++++++++--------
 nyx/connections/entries.py    |   33 ++++++++++++++-------------------
 2 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/nyx/connections/circ_entry.py b/nyx/connections/circ_entry.py
index b1d95c7..673777d 100644
--- a/nyx/connections/circ_entry.py
+++ b/nyx/connections/circ_entry.py
@@ -9,6 +9,7 @@ followed by an entry for each hop in the circuit. For instance:
 """
 
 import curses
+import datetime
 
 import nyx.util.tracker
 import nyx.util.ui_tools
@@ -18,6 +19,10 @@ from nyx.connections import entries, conn_entry
 from stem.util import str_tools
 
 
+def to_unix_time(dt):
+  return (dt - datetime.datetime(1970, 1, 1)).total_seconds()
+
+
 class CircHeaderLine(conn_entry.ConnectionLine):
   """
   Initial line of a client entry. This has the same basic format as connection
@@ -34,7 +39,7 @@ class CircHeaderLine(conn_entry.ConnectionLine):
       self.is_built = False
       self._remote_fingerprint = None
 
-    conn_entry.ConnectionLine.__init__(self, entry, nyx.util.tracker.Connection(entries.to_unix_time(circ.created), False, '127.0.0.1', 0, exit_address, exit_port, 'tcp'), False, False)
+    conn_entry.ConnectionLine.__init__(self, entry, nyx.util.tracker.Connection(to_unix_time(circ.created), False, '127.0.0.1', 0, exit_address, exit_port, 'tcp'), False, False)
     self.circuit = circ
 
   def get_fingerprint(self, default = None):
@@ -77,16 +82,18 @@ class CircLine(conn_entry.ConnectionLine):
   caching, etc).
   """
 
-  def __init__(self, entry, circ, fingerprint, timestamp):
+  def __init__(self, entry, circ, fingerprint):
     relay_ip, relay_port = nyx.util.tracker.get_consensus_tracker().get_relay_address(fingerprint, ('192.168.0.1', 0))
-    conn_entry.ConnectionLine.__init__(self, entry, nyx.util.tracker.Connection(timestamp, False, '127.0.0.1', 0, relay_ip, relay_port, 'tcp'), False)
+    conn_entry.ConnectionLine.__init__(self, entry, nyx.util.tracker.Connection(to_unix_time(circ.created), False, '127.0.0.1', 0, relay_ip, relay_port, 'tcp'), False)
     self._fingerprint = fingerprint
+    self._is_last = False
 
     circ_path = [path_entry[0] for path_entry in circ.path]
     circ_index = circ_path.index(fingerprint)
 
     if circ_index == len(circ_path) - 1:
       placement_type = 'Exit' if circ.status == 'BUILT' else 'Extending'
+      self._is_last = True
     elif circ_index == 0:
       placement_type = 'Guard'
     else:
@@ -94,15 +101,11 @@ class CircLine(conn_entry.ConnectionLine):
 
     self.placement_label = '%i / %s' % (circ_index + 1, placement_type)
 
-    # determines the sort of left hand bracketing we use
-
-    self.is_last = circ_index == len(circ_path) - 1
-
   def get_fingerprint(self, default = None):
     self._fingerprint
 
   def get_listing_prefix(self):
-    if self.is_last:
+    if self._is_last:
       return (ord(' '), curses.ACS_LLCORNER, curses.ACS_HLINE, ord(' '))
     else:
       return (ord(' '), curses.ACS_VLINE, ord(' '), ord(' '))
diff --git a/nyx/connections/entries.py b/nyx/connections/entries.py
index 00b0a0a..fb49f98 100644
--- a/nyx/connections/entries.py
+++ b/nyx/connections/entries.py
@@ -4,8 +4,6 @@ entry itself (ie, Tor connection, client circuit, etc) and the lines it
 consists of in the listing.
 """
 
-import datetime
-
 from nyx.util import tor_controller
 
 from stem.control import Listener
@@ -39,22 +37,17 @@ CONFIG = conf.config_dict('nyx', {
 })
 
 
-def to_unix_time(dt):
-  return (dt - datetime.datetime(1970, 1, 1)).total_seconds()
-
-
 class Entry(object):
-  def __init__(self, connection_type, start_time):
-    self.lines = []
+  def __init__(self, connection_type):
+    self._lines = []
     self._connection_type = connection_type
-    self._start_time = start_time
 
   @staticmethod
   def from_connection(conn):
     import nyx.connections.conn_entry
 
-    entry = Entry(get_type(conn), conn.start_time)
-    entry.lines = [nyx.connections.conn_entry.ConnectionLine(entry, conn)]
+    entry = Entry(get_type(conn))
+    entry._lines = [nyx.connections.conn_entry.ConnectionLine(entry, conn)]
     return entry
 
   @staticmethod
@@ -62,11 +55,11 @@ class Entry(object):
     import nyx.connections.circ_entry
     import nyx.connections.conn_entry
 
-    entry = Entry(nyx.connections.conn_entry.Category.CIRCUIT, to_unix_time(circ.created))
-    entry.lines = [nyx.connections.circ_entry.CircHeaderLine(entry, circ)]
+    entry = Entry(nyx.connections.conn_entry.Category.CIRCUIT)
+    entry._lines = [nyx.connections.circ_entry.CircHeaderLine(entry, circ)]
 
     for fingerprint, _ in circ.path:
-      entry.lines.append(nyx.connections.circ_entry.CircLine(entry, circ, fingerprint, to_unix_time(circ.created)))
+      entry._lines.append(nyx.connections.circ_entry.CircLine(entry, circ, fingerprint))
 
     return entry
 
@@ -95,16 +88,18 @@ class Entry(object):
     if not CONFIG['features.connection.showIps']:
       return True
 
+    connection = self._lines[0].connection
+
     if self.get_type() == nyx.connections.conn_entry.Category.INBOUND:
       controller = tor_controller()
 
       if controller.is_user_traffic_allowed().inbound:
-        return len(nyx.util.tracker.get_consensus_tracker().get_all_relay_fingerprints(self.connection.remote_address)) == 0
+        return len(nyx.util.tracker.get_consensus_tracker().get_all_relay_fingerprints(connection.remote_address)) == 0
     elif self.get_type() == nyx.connections.conn_entry.Category.EXIT:
       # DNS connections exiting us aren't private (since they're hitting our
       # resolvers). Everything else is.
 
-      return self.connection.remote_port != 53 or self.connection.protocol != 'udp'
+      return connection.remote_port != 53 or connection.protocol != 'udp'
 
     return False  # for everything else this isn't a concern
 
@@ -115,7 +110,7 @@ class Entry(object):
     :returns: **list** of **ConnectionLine** concerning this entry
     """
 
-    return self.lines
+    return self._lines
 
   @lru_cache()
   def get_sort_value(self, attr):
@@ -127,7 +122,7 @@ class Entry(object):
     :returns: comparable object by the given attribute
     """
 
-    connection_line = self.lines[0]
+    connection_line = self._lines[0]
 
     if attr == SortAttr.IP_ADDRESS:
       if self.is_private():
@@ -149,7 +144,7 @@ class Entry(object):
       import nyx.connections.conn_entry
       return nyx.connections.conn_entry.Category.index_of(self.get_type())
     elif attr == SortAttr.UPTIME:
-      return self._start_time
+      return connection_line.connection.start_time
     elif attr == SortAttr.COUNTRY:
       return '' if self.is_private() else connection_line.get_locale('')
     else:





More information about the tor-commits mailing list