[tor-commits] [arm/release] Support logging of arm events.

atagar at torproject.org atagar at torproject.org
Sun Jul 17 06:08:27 UTC 2011


commit d5556ad4ce0c43d0aca1b287ad59c3a90bd923c5
Author: Kamran Riaz Khan <krkhan at inspirated.com>
Date:   Mon Jun 20 16:55:05 2011 +0500

    Support logging of arm events.
---
 src/gui/__init__.py   |    2 +-
 src/gui/arm.xml       |    8 +------
 src/gui/controller.py |   14 +++++++-----
 src/gui/logPanel.py   |   56 +++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 66 insertions(+), 14 deletions(-)

diff --git a/src/gui/__init__.py b/src/gui/__init__.py
index f461b3e..b700273 100644
--- a/src/gui/__init__.py
+++ b/src/gui/__init__.py
@@ -2,5 +2,5 @@
 Panels, popups, and handlers comprising the arm user interface.
 """
 
-__all__ = ["controller"]
+__all__ = ["controller", "logPanel"]
 
diff --git a/src/gui/arm.xml b/src/gui/arm.xml
index 11f5c63..8cbb924 100644
--- a/src/gui/arm.xml
+++ b/src/gui/arm.xml
@@ -692,11 +692,5 @@ each direction. (Default: 0) &lt;/span&gt;</property>
       </object>
     </child>
   </object>
-  <object class="GtkTextBuffer" id="textbuffer_log">
-    <property name="text" translatable="yes">16:09:20 [NOTICE] Bootstrapped 90%: Establishing a Tor circuit.
-16:09:23 [NOTICE] Tor has successfully opened a circuit. Looks like client functionality is working.
-16:09:23 [NOTICE] Tor has successfully opened a circuit. Looks like client functionality is working.
-16:09:24 [NOTICE] Bootstrapped 100%: Done.
-</property>
-  </object>
+  <object class="GtkTextBuffer" id="textbuffer_log"/>
 </interface>
diff --git a/src/gui/controller.py b/src/gui/controller.py
index 4da82c9..8f27df4 100644
--- a/src/gui/controller.py
+++ b/src/gui/controller.py
@@ -1,7 +1,8 @@
 import gobject
 import gtk
 
-from util import torTools
+from util import log, torTools
+from gui import logPanel
 from gui.graphing import bandwidthStats
 
 gobject.threads_init()
@@ -17,14 +18,15 @@ class GuiController:
     self.bwStats = bandwidthStats.BandwidthStats(self.builder)
     self.bwStats.pack_widgets()
 
+    self.logPanel = logPanel.LogPanel(self.builder)
+    self.logPanel.pack_widgets()
+
+    log.log(log.DEBUG, "Hello World!")
+    log.log(log.ERR, "Hello Again!")
+
   def run(self):
     window = self.builder.get_object('window_main')
 
-    textbuffer = self.builder.get_object('textbuffer_log')
-    conn = torTools.getConn()
-    torPid = conn.getMyPid()
-    textbuffer.set_text("Tor pid: %s" % torPid)
-
     window.show_all()
     gtk.main()
 
diff --git a/src/gui/logPanel.py b/src/gui/logPanel.py
new file mode 100644
index 0000000..174ed64
--- /dev/null
+++ b/src/gui/logPanel.py
@@ -0,0 +1,56 @@
+"""
+Base class for implementing graphing functionality.
+"""
+
+import random
+import sys
+
+from collections import deque
+
+import gobject
+import gtk
+
+from TorCtl import TorCtl
+from util import log, uiTools, torTools
+
+from cli.logPanel import RUNLEVEL_EVENT_COLOR, LogEntry
+
+class LogPanel:
+  def __init__(self, builder):
+    self.builder = builder
+
+    self.msgLog = deque()
+
+    log.LOG_LOCK.acquire()
+    try:
+      armRunlevels = [log.DEBUG, log.INFO, log.NOTICE, log.WARN, log.ERR]
+      log.addListeners(armRunlevels, self._register_arm_event)
+    finally:
+      log.LOG_LOCK.release()
+
+    textbuffer = self.builder.get_object('textbuffer_log')
+
+    for color in RUNLEVEL_EVENT_COLOR.values():
+      textbuffer.create_tag(color, foreground=color)
+
+    gobject.timeout_add(1000, self.print_log)
+
+  def print_log(self):
+    textbuffer = self.builder.get_object('textbuffer_log')
+    start, end = textbuffer.get_bounds()
+    textbuffer.delete(start, end)
+
+    for entry in self.msgLog:
+      iter = textbuffer.get_iter_at_mark(textbuffer.get_insert())
+      textbuffer.insert_with_tags_by_name(iter, entry.getDisplayMessage() + "\n", entry.color)
+
+  def register_event(self, event):
+    self.msgLog.appendleft(event)
+
+  def pack_widgets(self):
+    pass
+
+  def _register_arm_event(self, level, msg, eventTime):
+    eventColor = RUNLEVEL_EVENT_COLOR[level]
+    self.register_event(LogEntry(eventTime, "ARM_%s" % level, msg, eventColor))
+





More information about the tor-commits mailing list