[Erp5-report] r45969 arnaud.fontaine - /slapos/trunk/util/slapos.tool.nosqltester_manager/s...
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Jul 6 16:14:53 CEST 2011
Author: arnaud.fontaine
Date: Wed Jul 6 16:14:52 2011
New Revision: 45969
URL: http://svn.erp5.org?rev=45969&view=rev
Log:
Add pre/post specific to ERP5 results publication for now.
Modified:
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py
Modified: slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py?rev=45969&r1=45968&r2=45969&view=diff
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py [utf8] (original)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py [utf8] Wed Jul 6 16:14:52 2011
@@ -93,6 +93,8 @@ class NoSQLTesterManager(object):
self.cert_file = parameter_dict['cert_file']
self.computer_id = parameter_dict['computer_id']
self.computer_partition_id = parameter_dict['computer_partition_id']
+ self.erp5_publish_url = parameter_dict['erp5_publish_url']
+ self.erp5_publish_project = parameter_dict['erp5_publish_project']
self.slap = slap.slap()
self.slap.initializeConnection(self.server_url, self.key_file, self.cert_file)
@@ -139,6 +141,12 @@ class NoSQLTesterManager(object):
parser.add_argument('--node-increment', '-i', type=int, default=1,
help='Number of nodes to add at the end of an iteration')
+ parser.add_argument('--erp5-publish-url',
+ help='ERP5 URL to publish the results to '
+ '(default: disabled, thus writing to CSV files)')
+
+ parser.add_argument('--erp5-publish-project', help='ERP5 publish project')
+
parser.add_argument('software_release_url', help='Software Release URL')
parser.add_argument('server_url', help='Server URL')
parser.add_argument('key_file', help='SSL key file')
@@ -218,6 +226,27 @@ class NoSQLTesterManager(object):
return False
return True
+ def preRun(self):
+ start_value_dict = {}
+
+ if self.erp5_publish_url and self.erp5_publish_project:
+ if self.nb_init_tester != self.max_tester:
+ nb_users = (self.nb_init_tester, self.max_tester)
+ else:
+ nb_users = self.max_tester
+
+ from erp5.utils.benchmark.benchmark import ERP5BenchmarkResult
+ new_document_id = ERP5BenchmarkResult.createResultDocument(self.erp5_publish_url,
+ self.erp5_publish_project,
+ 1,
+ nb_users)
+
+ self.erp5_publish_url = '/'.join((self.erp5_publish_url, new_document_id))
+ start_value_dict['erp5_publish_url'] = self.erp5_publish_url
+ start_value_dict['erp5_publish_project'] = self.erp5_publish_project
+
+ return start_value_dict
+
def do_scheduling(self, action):
"""
Sends an action to all the testers know by the manager.
@@ -226,9 +255,12 @@ class NoSQLTesterManager(object):
:type action: str.
"""
+ start_value_dict = {'action': action}
+ start_value_dict.update(self.preRun())
+
for i in range(0, self.tester_urls.__len__()):
self.logger.debug("send %s to %s" % (action, self.tester_urls[i]))
- while not self.post(self.tester_urls[i]+'/action', action=action):
+ while not self.post(self.tester_urls[i]+'/action', **start_value_dict):
self.logger.debug("sleep")
time.sleep(1)
self.testers_status[i] = action.upper()+('P' if action == 'stop' else '')+'ED'
@@ -338,6 +370,20 @@ class NoSQLTesterManager(object):
except:
return sys.exc_info()
+ def _allCurrentTesterExecuted(*args, **kwargs):
+ if self.node_count < getattr(self, "max_%s" % self.node_type):
+ self.logger.debug("Adding %d nodes" % self.node_increment)
+ self.add_node()
+ self.todo = self.tester_urls.__len__()
+ os.write(self.write_pipe, "GO")
+ self.node_count += self.node_increment
+ else:
+ self.logger.debug("Stopping")
+ os.write(self.write_pipe, "END")
+ os.close(self.write_pipe)
+ self.write_pipe = -1
+ self.postRun()
+
@app.route('/report', methods=['POST'])
def receiveReport():
"""
@@ -371,18 +417,8 @@ class NoSQLTesterManager(object):
if self.todo == 0:
self.process_report(self.reports)
self.reports = []
+ _allCurrentTesterExecuted()
- if self.node_count < getattr(self, "max_%s" % self.node_type):
- self.logger.debug("Adding %d nodes" % self.node_increment)
- self.add_node()
- self.todo = self.tester_urls.__len__()
- os.write(self.write_pipe, "GO")
- self.node_count += self.node_increment
- else:
- self.logger.debug("Stopping")
- os.write(self.write_pipe, "END")
- os.close(self.write_pipe)
- self.write_pipe = -1
else:
self.logger.debug("No data: url='%s', filename='%s', "
"compress_method='%s'" % (request.form['url'],
@@ -391,6 +427,23 @@ class NoSQLTesterManager(object):
except:
self.logger.debug(str(sys.exc_info()))
self.logger.debug(Formatter().formatException(sys.exc_info()))
+
+ elif request.method == 'POST' and 'error_message_set' in request.form and \
+ self.erp5_publish_url and self.erp5_publish_project:
+ self.todo -= 1
+
+ error_message_set = \
+ set([message for message in request.form['error_message_set'].split('|') if message])
+
+ try:
+ self.error_message_set.update(error_message_set)
+ except AttributeError:
+ self.error_message_set = error_message_set
+
+ self.logger.warning(repr(self.error_message_set))
+ if self.todo == 0:
+ _allCurrentTesterExecuted()
+
else:
self.logger.debug("Invalid request: method='%s' (expected: 'POST'), "
"url='%s', filename='%s'" % \
@@ -408,6 +461,12 @@ class NoSQLTesterManager(object):
"""
pass
+ def postRun(self):
+ if self.erp5_publish_url and self.erp5_publish_project:
+ from erp5.utils.benchmark.benchmark import ERP5BenchmarkResult
+ ERP5BenchmarkResult.closeResultDocument(self.erp5_publish_url,
+ tuple(self.error_message_set))
+
def scheduler_thread(scheduler, read):
s = ""
while s != "END":
@@ -420,10 +479,6 @@ def scheduler_thread(scheduler, read):
def main():
"""
Main function. It's the entry point for this program.
-
- :params argv: command line arguments.
- :type argv: list.
-
"""
# FIXME: Hack to make the flask's render_template method work with packages
# plugins
More information about the Erp5-report
mailing list