[tor-commits] [nyx/master] Show torrc load errors

atagar at torproject.org atagar at torproject.org
Sun Feb 14 02:55:49 UTC 2016


commit b8b44d7b45cd44411616bda8d05fdffa8c620624
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Feb 7 21:35:24 2016 -0800

    Show torrc load errors
    
    Showing rather than logging torrc load errors. This is where users want that
    information anyway.
---
 nyx/settings/strings.cfg |  5 ++---
 nyx/torrc_panel.py       | 45 ++++++++++++++++++++++-----------------------
 2 files changed, 24 insertions(+), 26 deletions(-)

diff --git a/nyx/settings/strings.cfg b/nyx/settings/strings.cfg
index 6cfca83..bfe375f 100644
--- a/nyx/settings/strings.cfg
+++ b/nyx/settings/strings.cfg
@@ -25,9 +25,8 @@ msg.panel.header.fd_used_at_ninety_percent Tor's file descriptor usage is at {pe
 msg.panel.graphing.prepopulation_successful Bandwidth graph has information for the last {duration}
 msg.panel.graphing.bw_event_cache_malformed Tor's 'GETINFO bw-event-cache' provided malformed output: {response}
 msg.panel.log.read_from_log_file Read {count} entries from tor's log file: {path} (read limit: {read_limit}, runtime: {runtime})
-msg.panel.torrc.no_torrc ### Unable to load the torrc ###
-msg.panel.torrc.unable_to_find_torrc Unable to determine our torrc location ({error})
-msg.panel.torrc.unable_to_load_torrc Unable to load torrc ({error})
+msg.panel.torrc.unable_to_find_torrc Unable to determine our torrc location: {error}
+msg.panel.torrc.unable_to_load_torrc Unable to read our torrc: {error}
 
 msg.setup.nyx_is_running_as_root Nyx is currently running with root permissions. This isn't a good idea, nor should it be necessary.
 msg.setup.chroot_doesnt_exist The chroot path set in your config ({path}) doesn't exist.
diff --git a/nyx/torrc_panel.py b/nyx/torrc_panel.py
index a1ad943..34b6c3a 100644
--- a/nyx/torrc_panel.py
+++ b/nyx/torrc_panel.py
@@ -9,7 +9,7 @@ from nyx.util import expand_path, msg, panel, tor_controller, ui_tools
 
 from stem import ControllerError
 from stem.control import State
-from stem.util import log, str_tools
+from stem.util import str_tools
 
 MAX_WRAP_PER_LINE = 8
 
@@ -24,8 +24,8 @@ class TorrcPanel(panel.Panel):
     panel.Panel.__init__(self, stdscr, 'torrc', 0)
 
     self._scroll = 0
-    self._show_line_numbers = True     # shows left aligned line numbers
-    self._strip_comments = False   # drops comments and extra whitespace
+    self._show_line_numbers = True  # shows left aligned line numbers
+    self._strip_comments = False  # drops comments and extra whitespace
 
     # height of the content when last rendered (the cached value is invalid if
     # _last_content_height_args is None or differs from the current dimensions)
@@ -33,8 +33,9 @@ class TorrcPanel(panel.Panel):
     self._last_content_height = 1
     self._last_content_height_args = None
 
-    self._torrc_location = ''
+    self._torrc_location = None
     self._torrc_content = None
+    self._torrc_load_error = None
 
     # listens for tor reload (sighup) events
 
@@ -56,12 +57,11 @@ class TorrcPanel(panel.Panel):
         with open(self._torrc_location) as torrc_file:
           self._torrc_content = torrc_file.readlines()
       except ControllerError as exc:
-        log_msg = msg('panel.torrc.unable_to_find_torrc', error = exc.strerror)
-        log.log_once('torrc_load_failed', log.WARN, log_msg)
+        self._torrc_load_error = msg('panel.torrc.unable_to_find_torrc', error = exc)
+        self._torrc_location = None
         self._torrc_content = None
-      except IOError as exc:
-        log_msg = msg('panel.torrc.unable_to_load_torrc', error = exc.strerror)
-        log.log_once('torrc_load_failed', log.WARN, log_msg)
+      except Exception as exc:
+        self._torrc_load_error = msg('panel.torrc.unable_to_load_torrc', error = exc.strerror)
         self._torrc_content = None
 
   def set_comments_visible(self, is_visible):
@@ -123,6 +123,14 @@ class TorrcPanel(panel.Panel):
     ]
 
   def draw(self, width, height):
+    if self.is_title_visible():
+      location = ' (%s)' % self._torrc_location if self._torrc_location else ''
+      self.addstr(0, 0, 'Tor Configuration File%s:' % location, curses.A_STANDOUT)
+
+    if self._torrc_content is None:
+      self.addstr(1, 0, self._torrc_load_error, 'red', curses.A_BOLD)
+      return
+
     # If true, we assume that the cached value in self._last_content_height is
     # still accurate, and stop drawing when there's nothing more to display.
     # Otherwise the self._last_content_height is suspect, and we'll process all
@@ -135,16 +143,13 @@ class TorrcPanel(panel.Panel):
 
     self._scroll = max(0, min(self._scroll, self._last_content_height - height + 1))
 
-    if self._torrc_content is None:
-      rendered_contents = [msg('panel.torrc.no_torrc')]
-    else:
-      rendered_contents = []
+    rendered_contents = []
 
-      for line in self._torrc_content:
-        line = ui_tools.get_printable(line.replace('\t', '   '))
+    for line in self._torrc_content:
+      line = ui_tools.get_printable(line.replace('\t', '   '))
 
-        if self._strip_comments and '#' in line:
-          line = line[:line.find('#')].strip()
+      if self._strip_comments and '#' in line:
+        line = line[:line.find('#')].strip()
 
       rendered_contents.append(line)
 
@@ -168,12 +173,6 @@ class TorrcPanel(panel.Panel):
 
     display_line = -self._scroll + 1  # line we're drawing on
 
-    # draws the top label
-
-    if self.is_title_visible():
-      location_label = ' (%s)' % self._torrc_location
-      self.addstr(0, 0, 'Tor Configuration File%s:' % (location_label), curses.A_STANDOUT)
-
     is_multiline = False  # true if we're in the middle of a multiline torrc entry
 
     for line_number in range(0, len(rendered_contents)):





More information about the tor-commits mailing list