[CalendarServer-changes] [9030] CalendarServer/trunk/contrib/performance/loadtest
source_changes at macosforge.org
source_changes at macosforge.org
Wed Apr 11 08:45:13 PDT 2012
Revision: 9030
http://trac.macosforge.org/projects/calendarserver/changeset/9030
Author: cdaboo at apple.com
Date: 2012-04-11 08:45:12 -0700 (Wed, 11 Apr 2012)
Log Message:
-----------
Handle stop sim in the web ui by printing out the final results and then exiting the process a short while later.
Modified Paths:
--------------
CalendarServer/trunk/contrib/performance/loadtest/sim.py
CalendarServer/trunk/contrib/performance/loadtest/test_webadmin.py
CalendarServer/trunk/contrib/performance/loadtest/webadmin.py
Modified: CalendarServer/trunk/contrib/performance/loadtest/sim.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/sim.py 2012-04-11 11:36:45 UTC (rev 9029)
+++ CalendarServer/trunk/contrib/performance/loadtest/sim.py 2012-04-11 15:45:12 UTC (rev 9030)
@@ -363,10 +363,10 @@
def attachServices(self, output):
- ms = MultiService()
+ self.ms = MultiService()
for svcclass in self.serviceClasses():
- svcclass(self, output).setServiceParent(ms)
- attachService(self.reactor, ms)
+ svcclass(self, output).setServiceParent(self.ms)
+ attachService(self.reactor, self, self.ms)
def run(self, output=stdout):
@@ -378,13 +378,24 @@
self.reactor.run()
-def attachService(reactor, service):
+ def stop(self):
+ if self.ms.running:
+ self.ms.stopService()
+ self.reactor.callLater(5, self.reactor.stop)
+
+
+ def shutdown(self):
+ if self.ms.running:
+ self.ms.stopService()
+
+
+def attachService(reactor, loadsim, service):
"""
Attach a given L{IService} provider to the given L{IReactorCore}; cause it
to be started when the reactor starts, and stopped when the reactor stops.
"""
reactor.callWhenRunning(service.startService)
- reactor.addSystemEventTrigger('before', 'shutdown', service.stopService)
+ reactor.addSystemEventTrigger('before', 'shutdown', loadsim.shutdown)
@@ -416,7 +427,7 @@
def stopService(self):
- super(ObserverService, self).startService()
+ super(ObserverService, self).stopService()
for obs in self.loadsim.observers:
removeObserver(obs.observe)
Modified: CalendarServer/trunk/contrib/performance/loadtest/test_webadmin.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/test_webadmin.py 2012-04-11 11:36:45 UTC (rev 9029)
+++ CalendarServer/trunk/contrib/performance/loadtest/test_webadmin.py 2012-04-11 15:45:12 UTC (rev 9030)
@@ -43,6 +43,10 @@
def __init__(self):
self.reactor = WebAdminTests.FakeReactor()
self.reporter = WebAdminTests.FakeReporter()
+ self.running = True
+
+ def stop(self):
+ self.running = False
class FakeRequest(object):
@@ -77,8 +81,9 @@
stop=None,
))
self.assertTrue(response.startswith("<html>"))
- self.assertTrue(response.find(resource.token) != -1)
- self.assertFalse(loadsim.reactor.running)
+ self.assertTrue(response.find(resource.token) == -1)
+ self.assertTrue(response.find("FakeReporter") != -1)
+ self.assertFalse(loadsim.running)
def test_resourcePOST_Stop_BadToken(self):
"""
@@ -95,7 +100,8 @@
))
self.assertTrue(response.startswith("<html>"))
self.assertTrue(response.find(resource.token) != -1)
- self.assertTrue(loadsim.reactor.running)
+ self.assertTrue(response.find("FakeReporter") == -1)
+ self.assertTrue(loadsim.running)
def test_resourcePOST_Results(self):
"""
@@ -113,7 +119,7 @@
self.assertTrue(response.startswith("<html>"))
self.assertTrue(response.find(resource.token) != -1)
self.assertTrue(response.find("FakeReporter") != -1)
- self.assertTrue(loadsim.reactor.running)
+ self.assertTrue(loadsim.running)
def test_resourcePOST_Results_BadToken(self):
"""
@@ -131,4 +137,4 @@
self.assertTrue(response.startswith("<html>"))
self.assertTrue(response.find(resource.token) != -1)
self.assertTrue(response.find("FakeReporter") == -1)
- self.assertTrue(loadsim.reactor.running)
+ self.assertTrue(loadsim.running)
Modified: CalendarServer/trunk/contrib/performance/loadtest/webadmin.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/webadmin.py 2012-04-11 11:36:45 UTC (rev 9029)
+++ CalendarServer/trunk/contrib/performance/loadtest/webadmin.py 2012-04-11 15:45:12 UTC (rev 9030)
@@ -61,6 +61,14 @@
</html>
"""
+ BODY_RESULTS_STOPPED = """<html>
+<body>
+ <h3>LoadSim Stopped - Final Results</h3>
+ <pre>%s</pre>
+</body>
+</html>
+"""
+
def __init__(self, loadsim):
self.loadsim = loadsim
self.token = str(uuid.uuid4())
@@ -73,9 +81,16 @@
return self.BODY % (self.token,)
if 'stop' in request.args:
- self.loadsim.reactor.stop()
+ self.loadsim.stop()
+ return self._renderReport(True)
elif 'results' in request.args:
- report = StringIO.StringIO()
- self.loadsim.reporter.generateReport(report)
+ return self._renderReport()
+ return self.BODY % (self.token,)
+
+ def _renderReport(self, stopped=False):
+ report = StringIO.StringIO()
+ self.loadsim.reporter.generateReport(report)
+ if stopped:
+ return self.BODY_RESULTS_STOPPED % (report.getvalue(),)
+ else:
return self.BODY_RESULTS % (self.token, report.getvalue(),)
- return self.BODY % (self.token,)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120411/0dd5722f/attachment.html>
More information about the calendarserver-changes
mailing list