[CalendarServer-changes] [7086] CalendarServer/trunk/contrib/performance

source_changes at macosforge.org source_changes at macosforge.org
Mon Feb 28 15:15:16 PST 2011


Revision: 7086
          http://trac.macosforge.org/projects/calendarserver/changeset/7086
Author:   exarkun at twistedmatrix.com
Date:     2011-02-28 15:15:14 -0800 (Mon, 28 Feb 2011)
Log Message:
-----------
Refactor the event-creating benchmarks to have less duplication; add an autoaccept benchmark.

Modified Paths:
--------------
    CalendarServer/trunk/contrib/performance/_event_create.py
    CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence.py
    CalendarServer/trunk/contrib/performance/benchmarks/event.py
    CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence.py

Added Paths:
-----------
    CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py

Modified: CalendarServer/trunk/contrib/performance/_event_create.py
===================================================================
--- CalendarServer/trunk/contrib/performance/_event_create.py	2011-02-26 04:27:03 UTC (rev 7085)
+++ CalendarServer/trunk/contrib/performance/_event_create.py	2011-02-28 23:15:14 UTC (rev 7086)
@@ -30,6 +30,88 @@
 from benchlib import initialize, sample
 from httpclient import StringProducer
 
+
+# XXX Represent these as vobjects?  Would make it easier to add more vevents.
+event = """\
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+BEGIN:VTIMEZONE
+TZID:America/Los_Angeles
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+END:VTIMEZONE
+%(VEVENTS)s\
+END:VCALENDAR
+"""
+
+vevent = """\
+BEGIN:VEVENT
+UID:%(UID)s
+DTSTART;TZID=America/Los_Angeles:%(START)s
+DTEND;TZID=America/Los_Angeles:%(END)s
+%(RRULE)s\
+CREATED:20100729T193912Z
+DTSTAMP:20100729T195557Z
+%(ORGANIZER)s\
+%(ATTENDEES)s\
+SEQUENCE:0
+SUMMARY:Some random thing
+TRANSP:OPAQUE
+END:VEVENT
+"""
+
+attendee = """\
+ATTENDEE;CN=User %(SEQUENCE)02d;CUTYPE=INDIVIDUAL;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=NE
+ EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:urn:uuid:user%(SEQUENCE)02d
+"""
+
+organizer = """\
+ORGANIZER;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com:urn:uuid:user%(SEQUENCE)02d
+ATTENDEE;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=ACCEPTE
+ D:urn:uuid:user%(SEQUENCE)02d
+"""
+
+def makeOrganizer(sequence):
+    return organizer % {'SEQUENCE': sequence}
+
+
+def makeAttendees(count):
+    return [
+        attendee % {'SEQUENCE': n} for n in range(2, count + 2)]
+
+
+def makeVCalendar(uid, start, end, recurrence, organizerSequence, attendees):
+    if recurrence is None:
+        rrule = ""
+    else:
+        rrule = recurrence + "\n"
+    return event % {
+        'VEVENTS': vevent % {
+            'UID': uid,
+            'START': formatDate(start),
+            'END': formatDate(end),
+            'ORGANIZER': makeOrganizer(organizerSequence),
+            'ATTENDEES': ''.join(attendees),
+            'RRULE': rrule,
+            },
+        }
+
+
+
 def formatDate(d):
     return ''.join(filter(str.isalnum, d.isoformat()))
 

Modified: CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence.py	2011-02-26 04:27:03 UTC (rev 7085)
+++ CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence.py	2011-02-28 23:15:14 UTC (rev 7086)
@@ -22,45 +22,10 @@
 from itertools import count
 from datetime import datetime, timedelta
 
-from _event_create import formatDate, measure as _measure
+from _event_create import (
+    makeAttendees, makeVCalendar, formatDate, measure as _measure)
 
