[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