[Erp5-report] r45886 guillaume.bottex - in /slapos/trunk/util: slapos.tool.nosqltester_mana...
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Jun 13 16:57:32 CEST 2011
Author: guillaume.bottex
Date: Mon Jun 13 16:57:32 2011
New Revision: 45886
URL: http://svn.erp5.org?rev=45886&view=rev
Log:
Changes made to follow the NoSQLTester changes
Modified:
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html
Modified: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py?rev=45886&r1=45885&r2=45886&view=diff
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py [utf8] (original)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py [utf8] Mon Jun 13 16:57:32 2011
@@ -27,8 +27,9 @@ setup(
packages = find_packages('src'),
include_package_data = True,
package_dir = {'':'src'},
- install_requires = ['Flask', 'slapos.tool.nosqltester_manager'],
+ install_requires = ['setuptools', 'Flask', 'slapos.tool.nosqltester_manager'],
namespace_packages = ['slapos', 'slapos.tool', 'slapos.tool.nosqltester_manager'],
+ zip_safe = False,
entry_points = """
[slapos.tool.nosqltester_manager.plugin]
kumo=%s:KumoTesterManager
Modified: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py?rev=45886&r1=45885&r2=45886&view=diff
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py [utf8] (original)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py [utf8] Mon Jun 13 16:57:32 2011
@@ -85,12 +85,11 @@ class KumoTesterManager(NoSQLTesterManag
'nb_request':self.nb_request},
filter_kw={'computer_guid':self.computer_guids[self.max_manager+self.max_server+i]}))
for partition in tester_computer_partition:
- self.logger.debug("Appending Kumo testers' start url")
- self.tester_urls.append(partition.getConnectionParameter('start_url'))
+ self.logger.debug("Appending Kumo testers' url")
+ self.tester_urls.append(partition.getConnectionParameter('url'))
self.logger.debug("Before remove duplicates: %s" % str(self.tester_urls))
self.tester_urls = list(set(self.tester_urls)) # remove duplicates
self.logger.debug("After remove duplicates: %s" % str(self.tester_urls))
- self.todo = self.tester_urls.__len__()
self.manager_computer_partition = manager_computer_partition
return True
except:
@@ -123,7 +122,7 @@ class KumoTesterManager(NoSQLTesterManag
lines = f.readlines()
f.close()
for i in range(8, lines.__len__()):
- if i != 13 and i != 14:
+ if lines[i][0] != '[' and lines[i][0] != '-':
l.append(re.findall(r'\d+\.\d+|\d+',lines[i])[0].replace('.', ','))
output.writerow(l)
Modified: slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py?rev=45886&r1=45885&r2=45886&view=diff
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py [utf8] (original)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py [utf8] Mon Jun 13 16:57:32 2011
@@ -27,8 +27,9 @@ setup(
packages = find_packages('src'),
include_package_data = True,
package_dir = {'':'src'},
- install_requires = ['Flask'],
+ install_requires = ['setuptools', 'Flask'],
namespace_packages = ['slapos', 'slapos.tool'],
+ zip_safe = False,
entry_points = """
[console_scripts]
nosqltester_manager = %s:main
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=45886&r1=45885&r2=45886&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] Mon Jun 13 16:57:32 2011
@@ -28,8 +28,10 @@
##############################################################################
from flask import Flask, abort, request, render_template, send_file
-from pkg_resources import iter_entry_points
-import sys, os, getopt, tarfile, tempfile
+from pkg_resources import iter_entry_points, get_distribution
+from logging import Formatter
+from threading import Lock
+import sys, os, getopt, tarfile, tempfile, bz2
import logging, logging.handlers
import urllib, urllib2
import time
@@ -42,6 +44,7 @@ class NoSQLTesterManager:
self.work_directory = os.path.split(os.path.split(self.log_directory)[0])[0]
self.tmp_directory = os.path.join(self.work_directory, 'tmp')
self.tester_urls = []
+ self.testers_status = []
self.todo = 0
self.reports = []
self.max_server = int(params['nb_server_max'])
@@ -77,6 +80,8 @@ class NoSQLTesterManager:
callable(getattr(self, "_%s_init" % self.software_release_type)):
while not getattr(self, "_%s_init" % self.software_release_type)():
time.sleep(1)
+ self.testers_status = ['STOPPED' for url in self.tester_urls]
+ self.todo = self.tester_urls.__len__()
def add_server_node(self):
if self.software_release_type == None:
@@ -102,10 +107,21 @@ class NoSQLTesterManager:
return False
return True
- def do_scheduling(self):
- for url in self.tester_urls:
- while not self.post(url, action='GO'):
+ def do_scheduling(self, action):
+ 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):
+ rdata = None
+ if format == "":
+ rdata = cdata
+ elif format == ".bz2":
+ rdata = bz2.decompress(cdata)
+ elif format == ".zip":
+ pass
+ return rdata
def waitForReports(self, **host_parameter_kw):
if 'host' not in host_parameter_kw or \
@@ -117,7 +133,7 @@ class NoSQLTesterManager:
@app.route('/')
def ui():
web_page = None
- url_all = 'http://'+"[%s]" % host_parameter_kw['host']+':5000/result/all.tar.bz2'
+ manager_url = 'http://'+"[%s]" % host_parameter_kw['host']+':5000/'
try:
results = []
@@ -129,12 +145,27 @@ class NoSQLTesterManager:
item['href'] = 'http://'+"[%s]" % host_parameter_kw['host']+':5000/result/'+item['name']
results.append(item)
- web_page = render_template('ui.html', tester_urls = self.tester_urls, url_all = url_all, done = self.server_count-1, total = self.max_server, results=results)
+ web_page = render_template('ui.html', tester_urls = self.tester_urls, manager_url = manager_url, \
+ done = self.server_count-1, total = self.max_server, results=results, \
+ testers_status = self.testers_status)
except:
web_page = str(sys.exc_info())
return web_page
+ @app.route('/stop/<tester>')
+ def stop(tester):
+ try:
+ if tester == "all":
+ self.do_scheduling('STOP')
+ else:
+ while not self.post(self.tester_urls[int(tester)]+'/action', action='STOP'):
+ time.sleep(1)
+ except:
+ # self.logger.debug(Formatter().formatException(sys.exc_info()))
+ return Formatter().formatException(sys.exc_info())
+ return ui()
+
@app.route('/result/<report>')
def getResult(report):
try:
@@ -143,7 +174,6 @@ class NoSQLTesterManager:
tar = tarfile.open(None, "w:bz2", tmp)
for f in sorted(os.listdir(self.log_directory)):
s = os.path.split(f)[1]
- # if s.find("report") == 0:
tar.add(os.path.join(self.log_directory, s), s, False)
tar.close()
tar_file = send_file(tmp.name)
@@ -162,31 +192,37 @@ class NoSQLTesterManager:
'url' in request.form and \
'filename' in request.form:
try:
+ data = None
f = urllib2.urlopen(request.form['url'])
- data = f.read()
+ if 'compress_method' in request.form:
+ data = self.uncompress(f.read(), request.form['compress_method'])
+ else:
+ data = f.read()
f.close()
+
+ if data is not None:
+ filepathname = os.path.join(self.log_directory, request.form['filename'])
+ self.reports.append(filepathname)
+ f = open(filepathname, "w")
+ f.write(data)
+ f.close()
+ 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 = []
+ self.server_count += 1
+
+ if self.server_count <= self.max_server:
+ self.add_server_node()
+ self.todo = self.tester_urls.__len__()
+ os.write(self.write_pipe, "GO")
+ else:
+ os.write(self.write_pipe, "END")
+ os.close(self.write_pipe)
+ self.write_pipe = -1
except:
self.logger.debug(str(sys.exc_info()))
- if data is not None:
- filepathname = os.path.join(self.log_directory, request.form['filename'])
- self.reports.append(filepathname)
- f = open(filepathname, "w")
- f.write(data)
- f.close()
- 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 = []
- self.server_count += 1
-
- if self.server_count <= self.max_server:
- self.add_server_node()
- self.todo = self.tester_urls.__len__()
- os.write(self.write_pipe, "GO")
- else:
- os.write(self.write_pipe, "END")
- os.close(self.write_pipe)
- self.write_pipe = -1
+ self.logger.debug(Formatter().formatException(sys.exc_info()))
return ""
app.run(host=host_parameter_kw['host'], port=host_parameter_kw['port'])
@@ -208,7 +244,7 @@ def go(params):
s = ""
while s != "END":
time.sleep(1)
- scheduler.do_scheduling()
+ scheduler.do_scheduling(action='START')
s = os.read(r, 255)
time.sleep(1)
os.close(r)
@@ -238,12 +274,15 @@ def main(argv=None):
# 'debug':False}
'debug':True}
+ # FIXME: Hack to make the flask's render_template method work with packages plugins
+ sys.modules[__name__].__file__ = get_distribution(__name__).location + '/slapos/tool/nosqltester_manager/__init__.pyc'
+
if argv == None:
argv = sys.argv[1:]
try:
opts, args = getopt.getopt(argv, "a:dp:r:s:t:", \
- ["address=", "port=", "report-path=", "nb-server-max=", "nb-tester-max="])
+ ["address=", "debug", "port=", "report-path=", "nb-server-max=", "nb-tester-max="])
except getopt.GetoptError:
usage()
sys.exit()
Modified: slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html?rev=45886&r1=45885&r2=45886&view=diff
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html [utf8] (original)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html [utf8] Mon Jun 13 16:57:32 2011
@@ -4,17 +4,34 @@
<title>No SQL tester</title>
</head>
<body>
- Testers addresses:<br>
+ Testers:<br>
<ul id="testers_urls">
- {% for url in tester_urls %}
- <li>{{ url }}</li>
- {% endfor %}
+ <table class="reference" border="2" cellpadding="0" cellspacing="0">
+ <tbody>
+ <colgroup>
+ <col width="80%">
+ <col width="20%">
+ {% for i in range(0, tester_urls.__len__()) %}
+ <tr>
+ <td>Tester {{ i }}</td>
+ {% if testers_status[i] == "STARTED" %}
+ <td><a href="{{ manager_url+"/stop/" }}{{i}}">
+ {% elif testers_status[i] == "STOPPED"%}
+ <td><a href="{{ manager_url+"/start/" }}{{i}}">
+ {% endif %}
+ {{ testers_status[i] }}</a></td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
</ul>
+ <li><a href="{{ manager_url+"stop/all" }}">Stop all testers</a></li>
+ <hr>
I've done {{ done }} tests of {{ total }} so far.<br>
Here are the available resut files:
<ul id="results">
{% if done > 0 %}
- <li><a href="{{ url_all }}">All (tar.bz2)</a></li>
+ <li><a href="{{ manager_url+"/result/all.tar.bz2" }}">All (tar.bz2)</a></li>
{% endif %}
{% for item in results %}
<li><a href="{{ item.href }}">{{ item.name }}</a></li>
More information about the Erp5-report
mailing list