[tor-commits] [arm/master] Dropping header panel's _get_fd_used()

atagar at torproject.org atagar at torproject.org
Tue Sep 2 03:56:01 UTC 2014


commit de0f54cf1f9dc616bf712a52deead610220d0964
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Sep 1 15:45:59 2014 -0700

    Dropping header panel's _get_fd_used()
    
    Removing one of the header panel's helper functions now that it's in stem.
---
 arm/header_panel.py |   92 +++++++++++++++++----------------------------------
 arm/util/tracker.py |    6 ++--
 2 files changed, 34 insertions(+), 64 deletions(-)

diff --git a/arm/header_panel.py b/arm/header_panel.py
index cd037a1..2371667 100644
--- a/arm/header_panel.py
+++ b/arm/header_panel.py
@@ -51,7 +51,7 @@ class HeaderPanel(panel.Panel, threading.Thread):
     self._is_fd_sixty_percent_warned = False
     self._is_fd_ninety_percent_warned = False
 
-    self.vals = Sampling()
+    self._vals = Sampling()
 
     # listens for tor reload (sighup) events
 
@@ -65,7 +65,7 @@ class HeaderPanel(panel.Panel, threading.Thread):
 
     is_wide = self.get_parent().getmaxyx()[1] >= MIN_DUAL_COL_WIDTH
 
-    if self.vals.is_relay:
+    if self._vals.is_relay:
       return 4 if is_wide else 6
     else:
       return 3 if is_wide else 4
@@ -90,7 +90,7 @@ class HeaderPanel(panel.Panel, threading.Thread):
 
     if key in (ord('n'), ord('N')) and tor_controller().is_newnym_available():
       self.send_newnym()
-    elif key in (ord('r'), ord('R')) and not self.vals.is_connected:
+    elif key in (ord('r'), ord('R')) and not self._vals.is_connected:
       # oldSocket = tor_tools.get_conn().get_controller().get_socket()
       #
       # controller = None
@@ -139,7 +139,7 @@ class HeaderPanel(panel.Panel, threading.Thread):
     return is_keystroke_consumed
 
   def draw(self, width, height):
-    vals = self.vals  # local reference to avoid concurrency concerns
+    vals = self._vals  # local reference to avoid concurrency concerns
     is_wide = width + 1 >= MIN_DUAL_COL_WIDTH
 
     # space available for content
@@ -304,7 +304,7 @@ class HeaderPanel(panel.Panel, threading.Thread):
 
     x = self.addstr(y, x, 'flags: ')
 
-    if len(vals.flags) > 0:
+    if vals.flags:
       for i, flag in enumerate(vals.flags):
         flag_color = CONFIG['attr.flag_colors'].get(flag, 'white')
         x = self.addstr(y, x, flag, curses.A_BOLD, flag_color)
@@ -344,13 +344,11 @@ class HeaderPanel(panel.Panel, threading.Thread):
     available if in the process of building circuits.
     """
 
-    newnym_wait = tor_controller().get_newnym_wait()
-
-    if newnym_wait == 0:
+    if vals.newnym_wait == 0:
       self.addstr(y, x, "press 'n' for a new identity")
     else:
-      plural = 's' if newnym_wait > 1 else ''
-      self.addstr(y, x, 'building circuits, available again in %i second%s' % (newnym_wait, plural))
+      plural = 's' if vals.newnym_wait > 1 else ''
+      self.addstr(y, x, 'building circuits, available again in %i second%s' % (vals.newnym_wait, plural))
 
   def run(self):
     """
@@ -362,7 +360,7 @@ class HeaderPanel(panel.Panel, threading.Thread):
     while not self._halt:
       current_time = time.time()
 
-      if self.is_paused() or current_time - last_draw < 1 or not self.vals.is_connected:
+      if self.is_paused() or current_time - last_draw < 1 or not self._vals.is_connected:
         self._cond.acquire()
 
         if not self._halt:
@@ -379,16 +377,16 @@ class HeaderPanel(panel.Panel, threading.Thread):
 
         is_changed = False
 
-        if self.vals.pid:
+        if self._vals.pid:
           # resource_tracker = arm.util.tracker.get_resource_tracker()
           # is_changed = self._last_resource_fetch != resource_tracker.run_counter()
           is_changed = True  # TODO: we should decide to redraw or not based on if the sampling values have changed
 
-        if is_changed or (self.vals and current_time - self.vals.retrieved >= 20):
-          self.vals = Sampling(self.vals)
+        if is_changed or (self._vals and current_time - self._vals.retrieved >= 20):
+          self._vals = Sampling(self._vals)
 
