[tor-commits] [nyx/master] Use circuit's creation timestamp for uptime

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


commit d1f0c94b6ece39d1fd37ed1dd7f714a3fed0ac7a
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jul 17 08:57:37 2015 -0700

    Use circuit's creation timestamp for uptime
    
    Like connections we displayed the time nyx has seen the circuit, but we can do
    better. Circuits provide their creation timestamp so we can say with certainty
    how long they've been around.
    
    On a side note, damn python's datetime handling is a clusterfuck.
---
 nyx/connections/circ_entry.py |   28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/nyx/connections/circ_entry.py b/nyx/connections/circ_entry.py
index 02599e5..a80bc8a 100644
--- a/nyx/connections/circ_entry.py
+++ b/nyx/connections/circ_entry.py
@@ -9,7 +9,7 @@ followed by an entry for each hop in the circuit. For instance:
 """
 
 import curses
-import time
+import datetime
 
 import nyx.util.tracker
 import nyx.util.ui_tools
@@ -19,10 +19,15 @@ 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 CircEntry(conn_entry.ConnectionEntry):
   def __init__(self, circ):
-    conn_entry.ConnectionEntry.__init__(self, nyx.util.tracker.Connection(time.time(), False, '127.0.0.1', 0, '127.0.0.1', 0, 'tcp'))
+    conn_entry.ConnectionEntry.__init__(self, nyx.util.tracker.Connection(to_unix_time(circ.created), False, '127.0.0.1', 0, '127.0.0.1', 0, 'tcp'))
 
+    self._circuit = circ
     self.circuit_id = circ.id
     self.status = circ.status
 
@@ -33,7 +38,7 @@ class CircEntry(conn_entry.ConnectionEntry):
     if len(purpose) >= 2:
       purpose = purpose[0].upper() + purpose[1:].lower()
 
-    self.lines = [CircHeaderLine(self.circuit_id, purpose)]
+    self.lines = [CircHeaderLine(circ)]
 
     # Overwrites attributes of the initial line to make it more fitting as the
     # header for our listing.
@@ -76,7 +81,7 @@ class CircEntry(conn_entry.ConnectionEntry):
 
       placement_label = '%i / %s' % (i + 1, placement_type)
 
-      self.lines.append(CircLine(relay_ip, relay_port, relay_fingerprint, placement_label))
+      self.lines.append(CircLine(relay_ip, relay_port, relay_fingerprint, placement_label, to_unix_time(self._circuit.created)))
 
     self.lines[-1].is_last = True
 
@@ -87,14 +92,15 @@ class CircHeaderLine(conn_entry.ConnectionLine):
   lines except that its etc field has circuit attributes.
   """
 
-  def __init__(self, circuit_id, purpose):
-    conn_entry.ConnectionLine.__init__(self, nyx.util.tracker.Connection(time.time(), False, '127.0.0.1', 0, '0.0.0.0', 0, 'tcp'), False, False)
-    self.circuit_id = circuit_id
-    self.purpose = purpose
+  def __init__(self, circ):
+    conn_entry.ConnectionLine.__init__(self, nyx.util.tracker.Connection(to_unix_time(circ.created), False, '127.0.0.1', 0, '0.0.0.0', 0, 'tcp'), False, False)
+    self.circuit_id = circ.id
+    self.purpose = circ.purpose
     self.is_built = False
+    self._timestamp = to_unix_time(circ.created)
 
   def set_exit(self, exit_address, exit_port, exit_fingerprint):
-    conn_entry.ConnectionLine.__init__(self, nyx.util.tracker.Connection(time.time(), False, '127.0.0.1', 0, exit_address, exit_port, 'tcp'), False, False)
+    conn_entry.ConnectionLine.__init__(self, nyx.util.tracker.Connection(self._timestamp, False, '127.0.0.1', 0, exit_address, exit_port, 'tcp'), False, False)
     self.is_built = True
     self.foreign.fingerprint_overwrite = exit_fingerprint
 
@@ -138,8 +144,8 @@ class CircLine(conn_entry.ConnectionLine):
   caching, etc).
   """
 
-  def __init__(self, remote_address, remote_port, remote_fingerprint, placement_label):
-    conn_entry.ConnectionLine.__init__(self, nyx.util.tracker.Connection(time.time(), False, '127.0.0.1', 0, remote_address, remote_port, 'tcp'))
+  def __init__(self, remote_address, remote_port, remote_fingerprint, placement_label, timestamp):
+    conn_entry.ConnectionLine.__init__(self, nyx.util.tracker.Connection(timestamp, False, '127.0.0.1', 0, remote_address, remote_port, 'tcp'))
     self.foreign.fingerprint_overwrite = remote_fingerprint
     self.placement_label = placement_label
     self.include_port = False





More information about the tor-commits mailing list