[CalendarServer-changes] [12664] CalendarServer/trunk/calendarserver/webadmin/logs.py

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 12 11:20:56 PDT 2014


Revision: 12664
          http://trac.calendarserver.org//changeset/12664
Author:   wsanchez at apple.com
Date:     2014-02-11 18:06:50 -0800 (Tue, 11 Feb 2014)
Log Message:
-----------
Try to be event-based.  Fail.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/webadmin/logs.py

Modified: CalendarServer/trunk/calendarserver/webadmin/logs.py
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/logs.py	2014-02-12 00:30:58 UTC (rev 12663)
+++ CalendarServer/trunk/calendarserver/webadmin/logs.py	2014-02-12 02:06:50 UTC (rev 12664)
@@ -31,8 +31,7 @@
 from zope.interface import implementer
 
 from twisted.python.log import FileLogObserver
-from twisted.internet.defer import succeed
-from twisted.internet.task import deferLater
+from twisted.internet.defer import Deferred, succeed
 
 from txweb2.stream import IByteStream, fallbackSplit
 from txweb2.resource import Resource
@@ -92,20 +91,20 @@
     def __init__(self):
         Resource.__init__(self)
 
+        events = deque(maxlen=400)
 
-    @property
-    def events(self):
-        if not hasattr(self, "_buffer"):
-            buffer = deque(maxlen=400)
+        observers = (
+            AccessLogObserver(events),
+            BufferingLogObserver(events),
+        )
 
-            AccessLogObserver(buffer).start()
-            BufferingLogObserver(buffer).start()
+        for observer in observers:
+            observer.start()
 
-            self._buffer = buffer
+        self.events = events
+        self.observers = observers
 
-        return self._buffer
 
-
     def render(self, request):
         start = request.headers.getRawHeaders("last-event-id")
 
@@ -116,7 +115,7 @@
                 start = None
 
         response = Response()
-        response.stream = LogEventStream(self, start)
+        response.stream = LogEventStream(self, start=start)
         response.headers.setHeader(
             "content-type", MimeType.fromString("text/event-stream")
         )
@@ -190,9 +189,20 @@
                 textAsEvent(marker, eventID=0, eventClass=u"server")
             )
 
-        return deferLater(self._reactor, 1, self.read, _retrying=True)
+        return succeed(None)
 
+        # def readAgain(_):
+        #     return self.read()
 
+        # d = Deferred()
+        # d.addCallback(readAgain)
+
+        # for observer in self._source.observers:
+        #     observer.registerDeferred(d)
+
+        # return d
+
+
     def split(self, point):
         return fallbackSplit(self, point)
 
@@ -214,6 +224,8 @@
 
 
     def __init__(self, buffer):
+        self._junk = file("/tmp/junk", "a")
+
         class FooIO(object):
             def write(_, s):
                 self._lastMessage = s
@@ -225,19 +237,37 @@
 
         self.lastMessage = None
         self._buffer = buffer
+        self._waiting = []
 
 
     def emit(self, event):
         self._buffer.append((self, u"server", event))
 
+        self._junk.write("emit: {0!r} on {1}\n".format(self._waiting, self))
+        self._junk.flush()
 
+        while self._waiting:
+            d = self._waiting.pop(0)
+            self._junk.write("calling: {0}\n".format(d))
+            self._junk.flush()
+            d.callback(None)
+            self._junk.write("called: {0}\n".format(d))
+            self._junk.flush()
+
+
     def formatEvent(self, event):
         self._lastMessage = None
         FileLogObserver.emit(self, event)
         return self._lastMessage
 
 
+    def registerDeferred(self, d):
+        self._waiting.append(d)
+        self._junk.write("Registered: {0} on {1}\n".format(self._waiting, self))
+        self._junk.flush()
 
+
+
 class AccessLogObserver(CommonAccessLoggingObserverExtensions):
     """
     Log observer that captures apache-style access log text entries in a
@@ -261,7 +291,11 @@
         self._buffer.append((self, u"access", event))
 
 
+    def registerDeferred(self, d):
+        pass
 
+
+
 def textAsEvent(text, eventID=None, eventClass=None):
     event = []
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/859c99cf/attachment.html>


More information about the calendarserver-changes mailing list