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

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


Revision: 12638
          http://trac.calendarserver.org//changeset/12638
Author:   wsanchez at apple.com
Date:     2014-02-10 16:51:52 -0800 (Mon, 10 Feb 2014)
Log Message:
-----------
Event sending seens good now.

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

Modified: CalendarServer/trunk/calendarserver/webadmin/logs.py
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/logs.py	2014-02-10 21:33:34 UTC (rev 12637)
+++ CalendarServer/trunk/calendarserver/webadmin/logs.py	2014-02-11 00:51:52 UTC (rev 12638)
@@ -15,6 +15,8 @@
 # limitations under the License.
 ##
 
+from __future__ import print_function
+
 """
 Calendar Server Web Admin UI.
 """
@@ -71,7 +73,12 @@
         self.putChild("events", LogEventsResource())
 
 
+    def render(self, request):
+        self.element = LogsPageElement()
+        return TemplateResource.render(self, request)
 
+
+
 class LogEventsResource(Resource):
     """
     Log event vending resource.
@@ -85,10 +92,23 @@
 
         self._observer = AccessLoggingObserver()
 
+        self._observer.logMessage("Hello")
+        self._observer.logMessage("Yo")
+        self._observer.logMessage("Bonjour")
+        self._observer.logMessage("Hola")
 
+
     def render(self, request):
+        start = request.headers.getRawHeaders("last-event-id")
+
+        if start is not None:
+            try:
+                start = int(start[0])
+            except ValueError:
+                start = None
+
         response = Response()
-        response.stream = LogObservingEventStream(self._observer)
+        response.stream = LogObservingEventStream(self._observer, start)
         response.headers.setHeader(
             "content-type", MimeType.fromString("text/event-stream")
         )
@@ -106,7 +126,7 @@
     length = None
 
 
-    def __init__(self, observer, start=None):
+    def __init__(self, observer, start):
         object.__init__(self)
 
         self._observer = observer
@@ -120,31 +140,41 @@
 
         start = self._start
 
-        events = []
+        print("Last seen message #: {0}".format(start))
 
+        messageID = None
+
         for message in self._observer.messages():
+            messageID = id(message)
+
             # If we have a start point, skip messages up to and including the
             # one at the start point.
             if start is not None:
-                if id(message) == start:
+                print("Skipping message #{0}".format(messageID))
+
+                if messageID == start:
+                    messageID = None
                     start = None
+
                 continue
 
-            events.append(textAsEvent(message))
+            print("Sending message #{0}".format(messageID))
 
-        if events:
-            # Remember the ID of the last event read at our start point
-            self._start = id(events[-1])
+            self._start = messageID
 
-            return succeed("".join(events))
+            from datetime import datetime
+            return succeed(textAsEvent(
+                u"{0}@{1}#{2}: {3}"
+                .format(id(self), datetime.now(), messageID, message),
+                messageID
+            ))
 
-        if self._start is not None:
-            # We have a start point and no data... maybe if fell off of the
-            # buffer; remove the start point and try again.
+        if messageID is not None:
+            # We just scanned all the messages, and none are the last one the
+            # client saw.
             self._start = None
             return self.read()
 
-        # No start point and no events == EOF
         return succeed(None)
 
 
@@ -169,6 +199,8 @@
 
 
     def logMessage(self, message):
+        print("LOG: {0}".format(message))
+
         self._buffer.append(message)
 
 
@@ -177,10 +209,10 @@
 
 
 
-def textAsEvent(text):
+def textAsEvent(text, eventID):
     return (
         u"id: {id}\n"
         u"data: {text}\n"
         u"\n"
-        .format(id=id(text), text=text).encode("utf-8")
+        .format(id=eventID, text=text).encode("utf-8")
     )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/88ce8dfd/attachment.html>


More information about the calendarserver-changes mailing list