[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