[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