[CalendarServer-changes] [12804] CalendarServer/trunk/calendarserver/webadmin

source_changes at macosforge.org source_changes at macosforge.org
Tue Mar 4 18:21:33 PST 2014


Revision: 12804
          http://trac.calendarserver.org//changeset/12804
Author:   wsanchez at apple.com
Date:     2014-03-04 18:21:33 -0800 (Tue, 04 Mar 2014)
Log Message:
-----------
Send retry interval for events.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/webadmin/eventsource.py
    CalendarServer/trunk/calendarserver/webadmin/work.py

Modified: CalendarServer/trunk/calendarserver/webadmin/eventsource.py
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/eventsource.py	2014-03-04 23:51:38 UTC (rev 12803)
+++ CalendarServer/trunk/calendarserver/webadmin/eventsource.py	2014-03-05 02:21:33 UTC (rev 12804)
@@ -39,7 +39,7 @@
 
 
 
-def textAsEvent(text, eventID=None, eventClass=None):
+def textAsEvent(text, eventID=None, eventClass=None, eventRetry=None):
     """
     Format some text as an HTML5 EventSource event.  Since the EventSource data
     format is text-oriented, this function expects L{unicode}, not L{bytes};
@@ -60,6 +60,10 @@
     @param eventClass: A class name (ie. a categorization) for the event.
     @type eventClass: L{unicode}
 
+    @param eventRetry: The retry interval (in milliseconds) for the client to
+        wait before reconnecting if it gets disconnected.
+    @type eventRetry: L{int}
+
     @return: An HTML5 EventSource event as text.
     @rtype: UTF-8 encoded L{bytes}
     """
@@ -74,6 +78,9 @@
     if eventClass is not None:
         event.append(u"event: {0}".format(eventClass))
 
+    if eventRetry is not None:
+        event.append(u"retry: {0:d}".format(eventRetry))
+
     event.extend(
         u"data: {0}".format(l) for l in text.split("\n")
     )
@@ -106,6 +113,12 @@
         @rtype: L{unicode}
         """
 
+    def retryForEvent(event):
+        """
+        @return: The retry interval (in milliseconds) for the client to wait
+            before reconnecting if it gets disconnected.
+        @rtype: L{int}
+        """
 
 
 class EventSourceResource(Resource):
@@ -212,6 +225,7 @@
         idForEvent = self._eventDecoder.idForEvent
         classForEvent = self._eventDecoder.classForEvent
         textForEvent = self._eventDecoder.textForEvent
+        retryForEvent = self._eventDecoder.retryForEvent
 
         for event in self._events:
             eventID = idForEvent(event)
@@ -227,11 +241,12 @@
 
             eventClass = classForEvent(event)
             eventText = textForEvent(event)
+            eventRetry = retryForEvent(event)
 
             self._lastID = eventID
 
             return succeed(
-                textAsEvent(eventText, eventID, eventClass)
+                textAsEvent(eventText, eventID, eventClass, eventRetry)
             )
 
 

Modified: CalendarServer/trunk/calendarserver/webadmin/work.py
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/work.py	2014-03-04 23:51:38 UTC (rev 12803)
+++ CalendarServer/trunk/calendarserver/webadmin/work.py	2014-03-05 02:21:33 UTC (rev 12804)
@@ -89,11 +89,13 @@
     Resource that vends work queue information via HTML5 EventSource events.
     """
 
-    def __init__(self, store):
+    def __init__(self, store, pollInterval=1):
         EventSourceResource.__init__(self, EventDecoder, bufferSize=1)
 
         self._store = store
+        self._pollInterval = pollInterval
 
+
     @inlineCallbacks
     def render(self, request):
         yield self.poll()
@@ -111,6 +113,7 @@
                 eventClass=u"work-total",
                 eventID=time(),
                 eventText=asJSON(jobData),
+                eventRetry=(self._pollInterval * 1000),
             ),
         ))
 
@@ -118,7 +121,7 @@
             from twisted.internet import reactor
             self._clock = reactor
 
-        self._clock.callLater(1, self.poll)
+        self._clock.callLater(self._pollInterval, self.poll)
 
 
 
@@ -139,6 +142,11 @@
         return event.get("eventText")
 
 
+    @staticmethod
+    def retryForEvent(event):
+        return event.get("eventRetry")
 
+
+
 def asJSON(obj):
     return dumps(obj, separators=(',', ':'))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140304/edc2361a/attachment-0001.html>


More information about the calendarserver-changes mailing list