[CalendarServer-changes] [12776] CalendarServer/trunk/calendarserver/webadmin
source_changes at macosforge.org
source_changes at macosforge.org
Thu Feb 27 18:02:47 PST 2014
Revision: 12776
http://trac.calendarserver.org//changeset/12776
Author: wsanchez at apple.com
Date: 2014-02-27 18:02:46 -0800 (Thu, 27 Feb 2014)
Log Message:
-----------
Poll for work activity
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/webadmin/work.py
CalendarServer/trunk/calendarserver/webadmin/work.xhtml
Modified: CalendarServer/trunk/calendarserver/webadmin/work.py
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/work.py 2014-02-28 00:51:41 UTC (rev 12775)
+++ CalendarServer/trunk/calendarserver/webadmin/work.py 2014-02-28 02:02:46 UTC (rev 12776)
@@ -25,9 +25,26 @@
"WorkMonitorResource",
]
-# from twisted.internet.defer import inlineCallbacks, returnValue
+from json import dumps
+
+from zope.interface import implementer
+
+from twisted.internet.defer import inlineCallbacks # , returnValue
# from twisted.web.template import tags as html, renderer
+# from txdav.caldav.datastore.scheduling.imip.inbound import (
+# IMIPPollingWork, IMIPReplyWork
+# )
+
+# from twistedcaldav.directory.directory import GroupCacherPollingWork
+# from calendarserver.push.notifier import PushNotificationWork
+
+from txdav.caldav.datastore.scheduling.work import (
+ ScheduleOrganizerWork, ScheduleReplyWork, ScheduleRefreshWork
+)
+
+
+from .eventsource import EventSourceResource, IEventDecoder
from .resource import PageElement, TemplateResource
@@ -37,12 +54,10 @@
Principal management page element.
"""
- def __init__(self, store):
+ def __init__(self):
PageElement.__init__(self, u"work")
- self._store = store
-
def pageSlots(self):
return {
u"title": u"Workload Monitor",
@@ -60,5 +75,106 @@
def __init__(self, store):
TemplateResource.__init__(
- self, lambda: WorkMonitorPageElement(store)
+ self, lambda: WorkMonitorPageElement()
)
+
+ self.putChild(u"events", WorkEventsResource(store))
+
+
+
+class WorkEventsResource(EventSourceResource):
+ """
+ Resource that vends work queue information via HTML5 EventSource events.
+ """
+
+ def __init__(self, store):
+ EventSourceResource.__init__(self, EventDecoder, bufferSize=1)
+
+ self._store = store
+
+
+ @inlineCallbacks
+ def poll(self):
+ txn = self._store.newTransaction()
+
+ payload = {}
+
+ for workDescription, workItemClass, itemAttributes in (
+ (
+ u"Organizer Request",
+ ScheduleOrganizerWork,
+ (
+ ("icalendarUid", "iCalendar UID"),
+ ("attendeeCount", "Attendee Count"),
+ ),
+ ),
+ (
+ u"Attendee Reply",
+ ScheduleReplyWork,
+ (
+ ("icalendarUid", "iCalendar UID"),
+ ),
+ ),
+ (
+ u"Attendee Refresh",
+ ScheduleRefreshWork,
+ (
+ ("icalendarUid", "iCalendar UID"),
+ ("attendeeCount", "Attendee Count"),
+ ),
+ ),
+ ):
+ workItems = yield workItemClass.all(txn)
+
+ categoryData = []
+
+ for workItem in workItems:
+ itemData = {}
+
+ for itemAttribute, itemDescription in itemAttributes:
+ itemData[itemDescription] = getattr(
+ workItem, itemAttribute
+ )
+
+ categoryData.append(itemData)
+
+ payload[workDescription] = categoryData
+
+
+ print(payload)
+
+ # self._workEventsResource.addEvents((
+ # dict(
+ # eventClass=u"work",
+ # eventText=asJSON(payload),
+ # ),
+ # ))
+
+ if not hasattr(self, "_clock"):
+ from twisted.internet import reactor
+ self._clock = reactor
+
+ self._clock.callLater(5, self.poll)
+
+
+
+ at implementer(IEventDecoder)
+class EventDecoder(object):
+ @staticmethod
+ def idForEvent(event):
+ return event.get("eventID")
+
+
+ @staticmethod
+ def classForEvent(event):
+ return event.get("eventClass")
+
+
+ @staticmethod
+ def textForEvent(event):
+ return event.get("eventText")
+
+
+
+def asJSON(obj):
+ return dumps(obj, separators=(',', ':'))
Modified: CalendarServer/trunk/calendarserver/webadmin/work.xhtml
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/work.xhtml 2014-02-28 00:51:41 UTC (rev 12775)
+++ CalendarServer/trunk/calendarserver/webadmin/work.xhtml 2014-02-28 02:02:46 UTC (rev 12776)
@@ -27,9 +27,6 @@
<script>
function drawChart(data) {
-
- // var data = [4, 8, 15, 16, 23, 42];
-
var width = 600;
var barHeight = 20;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140227/89d454d8/attachment-0001.html>
More information about the calendarserver-changes
mailing list