[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