-DAILY_EVENT = """\
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-CALSCALE:GREGORIAN
-BEGIN:VTIMEZONE
-TZID:America/New_York
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-DTSTART:20070311T020000
-TZNAME:EDT
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-DTSTART:20071104T020000
-TZNAME:EST
-TZOFFSETTO:-0500
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VEVENT
-CREATED:20110223T184640Z
-UID:%(UID)s
-DTEND;TZID=America/New_York:%(DTEND)s
-RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=%(UNTIL)s
-TRANSP:OPAQUE
-SUMMARY:A meeting which occurs daily for several days.
-DTSTART;TZID=America/New_York:%(DTSTART)s
-DTSTAMP:20110223T184658Z
-SEQUENCE:5
-END:VEVENT
-END:VCALENDAR
-"""
-
-def makeEvent(i):
+def makeEvent(i, organizerSequence, attendeeCount):
     """
     Create a new half-hour long event that starts soon and recurs
     daily for the next five days.
@@ -69,12 +34,10 @@
     start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
     end = start + timedelta(minutes=30)
     until = start + timedelta(days=5)
-    return DAILY_EVENT % {
-        'DTSTART': formatDate(start),
-        'DTEND': formatDate(end),
-        'UNTIL': formatDate(until),
-        'UID': uuid4(),
-        }
+    rrule = "RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=" + formatDate(until)
+    return makeVCalendar(
+        uuid4(), start, end, rrule, organizerSequence,
+        makeAttendees(attendeeCount))
 
 
 def measure(host, port, dtrace, attendeeCount, samples):
@@ -82,7 +45,7 @@
     organizerSequence = 1
 
     # An infinite stream of recurring VEVENTS to PUT to the server.
-    events = ((i, makeEvent(i)) for i in count(2))
+    events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
 
     return _measure(
         calendar, organizerSequence, events,

Modified: CalendarServer/trunk/contrib/performance/benchmarks/event.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event.py	2011-02-26 04:27:03 UTC (rev 7085)
+++ CalendarServer/trunk/contrib/performance/benchmarks/event.py	2011-02-28 23:15:14 UTC (rev 7086)
@@ -22,84 +22,21 @@
 from uuid import uuid4
 from datetime import datetime, timedelta
 
-from _event_create import formatDate, measure as _measure
+from _event_create import (
+    makeAttendees, makeVCalendar, formatDate, measure as _measure)
 
-# XXX Represent these as vobjects?  Would make it easier to add more vevents.
-event = """\
-BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-BEGIN:VTIMEZONE
-TZID:America/Los_Angeles
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-END:VTIMEZONE
-%(VEVENTS)s\
-END:VCALENDAR
-"""
 
-attendee = """\
-ATTENDEE;CN=User %(SEQUENCE)02d;CUTYPE=INDIVIDUAL;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=NE
- EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:urn:uuid:user%(SEQUENCE)02d
-"""
-
-organizer = """\
-ORGANIZER;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com:urn:uuid:user%(SEQUENCE)02d
-ATTENDEE;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=ACCEPTE
- D:urn:uuid:user%(SEQUENCE)02d
-"""
-
-def makeOrganizer(sequence):
-    return organizer % {'SEQUENCE': sequence}
-
-def makeAttendees(count):
-    return ''.join([
-            attendee % {'SEQUENCE': n} for n in range(2, count + 2)])
-
-
-SUMMARY = "STUFF IS THINGS"
-
 def makeEvent(i, organizerSequence, attendeeCount):
-    s = """\
-BEGIN:VEVENT
-UID:%(UID)s
-DTSTART;TZID=America/Los_Angeles:%(START)s
-DTEND;TZID=America/Los_Angeles:%(END)s
-CREATED:20100729T193912Z
-DTSTAMP:20100729T195557Z
-%(ORGANIZER)s\
-%(ATTENDEES)s\
-SEQUENCE:0
-SUMMARY:%(summary)s
-TRANSP:OPAQUE
-END:VEVENT
-"""
     base = datetime(2010, 7, 30, 11, 15, 00)
     interval = timedelta(0, 5)
     duration = timedelta(0, 3)
-    return event % {
-        'VEVENTS': s % {
-            'UID': uuid4(),
-            'START': formatDate(base + i * interval),
-            'END': formatDate(base + i * interval + duration),
-            'ORGANIZER': makeOrganizer(organizerSequence),
-            'ATTENDEES': makeAttendees(attendeeCount),
-            'summary': SUMMARY,
-            },
-        }
+    return makeVCalendar(
+        uuid4(), 
+        base + i * interval,
+        base + i * interval + duration,
+        None,
+        organizerSequence,
+        makeAttendees(attendeeCount))
 
 
 def measure(host, port, dtrace, attendeeCount, samples):

Added: CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py	                        (rev 0)
+++ CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py	2011-02-28 23:15:14 UTC (rev 7086)
@@ -0,0 +1,56 @@
+##
+# Copyright (c) 2011 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+"""
+Benchmark a server's handling of event creation involving an
+auto-accept resource.
+"""
+
+from itertools import count
+from uuid import uuid4
+from datetime import datetime, timedelta
+
+from _event_create import (
+    makeAttendees, makeVCalendar, formatDate, measure as _measure)
+
+
+def makeEvent(i, organizerSequence, attendeeCount):
+    base = datetime(2010, 7, 30, 11, 15, 00)
+    interval = timedelta(0, 5)
+    duration = timedelta(0, 3)
+    attendees = makeAttendees(attendeeCount)
+    attendees.append(
+        'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
+        ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
+    return makeVCalendar(
+        uuid4(), 
+        base + i * interval,
+        base + i * interval + duration,
+        None,
+        organizerSequence,
+        attendees)
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+    calendar = "event-autoaccept-creation-benchmark"
+    organizerSequence = 1
+
+    # An infinite stream of VEVENTs to PUT to the server.
+    events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
+
+    return _measure(
+        calendar, organizerSequence, events,
+        host, port, dtrace, samples)

Modified: CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence.py	2011-02-26 04:27:03 UTC (rev 7085)
+++ CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence.py	2011-02-28 23:15:14 UTC (rev 7086)
@@ -22,58 +22,20 @@
 from itertools import count
 from datetime import datetime, timedelta
 
-from _event_create import formatDate, measure as _measure
+from _event_create import (
+    makeAttendees, makeVCalendar, formatDate, measure as _measure)
 
-DAILY_EVENT = """\
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-CALSCALE:GREGORIAN
-BEGIN:VTIMEZONE
-TZID:America/New_York
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-DTSTART:20070311T020000
-TZNAME:EDT
-TZOFFSETTO:-0400
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-DTSTART:20071104T020000
-TZNAME:EST
-TZOFFSETTO:-0500
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VEVENT
-CREATED:20110223T184640Z
-UID:%(UID)s
-DTEND;TZID=America/New_York:%(DTEND)s
-RRULE:FREQ=WEEKLY
-TRANSP:OPAQUE
-SUMMARY:A meeting which occurs daily for several days.
-DTSTART;TZID=America/New_York:%(DTSTART)s
-DTSTAMP:20110223T184658Z
-SEQUENCE:5
-END:VEVENT
-END:VCALENDAR
-"""
-
-def makeEvent(i):
+def makeEvent(i, organizerSequence, attendeeCount):
     """
-    Create a new half-hour long event that starts soon and recurs
-    daily for the next five days.
+    Create a new half-hour long event that starts soon and weekly for
+    as long the server allows.
     """
     now = datetime.now()
     start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
     end = start + timedelta(minutes=30)
-    until = start + timedelta(days=5)
-    return DAILY_EVENT % {
-        'DTSTART': formatDate(start),
-        'DTEND': formatDate(end),
-        'UID': uuid4(),
-        }
+    return makeVCalendar(
+        uuid4(), start, end, "RRULE:FREQ=WEEKLY", organizerSequence,
+        makeAttendees(attendeeCount))
 
 
 def measure(host, port, dtrace, attendeeCount, samples):
@@ -81,7 +43,7 @@
     organizerSequence = 1
 
     # An infinite stream of recurring VEVENTS to PUT to the server.
-    events = ((i, makeEvent(i)) for i in count(2))
+    events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
 
     return _measure(
         calendar, organizerSequence, events,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110228/31a32311/attachment-0001.html>


More information about the calendarserver-changes mailing list