[tor-commits] [nyx/master] Take advantage of stem.util.system.tail()

atagar at torproject.org atagar at torproject.org
Tue May 5 05:42:06 UTC 2015


commit ece58f823d9548f04f9a8027c8db17440e33700e
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Apr 6 10:56:08 2015 -0700

    Take advantage of stem.util.system.tail()
    
    Using our new util rather than shelling out for this. Cuts down on one more
    platform specific dependency.
---
 nyx/log_panel.py |   99 ++++++++++++++++++++++--------------------------------
 1 file changed, 40 insertions(+), 59 deletions(-)

diff --git a/nyx/log_panel.py b/nyx/log_panel.py
index 62d2319..b314eaa 100644
--- a/nyx/log_panel.py
+++ b/nyx/log_panel.py
@@ -190,82 +190,63 @@ def get_log_file_entries(runlevels, read_limit = None, add_limit = None):
     if is_file_subset:
       read_limit = add_limit
 
-  # tries opening the log file, cropping results to avoid choking on huge logs
-
-  lines = []
-
-  try:
-    if read_limit:
-      lines = system.call('tail -n %i %s' % (read_limit, logging_location))
-
-      if not lines:
-        raise IOError()
-    else:
-      log_file = open(logging_location, 'r')
-      lines = log_file.readlines()
-      log_file.close()
-  except IOError:
-    log.warn("Unable to read tor's log file: %s" % logging_location)
-
-  if not lines:
-    return []
-
   logged_events = []
   current_unix_time, current_local_time = time.time(), time.localtime()
 
-  for i in range(len(lines) - 1, -1, -1):
-    line = lines[i]
-
-    # entries look like:
-    # Jul 15 18:29:48.806 [notice] Parsing GEOIP file.
+  try:
+    for line in system.tail(logging_location, read_limit):
+      # entries look like:
+      # Jul 15 18:29:48.806 [notice] Parsing GEOIP file.
 
-    line_comp = line.split()
+      line_comp = line.split()
 
-    # Checks that we have all the components we expect. This could happen if
-    # we're either not parsing a tor log or in weird edge cases (like being
-    # out of disk space)
+      # Checks that we have all the components we expect. This could happen if
+      # we're either not parsing a tor log or in weird edge cases (like being
+      # out of disk space)
 
-    if len(line_comp) < 4:
-      continue
+      if len(line_comp) < 4:
+        continue
 
-    event_type = line_comp[3][1:-1].upper()
+      event_type = line_comp[3][1:-1].upper()
 
-    if event_type in runlevels:
-      # converts timestamp to unix time
+      if event_type in runlevels:
+        # converts timestamp to unix time
 
-      timestamp = ' '.join(line_comp[:3])
+        timestamp = ' '.join(line_comp[:3])
 
-      # strips the decimal seconds
+        # strips the decimal seconds
 
-      if '.' in timestamp:
-        timestamp = timestamp[:timestamp.find('.')]
+        if '.' in timestamp:
+          timestamp = timestamp[:timestamp.find('.')]
 
-      # Ignoring wday and yday since they aren't used.
-      #
-      # Pretend the year is 2012, because 2012 is a leap year, and parsing a
-      # date with strptime fails if Feb 29th is passed without a year that's
-      # actually a leap year. We can't just use the current year, because we
-      # might be parsing old logs which didn't get rotated.
-      #
-      # https://trac.torproject.org/projects/tor/ticket/5265
+        # Ignoring wday and yday since they aren't used.
+        #
+        # Pretend the year is 2012, because 2012 is a leap year, and parsing a
+        # date with strptime fails if Feb 29th is passed without a year that's
+        # actually a leap year. We can't just use the current year, because we
+        # might be parsing old logs which didn't get rotated.
+        #
+        # https://trac.torproject.org/projects/tor/ticket/5265
 
-      timestamp = '2012 ' + timestamp
-      event_time_comp = list(time.strptime(timestamp, '%Y %b %d %H:%M:%S'))
-      event_time_comp[8] = current_local_time.tm_isdst
-      event_time = time.mktime(event_time_comp)  # converts local to unix time
+        timestamp = '2012 ' + timestamp
+        event_time_comp = list(time.strptime(timestamp, '%Y %b %d %H:%M:%S'))
+        event_time_comp[8] = current_local_time.tm_isdst
+        event_time = time.mktime(event_time_comp)  # converts local to unix time
 
-      # The above is gonna be wrong if the logs are for the previous year. If
-      # the event's in the future then correct for this.
+        # The above is gonna be wrong if the logs are for the previous year. If
+        # the event's in the future then correct for this.
 
-      if event_time > current_unix_time + 60:
-        event_time_comp[0] -= 1
-        event_time = time.mktime(event_time_comp)
+        if event_time > current_unix_time + 60:
+          event_time_comp[0] -= 1
+          event_time = time.mktime(event_time_comp)
 
-      event_msg = ' '.join(line_comp[4:])
-      logged_events.append(LogEntry(event_time, event_type, event_msg, RUNLEVEL_EVENT_COLOR[event_type]))
+        event_msg = ' '.join(line_comp[4:])
+        logged_events.append(LogEntry(event_time, event_type, event_msg, RUNLEVEL_EVENT_COLOR[event_type]))
 
-    if 'opening log file' in line:
-      break  # this entry marks the start of this tor instance
+      if 'opening log file' in line:
+        break  # this entry marks the start of this tor instance
+  except IOError:
+    log.warn("Unable to read tor's log file: %s" % logging_location)
 
   if add_limit:
     logged_events = logged_events[:add_limit]





More information about the tor-commits mailing list