[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