[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