[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