-          if self.vals.fd_used and self.vals.fd_limit:
-            fd_percent = 100 * self.vals.fd_used / self.vals.fd_limit
+          if self._vals.fd_used and self._vals.fd_limit:
+            fd_percent = 100 * self._vals.fd_used / self._vals.fd_limit
             msg = "Tor's file descriptor usage is at %i%%." % fd_percent
 
             if fd_percent >= 90 and not self._is_fd_ninety_percent_warned:
@@ -413,28 +411,20 @@ class HeaderPanel(panel.Panel, threading.Thread):
     self._cond.release()
 
   def reset_listener(self, controller, event_type, _):
-    """
-    Updates static parameters on tor reload (sighup) events.
-    """
+    self._update()
 
-    if event_type in (State.INIT, State.RESET):
-      initial_height = self.get_height()
+  def _update(self):
+    previous_height = self.get_height()
+    self._vals = Sampling(self._vals)
 
-      self.vals = Sampling(self.vals)
+    if previous_height != self.get_height():
+      # We're toggling between being a relay and client, causing the height
+      # of this panel to change. Redraw all content so we don't get
+      # overlapping content.
 
-      if self.get_height() != initial_height:
-        # We're toggling between being a relay and client, causing the height
-        # of this panel to change. Redraw all content so we don't get
-        # overlapping content.
-
-        arm.controller.get_controller().redraw()
-      else:
-        # just need to redraw ourselves
-        self.redraw(True)
-    elif event_type == State.CLOSED:
-      self.vals = Sampling(self.vals)
-
-      self.redraw(True)
+      arm.controller.get_controller().redraw()
+    else:
+      self.redraw(True)  # just need to redraw ourselves
 
 
 class Sampling(object):
@@ -465,6 +455,7 @@ class Sampling(object):
     self.control_port = controller.get_conf('ControlPort', '0')
     self.socket_path = controller.get_conf('ControlSocket', '')
     self.is_relay = bool(self.or_port)
+    self.newnym_wait = controller.get_newnym_wait()
 
     if controller.get_conf('HashedControlPassword', None):
       self.auth_type = 'password'
@@ -483,7 +474,11 @@ class Sampling(object):
     self.pid = controller.get_pid('')
     self.start_time = stem.util.system.get_start_time(controller.get_pid(None))
     self.fd_limit = int(fd_limit) if fd_limit.isdigit() else None
-    self.fd_used = self._get_fd_used(controller.get_pid(None)) if self.fd_limit else 0
+
+    try:
+      self.fd_used = stem.util.proc.file_descriptors_used(controller.get_pid(None))
+    except IOError:
+      self.fd_used = None
 
     self.tor_cpu = '%0.1f' % (100 * tor_resources.cpu_sample)
     self.arm_cpu = '%0.1f' % (100 * self._get_cpu_percentage(last_sampling))
@@ -504,31 +499,6 @@ class Sampling(object):
 
     return formatted_msg
 
-  def _get_fd_used(self, pid):
-    """
-    Provides the number of file descriptors currently being used by this
-    process.
-
-    :param int pid: process id to look up
-
-    :returns: **int** of the number of file descriptors used, **None** if this
-      can't be determined
-    """
-
-    # The file descriptor usage is the size of the '/proc/<pid>/fd' contents...
-    #
-    #   http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.html
-    #
-    # I'm not sure about other platforms (like BSD) so erroring out there.
-
-    if pid and stem.util.proc.is_available():
-      try:
-        return len(os.listdir('/proc/%s/fd' % pid))
-      except:
-        pass
-
-    return None
-
   def _get_flags(self, controller):
     """
     Provides the flags held by our relay. This is an empty list if it can't be
diff --git a/arm/util/tracker.py b/arm/util/tracker.py
index 02b1943..224c99c 100644
--- a/arm/util/tracker.py
+++ b/arm/util/tracker.py
@@ -189,7 +189,7 @@ def _resources_via_proc(pid):
   :raises: **IOError** if unsuccessful
   """
 
-  utime, stime, start_time = proc.get_stats(
+  utime, stime, start_time = proc.stats(
     pid,
     proc.Stat.CPU_UTIME,
     proc.Stat.CPU_STIME,
@@ -197,8 +197,8 @@ def _resources_via_proc(pid):
   )
 
   total_cpu_time = float(utime) + float(stime)
-  memory_in_bytes = proc.get_memory_usage(pid)[0]
-  total_memory = proc.get_physical_memory()
+  memory_in_bytes = proc.memory_usage(pid)[0]
+  total_memory = proc.physical_memory()
 
   uptime = time.time() - float(start_time)
   memory_in_percent = float(memory_in_bytes) / total_memory





More information about the tor-commits mailing list