[CalendarServer-changes] [12653] CalendarServer/trunk/calendarserver/webadmin/logs.py
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 12 11:20:47 PDT 2014
Revision: 12653
http://trac.calendarserver.org//changeset/12653
Author: wsanchez at apple.com
Date: 2014-02-11 12:16:08 -0800 (Tue, 11 Feb 2014)
Log Message:
-----------
Add main log observer
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/webadmin/logs.py
Modified: CalendarServer/trunk/calendarserver/webadmin/logs.py
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/logs.py 2014-02-11 19:03:36 UTC (rev 12652)
+++ CalendarServer/trunk/calendarserver/webadmin/logs.py 2014-02-11 20:16:08 UTC (rev 12653)
@@ -30,6 +30,7 @@
from zope.interface import implementer
+from twisted.python.log import FileLogObserver
from twisted.internet.defer import succeed
from txweb2.stream import IByteStream, fallbackSplit
@@ -90,17 +91,20 @@
def __init__(self):
Resource.__init__(self)
- logObserver = AccessLoggingObserver()
- logObserver.start()
- self._observer = logObserver
+ @property
+ def events(self):
+ if not hasattr(self, "_buffer"):
+ buffer = deque(maxlen=100)
- # self._observer.logMessage(u"Hello")
- # self._observer.logMessage(u"Yo")
- # self._observer.logMessage(u"Bonjour")
- # self._observer.logMessage(u"Hola")
+ AccessLogObserver(buffer).start()
+ BufferingLogObserver(buffer).start()
+ self._buffer = buffer
+ return self._buffer
+
+
def render(self, request):
start = request.headers.getRawHeaders("last-event-id")
@@ -111,7 +115,7 @@
start = None
response = Response()
- response.stream = LogObservingEventStream(self._observer, start)
+ response.stream = LogEventStream(self, start)
response.headers.setHeader(
"content-type", MimeType.fromString("text/event-stream")
)
@@ -120,19 +124,18 @@
@implementer(IByteStream)
-class LogObservingEventStream(object):
+class LogEventStream(object):
"""
- L{IStream} that observes log events and streams them out as HTML5
- EventSource events.
+ L{IByteStream} that streams log events out as HTML5 EventSource events.
"""
length = None
- def __init__(self, observer, start):
+ def __init__(self, source, start):
object.__init__(self)
- self._observer = observer
+ self._source = source
self._start = start
self._closed = False
@@ -144,7 +147,7 @@
start = self._start
messageID = None
- for event in self._observer.events():
+ for eventClass, event in self._source.events:
messageID = id(event)
# If we have a start point, skip messages up to and including the
@@ -158,7 +161,10 @@
self._start = messageID
- message = event["log-format"] % event
+ if eventClass == "access":
+ message = event["log-format"] % event
+ else:
+ message = unicode(event)
eventText = textAsEvent(
message, eventID=messageID, eventClass=u"access"
@@ -170,6 +176,7 @@
# We just scanned all the messages, and none are the last one the
# client saw.
self._start = None
+ return succeed("-" * 80)
return self.read()
return succeed(None)
@@ -184,21 +191,41 @@
-# Note: CommonAccessLoggingObserverExtensions is an old-style log observer, as
-# it inherits from BaseCommonAccessLoggingObserver in txweb2.
+class BufferingLogObserver(FileLogObserver):
+ """
+ Log observer that captures events in a buffer instead of writing to a file.
-class AccessLoggingObserver(CommonAccessLoggingObserverExtensions):
+ @note: L{BufferingLogObserver} is an old-style log observer, as it
+ inherits from L{FileLogObserver}.
"""
+
+ def __init__(self, buffer):
+ class IO(object):
+ @staticmethod
+ def write(s):
+ buffer.append((u"server", s))
+
+ @staticmethod
+ def flush():
+ pass
+
+ FileLogObserver.__init__(self, IO)
+
+
+
+class AccessLogObserver(CommonAccessLoggingObserverExtensions):
+ """
Log observer that captures apache-style access log text entries in a
buffer.
- @note: L{AccessLoggingObserver} is an old-style log observer, as it
+ @note: L{AccessLogObserver} is an old-style log observer, as it
ultimately inherits from L{txweb2.log.BaseCommonAccessLoggingObserver}.
"""
- def __init__(self):
+
+ def __init__(self, buffer):
CommonAccessLoggingObserverExtensions.__init__(self)
- self._buffer = deque(maxlen=100)
+ self._buffer = buffer
def logStats(self, event):
@@ -206,18 +233,10 @@
if event["type"] != "access-log":
return
- # # Omit events for the log event stream
- # if event["uri"] == "/admin/logs/events":
- # return
+ self._buffer.append((u"access", event))
- self._buffer.append(event)
- def events(self):
- return iter(self._buffer)
-
-
-
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/8c135a38/attachment.html>
More information about the calendarserver-changes
mailing list