[Erp5-report] r45896 guillaume.bottex - /slapos/trunk/util/slapos.tool.nosqltester_manager/...
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Jun 15 11:11:33 CEST 2011
Author: guillaume.bottex
Date: Wed Jun 15 11:11:33 2011
New Revision: 45896
URL: http://svn.erp5.org?rev=45896&view=rev
Log:
Add comments.
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=45896&r1=45895&r2=45896&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 Jun 15 11:11:33 2011
@@ -37,9 +37,31 @@ import urllib, urllib2
import time
from slapos import slap
-class NoSQLTesterManager:
-
+class NoSQLTesterManager(object):
+ """
+ NoSQLTesterManager class.
+ """
+
def __init__(self, params):
+ """
+ :func:`__init__` method of the NoSQLTester.
+
+ :param params: The name to use.
+ :type params: dict.
+
+ .. note::
+
+ The params dictionnary should contains the following values:
+ address, port, report_path, server_url, nb_server_max,
+ nb_tester_max, key_file, cert_file, computer_id,
+ computer_partition_id, plugin_name, debug
+
+ .. note::
+
+ You may need to override this method in an inheritance class.
+
+ """
+
self.log_directory = params['report_path']
self.work_directory = os.path.split(os.path.split(self.log_directory)[0])[0]
self.tmp_directory = os.path.join(self.work_directory, 'tmp')
@@ -74,6 +96,15 @@ class NoSQLTesterManager:
self.logger.addHandler(file_handler)
def default_init(self):
+ """
+ Initialize a default server and tester configuration by
+ calling the *_<plugin_name>_init* function if it exists.
+
+ .. note::
+ The *_<plugin_name>_init* must be defined the plugin
+ named *<plugin_name>*.
+ """
+
if self.software_release_type == None:
pass
elif "_%s_init" % self.software_release_type in dir(self) and \
@@ -84,6 +115,15 @@ class NoSQLTesterManager:
self.todo = self.tester_urls.__len__()
def add_server_node(self):
+ """
+ Adds a new server node by calling the *_add_<plugin_name>_server_node*
+ function if it exists.
+
+ .. note::
+ The *_add_<plugin_name>_server_node* must be defined the plugin
+ named *<plugin_name>*.
+ """
+
if self.software_release_type == None:
pass
elif "_add_%s_server_node" % self.software_release_type in dir(self) and \
@@ -92,13 +132,31 @@ class NoSQLTesterManager:
time.sleep(1)
def setWritePipe(self, write_pipe):
+ """
+ Set a pipe to make the HTTP server
+ """
+
self.write_pipe = write_pipe
def get(self, url):
+ """
+ Gets the contents of an url.
+ """
+
f = urllib2.urlopen(url)
f.close()
def post(self, url, **values):
+ """
+ Post values to an URL.
+
+ :param url: URL
+ :type url: str.
+ :param values: values to post
+ :type values: dict.
+
+ """
+
try:
data = urllib.urlencode(values)
f = urllib2.urlopen(url, data)
@@ -108,12 +166,28 @@ class NoSQLTesterManager:
return True
def do_scheduling(self, action):
+ """
+ Sends an action to all the testers know by the manager.
+
+ :param action: action to send (either *'START'* or *'STOP'*).
+ :type action: str.
+
+ """
+
for i in range(0, self.tester_urls.__len__()):
while not self.post(self.tester_urls[i]+'/action', action=action):
time.sleep(1)
self.testers_status[i] = action.upper()+('P' if action == 'stop' else '')+'ED'
def uncompress(self, cdata, format):
+ """
+ Uncompress data from a specific compression format.
+
+ :param cdata: data to uncompress.
+ :param format: compression format. (with a leading *'.'*)
+ :type format: str.
+ """
+
rdata = None
if format == "":
rdata = cdata
@@ -124,6 +198,15 @@ class NoSQLTesterManager:
return rdata
def waitForReports(self, **host_parameter_kw):
+ """
+ Defines and starts a web server using *Flask*.
+
+ :param host_parameter_kw: A dictionnary containing the *'host'* and *'port'*
+ on which the web server will run.
+ :type host_parameter_kw: dict.
+
+ """
+
if 'host' not in host_parameter_kw or \
'port' not in host_parameter_kw:
pass
@@ -132,6 +215,12 @@ class NoSQLTesterManager:
@app.route('/')
def ui():
+ """
+ Displays the Web UI.
+
+ :returns: the UI's webpage.
+ """
+
web_page = None
manager_url = 'http://'+"[%s]" % host_parameter_kw['host']+':5000/'
try:
@@ -155,6 +244,12 @@ class NoSQLTesterManager:
@app.route('/stop/<tester>')
def stop(tester):
+ """
+ Stops a desired tester.
+
+ :returns: the UI's webpage.
+ """
+
try:
if tester == "all":
self.do_scheduling('STOP')
@@ -168,6 +263,15 @@ class NoSQLTesterManager:
@app.route('/result/<report>')
def getResult(report):
+ """
+ Sends a *report* file to the user.
+
+ :params report: Name of the file to send.
+ :type report: unicode.
+ :returns: the *report* file.
+
+ """
+
try:
if report == "all.tar.bz2":
tmp = tempfile.NamedTemporaryFile(dir=self.tmp_directory)
@@ -188,6 +292,12 @@ class NoSQLTesterManager:
@app.route('/report', methods=['POST'])
def receiveReport():
+ """
+ Gets a report from a tester.
+
+ :returns: empty string.
+ """
+
if request.method == 'POST' and \
'url' in request.form and \
'filename' in request.form:
@@ -206,7 +316,10 @@ class NoSQLTesterManager:
f = open(filepathname, "w")
f.write(data)
f.close()
- self.todo -= 1
+
+ if 'partial' in request.form and request.form['partial'] == False:
+ self.todo -= 1
+
if self.todo == 0:
self.writeCSV(self.reports, os.path.join(self.log_directory, 'report'+str(self.server_count)+'.csv'))
self.reports = []
@@ -228,10 +341,20 @@ class NoSQLTesterManager:
app.run(host=host_parameter_kw['host'], port=host_parameter_kw['port'])
def writeCSV(self, inputnames, outputname):
+ """
+ Writes a CSV file.
+ The :class:`NoSQLTesterManager`'s method does nothing.
+ This method **must** be overridden by an inheritance plugin.
+ """
+
pass
def go(params):
+ """
+ Actually starts the program.
+ """
+
entry_point = iter_entry_points(group='slapos.tool.nosqltester_manager.plugin', name=params['plugin_name']).next()
plugin_class = entry_point.load()
scheduler = plugin_class(params)
@@ -254,10 +377,21 @@ def go(params):
scheduler.waitForReports(host=params['address'], port=params['port'])
def usage():
+ """
+ Print usage.
+ """
+
pass
def main(argv=None):
-
+ """
+ Main function. It's the entry point for this program.
+
+ :params argv: command line arguments.
+ :type argv: list.
+
+ """
+
# Default values
params = {
'address':"127.0.0.1",
More information about the Erp5-report
mailing list