[Erp5-report] r45236 luke - in /slapos/trunk/util: slapos.tool.monitor/ slapos.tool.monitor...
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Apr 8 12:55:36 CEST 2011
Author: luke
Date: Fri Apr 8 12:55:35 2011
New Revision: 45236
URL: http://svn.erp5.org?rev=45236&view=rev
Log:
- SlapOS developed tools capable to easily SlapOFiy various software
Added:
slapos/trunk/util/slapos.tool.monitor/
slapos/trunk/util/slapos.tool.monitor/CHANGES.txt
slapos/trunk/util/slapos.tool.monitor/README.txt
slapos/trunk/util/slapos.tool.monitor/setup.cfg
slapos/trunk/util/slapos.tool.monitor/setup.py
slapos/trunk/util/slapos.tool.monitor/src/
slapos/trunk/util/slapos.tool.monitor/src/__init__.py
slapos/trunk/util/slapos.tool.monitor/src/slapos/
slapos/trunk/util/slapos.tool.monitor/src/slapos/__init__.py
slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/
slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/__init__.py
slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/
slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/__init__.py
slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/slapmonitor.py
slapos/trunk/util/slapos.tool.nosqltester/
slapos/trunk/util/slapos.tool.nosqltester/CHANGES.txt
slapos/trunk/util/slapos.tool.nosqltester/MANIFEST.in
slapos/trunk/util/slapos.tool.nosqltester/README.txt
slapos/trunk/util/slapos.tool.nosqltester/setup.cfg
slapos/trunk/util/slapos.tool.nosqltester/setup.py
slapos/trunk/util/slapos.tool.nosqltester/src/
slapos/trunk/util/slapos.tool.nosqltester/src/slapos/
slapos/trunk/util/slapos.tool.nosqltester/src/slapos/__init__.py
slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/
slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/__init__.py
slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/nosqltester/
slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/nosqltester/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager/
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/CHANGES.txt
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/MANIFEST.in
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/README.txt
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.cfg
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/
slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py (with props)
slapos/trunk/util/slapos.tool.nosqltester_manager/CHANGES.txt
slapos/trunk/util/slapos.tool.nosqltester_manager/MANIFEST.in
slapos/trunk/util/slapos.tool.nosqltester_manager/README.txt
slapos/trunk/util/slapos.tool.nosqltester_manager/setup.cfg
slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py
slapos/trunk/util/slapos.tool.nosqltester_manager/src/
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/__init__.py
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py (with props)
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/
slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html
slapos/trunk/util/slapos.tool.onetimeupload/
slapos/trunk/util/slapos.tool.onetimeupload/CHANGES.txt
slapos/trunk/util/slapos.tool.onetimeupload/MANIFEST.in
slapos/trunk/util/slapos.tool.onetimeupload/README.txt
slapos/trunk/util/slapos.tool.onetimeupload/setup.cfg
slapos/trunk/util/slapos.tool.onetimeupload/setup.py
slapos/trunk/util/slapos.tool.onetimeupload/src/
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/__init__.py
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/__init__.py
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/__init__.py
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/static/
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/done.html
slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/index.html
Added: slapos/trunk/util/slapos.tool.monitor/CHANGES.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/CHANGES.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/CHANGES.txt (added)
+++ slapos/trunk/util/slapos.tool.monitor/CHANGES.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,35 @@
+0.0.6dev (unreleased)
+---------------------
+ - Used psutil for evaluating cpu time
+ [Davide TAMMARO]
+ - New XML features
+ [Davide TAMMARO]
+ - New class for getting CPU informations
+ [Davide TAMMARO]
+ - New lib used ---> psutil
+ [Davide TAMMARO]
+
+0.0.5 (2010-07-12)
+------------------
+ - Invert - slap_monitor will run by subprocess.
+ [Lukasz Nowak]
+
+0.0.4 (2010-07-12)
+------------------
+ - Removed numpy as not needed.
+ [Lukasz Nowak]
+
+0.0.3 (2010-07-12)
+------------------
+ - Define dependencies.
+ [Lukasz Nowak]
+
+0.0.2 (2010-07-12)
+------------------
+ - Expose entry point accepting command line arguments.
+ [Lukasz Nowak]
+
+0.0.1 (2010-07-05)
+------------------
+ - Initial version.
+ [VILLETTE Charles]
Added: slapos/trunk/util/slapos.tool.monitor/README.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/README.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/README.txt (added)
+++ slapos/trunk/util/slapos.tool.monitor/README.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,5 @@
+slap.monitor
+============
+
+Monitoring for SLAP (Simple Language for Accounting and Provisioning) python library.
+
Added: slapos/trunk/util/slapos.tool.monitor/setup.cfg
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/setup.cfg?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/setup.cfg (added)
+++ slapos/trunk/util/slapos.tool.monitor/setup.cfg [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = .dev
+tag_svn_revision = 1
Added: slapos/trunk/util/slapos.tool.monitor/setup.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/setup.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/setup.py (added)
+++ slapos/trunk/util/slapos.tool.monitor/setup.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,41 @@
+from setuptools import setup, find_packages
+import os
+
+name = "slapos.tool.monitor"
+version = '0.0.6dev'
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+long_description=(
+ read('README.txt')
+ + '\n' +
+ read('CHANGES.txt')
+ )
+
+setup(
+ name = name,
+ version = version,
+ description = "Monitoring for SlapOS provided partitions",
+ long_description=long_description,
+ license = "GPLv3",
+ keywords = "slapos partition monitor",
+ classifiers=[
+ "Programming Language :: Python",
+ ],
+ packages = find_packages('src'),
+ include_package_data = True,
+ package_dir = {'':'src'},
+ namespace_packages = [ 'slapos' ],
+ install_requires = [
+ 'setuptools', # namespaces
+ 'lxml',
+ 'psutil',
+ ],
+ zip_safe=True,
+ entry_points = """
+ [console_scripts]
+ slapmonitor = %(name)s.slapmonitor:run_slapmonitor
+ slapreport = %(name)s.slapmonitor:run_slapreport
+ """ % dict(name=name),
+ )
Added: slapos/trunk/util/slapos.tool.monitor/src/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/src/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/src/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.monitor/src/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: slapos/trunk/util/slapos.tool.monitor/src/slapos/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/src/slapos/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/src/slapos/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.monitor/src/slapos/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,7 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
+
Added: slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,7 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
+
Added: slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/__init__.py?rev=45236&view=auto
==============================================================================
(empty)
Added: slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/slapmonitor.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/slapmonitor.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/slapmonitor.py (added)
+++ slapos/trunk/util/slapos.tool.monitor/src/slapos/tool/monitor/slapmonitor.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,250 @@
+##############################################################################
+#
+# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+import datetime
+import os
+import time
+import resource
+from time import strftime
+import logging
+import sys
+from lxml import etree as ElementTree
+import platform
+import psutil
+from optparse import OptionParser
+import tempfile
+import sqlite3.dbapi2 as sqlite3
+
+#define global variable for log file
+log_file = False
+
+class MonitoringTool(object):
+ """Provide functions to monitor CPU and Memory"""
+ def __init__(self):
+ pass
+
+ def get_cpu_and_memory_usage(self, proc):
+ """Return CPU and Memory usage (percent) and
+ the specific moment used for the measure"""
+ return [proc.get_cpu_percent(), sum(proc.get_cpu_times()), proc.get_memory_percent(), proc.get_memory_info()[0], datetime.datetime.now()]
+
+class GenerateXML(object):
+ """Return a XML file upon request by reading from database"""
+
+ def __init__(self, element_tree, path_database, path_xml):
+ self.element_tree = element_tree
+ self.path_database = path_database
+ self.path_xml = path_xml
+
+ def dump_xml(self):
+ """This func read data from database and through
+ _write_xml_output write result on xml file"""
+
+ consumption_infos = []
+ #This list hold the consuption infos in the following order
+ #[CPU % usage, CPU time usage (seconds), Memory % usage, Memory space usage (byte), date, time]
+
+ conn = sqlite3.connect(self.path_database)
+ cursor = conn.cursor()
+ cursor.execute("SELECT * FROM data")
+ for row in cursor:
+ consumption_infos.append(row)
+
+ consumption_summary = self._eval_consumption_summary (consumption_infos)
+ self._write_xml_output(consumption_summary, self.path_xml)
+ #Once we got infos we delete the table 'data'
+ cursor.execute("DELETE FROM data")
+ conn.commit()
+ cursor.close()
+ conn.close()
+
+ def _eval_consumption_summary(self, consumption_infos):
+ """This function return a resources usage summary, for pricing purpose"""
+ cpu_percentage = []
+ memory_percentage = []
+ memory_space = []
+
+ #The total time that the cpu spent to work on it
+ cpu_time = consumption_infos[-1][1]
+ #start-end time and date
+ start_time = consumption_infos[0][5]
+ end_time = consumption_infos[-1][5]
+ start_date = consumption_infos[0][4]
+ end_date = consumption_infos[-1][4]
+
+ for item in consumption_infos:
+ cpu_percentage.append(item[0])
+ memory_percentage.append(item[2])
+ memory_space.append(item[3])
+
+
+ return [cpu_time, sum(memory_space) / float(len(memory_space)), end_date, end_time, end_time]
+ #return [scipy.mean(cpu_percentage), cpu_time, scipy.mean(memory_percentage),
+ # scipy.mean(memory_space), start_time, end_time, start_date, end_date]
+
+
+
+ def _write_xml_output(self, res_list, storage_path):
+ """This function provide to dump on xml the consumption infos,
+ the res_list contains the following informations:
+
+ [CPU mean %, CPU whole usage (seconds), Memory mean %, Memory mean space usage (byte),
+ start_time, end_time, start_date, end_date]"""
+
+ #XXX- NOTE
+
+ """The res_list has been recently changed, now it contains
+ [CPU whole usage (seconds), Memory mean space usage (byte)]"""
+
+
+ res_list = map(str, res_list)
+
+ cpu_list = ['Cpu consumption',
+ 'Cpu consumption of the partition on %s at %s' % (res_list[2], res_list[3]),
+ res_list[0],
+ ]
+
+ memory_list = ['Memory consumption',
+ 'Memory consumption of the partition on %s at %s' % (res_list[2], res_list[3]),
+ res_list[1],
+ ]
+ root = ElementTree.Element("consumption")
+ #Now we'll add two movement elements, one for cpu
+ tree = self._add_nodes(root, cpu_list )
+ tree.write(storage_path)
+
+ #one for memory
+ tree = self._add_nodes(root, memory_list)
+ tree.write(storage_path)
+
+ def _add_nodes(self, root, single_resource_list):
+
+ child_root = ElementTree.SubElement(root, "movement")
+ #child_root.set ('type', 'Sale Packing List')
+
+ child_data_start_date = ElementTree.SubElement(child_root, "resource")
+ child_data_start_date.text = single_resource_list[0]
+ child_data_end_date = ElementTree.SubElement(child_root, "title")
+ child_data_end_date.text = single_resource_list[1]
+ child_data_end_date = ElementTree.SubElement(child_root, "reference")
+ child_data_end_date.text = ''
+ child_data_end_date = ElementTree.SubElement(child_root, "quantity")
+ child_data_end_date.text = single_resource_list[2]
+ child_data_end_date = ElementTree.SubElement(child_root, "price")
+ child_data_end_date.text = ''
+ child_data_end_date = ElementTree.SubElement(child_root, "VAT")
+ child_data_end_date.text = ''
+ child_data_end_date = ElementTree.SubElement(child_root, "category")
+ child_data_end_date.text = ''
+
+ tree = self.element_tree.ElementTree(root)
+ return tree
+
+
+def parse_opt():
+
+ usage="""usage: slapmonitor [options] PID_FILE_PATH DATABASE_PATH
+Usage: slapreport [options] XML_PATH DATABASE_PATH """
+
+ parser = OptionParser(usage=usage)
+ parser.add_option('-t', '--update_time',type=int, dest='update_time', help='Specify the interval'\
+ '(in seconds) to check resources consumption [default 30 seconds]', default=3)
+ parser.add_option('-l', '--log_file', dest='path_log_file',help='Specify the logfile destination path',
+ metavar='FILE')
+ return parser
+
+class SlapMonitor(object):
+
+ def __init__(self, proc, update_time, path_database):
+ self.proc = proc
+ self.update_time = update_time
+ self.path_database = path_database
+ self.start_monitor()
+
+
+ def start_monitor(self):
+
+ temporary_monitoring = MonitoringTool()
+ #check if the process is alive == None, instead zero value == proc is over
+ while self.proc.pid in psutil.get_pid_list():
+ conn = sqlite3.connect(self.path_database)
+ cursor = conn.cursor()
+ cursor.execute("create table if not exists data (cpu real, cpu_time real, memory real, rss real," \
+ "date text, time text)")
+ try:
+ res_list = temporary_monitoring.get_cpu_and_memory_usage(self.proc)
+ date_catched = "-".join([str(res_list[4].year), str(res_list[4].month), str(res_list[4].day)])
+ time_catched = ":".join([str(res_list[4].hour), str(res_list[4].minute), str(res_list[4].second)])
+ res_list[4] = date_catched
+ res_list.append(time_catched)
+ cursor.execute("insert into data values (?,?,?,?,?,?)" , res_list)
+ conn.commit()
+ cursor.close()
+ conn.close()
+ time.sleep(self.update_time)
+ except IOError:
+ if log_file:
+ logging.info("ERROR : process with pid : %s watched by slap monitor exited too quickly at %s"
+ % (self.proc.pid, strftime("%Y-%m-%d at %H:%m")))
+ sys.exit(1)
+ if log_file:
+ logging.info("EXIT 0: Process terminated normally!")
+ sys.exit(0)
+
+def run_slapmonitor():
+ #This function require the pid file and the database path
+ parser = parse_opt()
+ opts, args = parser.parse_args()
+ if len(args) != 2:
+ parser.error("Incorrect number of arguments, 2 required but "+str(len(args))+" detected" )
+
+ if opts.path_log_file:
+ logging.basicConfig(filename=opts.path_log_file,level=logging.DEBUG)
+ global log_file
+ log_file = True
+
+ fed = open(args[0], 'r')
+ pid_read = fed.read()
+ fed.close()
+ proc = psutil.Process(int(pid_read))
+ SlapMonitor(proc, opts.update_time, args[1])
+
+
+def run_slapreport():
+ #This function require the xml_path and database_path
+ parser = parse_opt()
+ opts, args = parser.parse_args()
+ if len(args) != 2:
+ parser.error("Incorrect number of arguments, 2 required but "+str(len(args))+" detected" )
+
+ if opts.path_log_file:
+ logging.basicConfig(filename=opts.path_log_file,level=logging.DEBUG)
+ global log_file
+ log_file = True
+
+ get_xml_hand = GenerateXML(ElementTree, args[1], args[0])
+ get_xml_hand.dump_xml()
+
Added: slapos/trunk/util/slapos.tool.nosqltester/CHANGES.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/CHANGES.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/CHANGES.txt (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/CHANGES.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,26 @@
+Changelog
+=========
+
+0.0.4 (2011/03/29)
+------------------
+
+ - Correcting setup.py
+ [Guillaume Bottex]
+
+0.0.3 (2011/02/24)
+------------------
+
+ - Fixing mistakes
+ [Guillaume Bottex]
+
+0.0.2 (2011/02/24)
+------------------
+
+ - Fixing mistakes
+ [Guillaume Bottex]
+
+0.0.1dev (2011/02/24)
+---------------------
+
+ - Initial version
+ [Guillaume Bottex]
Added: slapos/trunk/util/slapos.tool.nosqltester/MANIFEST.in
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/MANIFEST.in?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/MANIFEST.in (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/MANIFEST.in [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1 @@
+include CHANGES.txt
Added: slapos/trunk/util/slapos.tool.nosqltester/README.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/README.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/README.txt (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/README.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,2 @@
+slapos.tool.nosqltester
+=======================
Added: slapos/trunk/util/slapos.tool.nosqltester/setup.cfg
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/setup.cfg?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/setup.cfg (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/setup.cfg [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = .dev
+tag_svn_revision = 1
Added: slapos/trunk/util/slapos.tool.nosqltester/setup.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/setup.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/setup.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/setup.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,35 @@
+from setuptools import setup, find_packages
+import os
+
+name = "slapos.tool.nosqltester"
+version = '0.0.4'
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+long_description=( read('README.txt')
+ + '\n' +
+ read('CHANGES.txt')
+ )
+
+setup(
+ name = name,
+ version = version,
+ author = 'Guillaume Bottex, for Nexedi',
+ author_email = 'gbottex at tiolive.com',
+ description = "NoSQL systems tester",
+ license = "GPL",
+ keywords = "nosql test",
+ classifiers=[
+ "Framework :: Buildout",
+ "Programming Language :: Python",
+ ],
+ packages = find_packages('src'),
+ package_dir = {'':'src'},
+ install_requires = ['Flask'],
+ namespace_packages = ['slapos', 'slapos.tool'],
+ entry_points = """
+ [console_scripts]
+ nosqltester = %s:main
+ """ % name,
+ )
Added: slapos/trunk/util/slapos.tool.nosqltester/src/slapos/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/src/slapos/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/src/slapos/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/src/slapos/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/nosqltester/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/nosqltester/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/nosqltester/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester/src/slapos/tool/nosqltester/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,137 @@
+#!/usr/bin/python
+
+##############################################################################
+#
+# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from flask import Flask, abort, request, render_template
+import sys, os, getopt
+import urllib, urllib2
+
+app = Flask(__name__)
+
+params = {
+ # Address and port of the tester
+ 'address':"127.0.0.1",
+ 'port':5000,
+ # Address and port of the program
+ # who wants to download the report
+ 'host_address':"",
+ 'host_port':5000,
+ 'num':1000,
+ 'report_path':"/var/log",
+ 'binary':"memstrike"}
+
+ at app.route('/result/<report>')
+def download(report):
+ if os.path.exists(os.path.join(params['report_path'],report)):
+ f = open(os.path.join(params['report_path'], report), "rb")
+ data = f.read()
+ f.close()
+ return data
+ else:
+ return None
+
+ at app.route('/start', methods=['POST'])
+def start():
+ if request.method == 'POST' and \
+ 'action' in request.form and \
+ request.form['action'] == 'GO':
+ pid = os.fork()
+ if pid ==0:
+ result = launch_tester()
+ if result ==0:
+ send_result_availability_notification()
+ os._exit(os.EX_OK)
+ return ""
+
+def send_result_availability_notification():
+ values = {}
+ values['filename'] = str(os.getpid())+".log"
+ values['url'] = "http://"+params['address']+":"+str(params['port'])+"/result/report.log" #+values['filename']
+ data = urllib.urlencode(values)
+ try:
+ f = urllib2.urlopen("http://"+params['host_address']+":"+str(params['host_port'])+"/report", data)
+ f.close()
+ except:
+ # print sys.exc_info()
+ pass
+
+def execute(command):
+ result = os.WEXITSTATUS(os.system(command))
+ if result == 127:
+ raise ValueError, 'Command not found: %r' % (command, )
+ return result
+
+def launch_tester():
+ command = params['binary']
+ command += " > " + os.path.join(params['report_path'],"report.log")
+ return execute(command)
+
+def usage():
+ pass
+
+def main(argv=None):
+
+ if argv == None:
+ argv = sys.argv[1:]
+
+ try:
+ opts, args = getopt.getopt(argv, "h:q:a:p:n:r:b:", \
+ ["host=", "host-port=", "address=", "port=", "request-number=", "report-path=","binary="])
+ except getopt.GetoptError:
+ usage()
+ sys.exit()
+
+ for opt, arg in opts:
+ if opt in ("-h", "--host"):
+ params['host_address'] = arg
+ elif opt in ("-q", "--host-port"):
+ params['host_port'] = int(arg)
+ elif opt in ("-a", "--address"):
+ params['address'] = arg
+ elif opt in ("-p", "--port"):
+ params['port'] = int(arg)
+ elif opt in ("-n", "--request-number"):
+ params['num'] = int(arg)
+ elif opt in ("-r", "--report-path"):
+ params['report_path'] = arg
+ elif opt in ("-b", "--binary"):
+ params['binary'] = arg
+
+ if params['host_address'] == params['address'] and \
+ params['host_port'] == params['port']:
+ print "Host and client could not have the same address and the same port"
+ sys.exit()
+ elif params['host_address'] == "":
+ print "You must at least give the host address"
+ sys.exit()
+
+ app.run(host=params['address'], port=params['port'])
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
Added: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/CHANGES.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/CHANGES.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/CHANGES.txt (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/CHANGES.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,8 @@
+Changelog
+=========
+
+0.0.1dev (2011/03/29)
+---------------------
+
+ - Initial version
+ [Guillaume Bottex]
Added: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/MANIFEST.in
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/MANIFEST.in?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/MANIFEST.in (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/MANIFEST.in [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1 @@
+include CHANGES.txt
\ No newline at end of file
Added: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/README.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/README.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/README.txt (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/README.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,2 @@
+slapos.tool.nosqltester_manager.kumo
+====================================
Added: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.cfg
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.cfg?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.cfg (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.cfg [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = .dev
+tag_svn_revision = 1
Added: 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=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/setup.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,36 @@
+from setuptools import setup, find_packages
+import os
+
+name = "slapos.tool.nosqltester_manager.kumo"
+version = '0.0.1'
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+long_description=( read('README.txt')
+ + '\n' +
+ read('CHANGES.txt')
+ )
+
+setup(
+ name = name,
+ version = version,
+ author = 'Guillaume Bottex, for Nexedi',
+ author_email = 'gbottex at tiolive.com',
+ description = "Manager for Kumofs tester",
+ license = "GPL",
+ keywords = "kumofs test manager scheduler",
+ classifiers=[
+ "Framework :: Buildout",
+ "Programming Language :: Python",
+ ],
+ packages = find_packages('src'),
+ include_package_data = True,
+ package_dir = {'':'src'},
+ install_requires = ['Flask', 'slapos.tool.nosqltester_manager'],
+ namespace_packages = ['slapos', 'slapos.tool', 'slapos.tool.nosqltester_manager'],
+ entry_points = """
+ [slapos.tool.nosqltester_manager.plugin]
+ kumo=%s:KumoTesterManager
+ """ % name,
+ )
Added: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: 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=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,122 @@
+#!/usr/bin/python
+
+##############################################################################
+#
+# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+import sys, logging, csv, re
+from slapos.tool.nosqltester_manager import NoSQLTesterManager
+
+class KumoTesterManager(NoSQLTesterManager):
+
+ def __init__(self, params):
+ NoSQLTesterManager.__init__(self, params)
+ # self.software_release_type = 'kumo'
+ self.host_address = params['address']
+
+ argv = sys.argv[16:]
+
+ if argv.__len__() < 1:
+ self.nb_thread = 1
+ else:
+ self.nb_thread = argv[0]
+
+ if argv.__len__() < 2:
+ self.nb_request = 1000
+ else:
+ self.nb_request = argv[1]
+
+ def _kumo_init(self):
+ try:
+ self.logger.debug("Kumo manager")
+ manager_computer_partition = self.computer_partition.request(self.software_release_url, 'kumo_manager', 'kumo_manager')
+
+ self.logger.debug("Kumo server 1")
+ self.computer_partition.request(self.software_release_url, 'kumo_server', 'kumo_server'+str(self.server_count),
+ partition_parameter_kw={'manager_address':manager_computer_partition.getConnectionParameter('address'),
+ 'manager_port':manager_computer_partition.getConnectionParameter('port')})
+
+ self.logger.debug("Kumo gateway")
+ gateway_computer_partition = self.computer_partition.request(self.software_release_url, 'kumo_gateway', 'kumo_gateway',
+ partition_parameter_kw={'manager_address':manager_computer_partition.getConnectionParameter('address'),
+ 'manager_port':manager_computer_partition.getConnectionParameter('port')})
+
+ tester_computer_partition = []
+ for i in range(0, self.max_tester):
+ """
+ tester_computer_partition.append(self.computer_partition.request(self.software_release_url, 'nosqltester', 'nosqltester'+str(i),
+ partition_parameter_kw={'gateway_address':gateway_computer_partition.getConnectionParameter('gateway_address'),
+ 'gateway_port':gateway_computer_partition.getConnectionParameter('gateway_port'),
+ 'host_address':params['address']}))
+ """
+ self.logger.debug("Kumo tester "+str(i))
+ tester_computer_partition.append(self.computer_partition.request(self.software_release_url, 'kumo_tester', 'kumo_tester'+str(i),
+ partition_parameter_kw={'gateway_address':gateway_computer_partition.getConnectionParameter('address'),
+ 'gateway_port':gateway_computer_partition.getConnectionParameter('port'),
+ 'host_address':self.host_address,
+ 'nb_thread':self.nb_thread,
+ 'nb_request':self.nb_request}))
+ 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("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:
+ self.logger.debug(str(sys.exc_info()))
+ return False
+
+ def _add_kumo_server_node(self):
+ try:
+ self.logger.debug("Adding a Kumo server node")
+ partition = self.computer_partition.request(self.software_release_url, 'kumo_server', 'kumo_server'+str(self.server_count),
+ partition_parameter_kw={'manager_address':self.manager_computer_partition.getConnectionParameter('address'),
+ 'manager_port':self.manager_computer_partition.getConnectionParameter('port')})
+ # line made to crash the function call until we call slapgrid
+ partition.getConnectionParameter('address')
+ return True
+ except:
+ self.logger.debug(str(sys.exc_info()))
+ return False
+
+ def writeCSV(self, inputnames, outputname):
+ output = csv.writer(open(outputname, 'wb'), delimiter=';', quotechar='|', quoting=csv.QUOTE_MINIMAL)
+ # Header
+ output.writerow(['set sec', 'set MB', 'set Mbps', 'set req/sec', 'set usec/req',
+ 'get sec', 'get MB', 'get Mbps', 'get req/sec', 'get usec/req'])
+ for inputname in inputnames:
+ l = []
+ f = open(inputname, "r")
+ lines = f.readlines()
+ f.close()
+ for i in range(8, lines.__len__()):
+ if i != 13 and i != 14:
+ l.append(re.findall(r'\d+\.\d+|\d+',lines[i])[0].replace('.', ','))
+ output.writerow(l)
+
Propchange: slapos/trunk/util/slapos.tool.nosqltester_manager.kumo/src/slapos/tool/nosqltester_manager/kumo/__init__.py
------------------------------------------------------------------------------
svn:executable = *
Added: slapos/trunk/util/slapos.tool.nosqltester_manager/CHANGES.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/CHANGES.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/CHANGES.txt (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/CHANGES.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,63 @@
+Changelog
+=========
+
+0.0.10 (2011/03/29)
+-------------------
+
+ - Now works with plugins
+ - New parameter to set the maximum number of servers and testers
+ [Guillaume Bottex]
+
+0.0.9 (2011/03/09)
+------------------
+
+ - Logging debug information to a log file
+ [Guillaume Bottex]
+
+0.0.8 (2011/03/07)
+------------------
+
+ - Adding debugging info to stderr
+ [Guillaume Bottex]
+
+0.0.7 (2011/03/04)
+------------------
+
+ - Showing more information on the web ui
+ [Guillaume Bottex]
+
+0.0.6 (2011/03/03)
+------------------
+
+ - Adapting request calls due to changes in slap.recipe.nosqltestbed
+ [Guillaume Bottex]
+
+0.0.5 (2011/03/01)
+------------------
+
+ - Fixing setup.py to correctly intall the template files
+ [Guillaume Bottex]
+
+0.0.4 (2011/02/28)
+------------------
+
+ - Adding web user interface
+ [Guillaume Bottex]
+
+0.0.3 (2011/02/24)
+------------------
+
+ - Fixing mistakes
+ [Guillaume Bottex]
+
+0.0.2 (2011/02/24)
+------------------
+
+ - Fixing mistakes
+ [Guillaume Bottex]
+
+0.0.1dev (2011/02/24)
+---------------------
+
+ - Initial version
+ [Guillaume Bottex]
Added: slapos/trunk/util/slapos.tool.nosqltester_manager/MANIFEST.in
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/MANIFEST.in?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/MANIFEST.in (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/MANIFEST.in [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,2 @@
+include CHANGES.txt
+recursive-include src/slapos/tool/nosqltester_manager/templates *.html
Added: slapos/trunk/util/slapos.tool.nosqltester_manager/README.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/README.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/README.txt (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/README.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,2 @@
+slapos.tool.nosqltester_manager
+===============================
Added: slapos/trunk/util/slapos.tool.nosqltester_manager/setup.cfg
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/setup.cfg?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/setup.cfg (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/setup.cfg [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = .dev
+tag_svn_revision = 1
Added: slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,36 @@
+from setuptools import setup, find_packages
+import os
+
+name = "slapos.tool.nosqltester_manager"
+version = '0.0.10'
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+long_description=( read('README.txt')
+ + '\n' +
+ read('CHANGES.txt')
+ )
+
+setup(
+ name = name,
+ version = version,
+ author = 'Guillaume Bottex, for Nexedi',
+ author_email = 'gbottex at tiolive.com',
+ description = "Manager for NoSQL systems tester",
+ license = "GPL",
+ keywords = "nosql test manager scheduler",
+ classifiers=[
+ "Framework :: Buildout",
+ "Programming Language :: Python",
+ ],
+ packages = find_packages('src'),
+ include_package_data = True,
+ package_dir = {'':'src'},
+ install_requires = ['Flask'],
+ namespace_packages = ['slapos', 'slapos.tool'],
+ entry_points = """
+ [console_scripts]
+ nosqltester_manager = %s:main
+ """ % name,
+ )
Added: slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: 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=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,281 @@
+#!/usr/bin/python
+
+##############################################################################
+#
+# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from flask import Flask, abort, request, render_template, send_file
+from pkg_resources import iter_entry_points
+import sys, os, getopt, tarfile, tempfile
+import logging, logging.handlers
+import urllib, urllib2
+import time
+from slapos import slap
+
+class NoSQLTesterManager:
+
+ def __init__(self, params):
+ 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')
+ self.tester_urls = []
+ self.todo = 0
+ self.reports = []
+ self.max_server = int(params['nb_server_max'])
+ self.max_tester = int(params['nb_tester_max'])
+
+ self.software_release_url = params['software_release_url']
+ self.server_url = params['server_url']
+ self.key_file = params['key_file']
+ self.cert_file = params['cert_file']
+ self.computer_id = params['computer_id']
+ self.computer_partition_id = params['computer_partition_id']
+
+ self.slap = slap.slap()
+ self.slap.initializeConnection(self.server_url, self.key_file, self.cert_file)
+ self.computer_partition = self.slap.registerComputerPartition(self.computer_id, self.computer_partition_id)
+ self.server_count = 1
+ self.manager_computer_partition = None
+ self.write_pipe = -1
+ self.software_release_type = params['plugin_name']
+
+ # Logger initialization
+ self.logger = logging.getLogger("slap.tool.nosqltester_manager")
+ if params['debug']:
+ self.logger.setLevel(logging.DEBUG)
+ file_handler = logging.FileHandler(os.path.join(self.log_directory, "nosqltester_manager.log"))
+ file_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
+ self.logger.addHandler(file_handler)
+
+ def default_init(self):
+ if self.software_release_type == None:
+ pass
+ elif "_%s_init" % self.software_release_type in dir(self) and \
+ callable(getattr(self, "_%s_init" % self.software_release_type)):
+ while not getattr(self, "_%s_init" % self.software_release_type)():
+ time.sleep(1)
+
+ def add_server_node(self):
+ if self.software_release_type == None:
+ pass
+ elif "_add_%s_server_node" % self.software_release_type in dir(self) and \
+ callable(getattr(self, "_add_%s_server_node" % self.software_release_type)):
+ while not getattr(self, "_add_%s_server_node" % self.software_release_type)():
+ time.sleep(1)
+
+ def setWritePipe(self, write_pipe):
+ self.write_pipe = write_pipe
+
+ def get(self, url):
+ f = urllib2.urlopen(url)
+ f.close()
+
+ def post(self, url, **values):
+ try:
+ data = urllib.urlencode(values)
+ f = urllib2.urlopen(url, data)
+ f.close()
+ except:
+ return False
+ return True
+
+ def do_scheduling(self):
+ for url in self.tester_urls:
+ while not self.post(url, action='GO'):
+ time.sleep(1)
+
+ def waitForReports(self, **host_parameter_kw):
+ if 'host' not in host_parameter_kw or \
+ 'port' not in host_parameter_kw:
+ pass
+
+ app = Flask(__name__)
+
+ @app.route('/')
+ def ui():
+ web_page = None
+ url_all = 'http://'+"[%s]" % host_parameter_kw['host']+':5000/result/all.tar.bz2'
+ try:
+ results = []
+
+ for f in sorted(os.listdir(self.log_directory)):
+ s = os.path.split(f)[1]
+ # if s.find("report") == 0:
+ item = {}
+ item['name'] = s
+ 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)
+ except:
+ web_page = str(sys.exc_info())
+
+ return web_page
+
+ @app.route('/result/<report>')
+ def getResult(report):
+ try:
+ if report == "all.tar.bz2":
+ tmp = tempfile.NamedTemporaryFile(dir=self.tmp_directory)
+ 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)
+ tmp.close()
+ return tar_file
+ elif os.path.exists(os.path.join(self.log_directory, report)):
+ return send_file(os.path.join(self.log_directory, report))
+ else:
+ return None
+ except:
+ return sys.exc_info()
+
+ @app.route('/report', methods=['POST'])
+ def receiveReport():
+ if request.method == 'POST' and \
+ 'url' in request.form and \
+ 'filename' in request.form:
+ try:
+ f = urllib2.urlopen(request.form['url'])
+ data = f.read()
+ f.close()
+ 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
+ return ""
+
+ app.run(host=host_parameter_kw['host'], port=host_parameter_kw['port'])
+
+ def writeCSV(self, inputnames, outputname):
+ pass
+
+
+def go(params):
+ 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)
+
+ scheduler.default_init()
+
+ r, w = os.pipe()
+ pid = os.fork()
+ if pid == 0:
+ s = ""
+ while s != "END":
+ time.sleep(1)
+ scheduler.do_scheduling()
+ s = os.read(r, 255)
+ time.sleep(1)
+ os.close(r)
+ os._exit(os.EX_OK)
+ else:
+ scheduler.setWritePipe(w)
+ scheduler.waitForReports(host=params['address'], port=params['port'])
+
+def usage():
+ pass
+
+def main(argv=None):
+
+ # Default values
+ params = {
+ 'address':"127.0.0.1",
+ 'port':5000,
+ 'report_path':"/var/log",
+ 'server_url':None,
+ 'nb_server_max':3,
+ 'nb_tester_max':3,
+ 'key_file':None,
+ 'cert_file':None,
+ 'computer_id':None,
+ 'computer_partition_id':None,
+ 'plugin_name':'kumo',
+ # 'debug':False}
+ 'debug':True}
+
+ 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="])
+ except getopt.GetoptError:
+ usage()
+ sys.exit()
+
+ for opt, arg in opts:
+ if opt in ("-a", "--address"):
+ params['address'] = arg
+ elif opt in ("-d", "--debug"):
+ params['debug'] = True
+ elif opt in ("-p", "--port"):
+ params['port'] = int(arg)
+ elif opt in ("-r", "--report-path"):
+ params['report_path'] = arg
+ elif opt in ("-s", "--nb-server-max"):
+ params['nb_server_max'] = arg
+ elif opt in ("-t", "--nb-tester-max"):
+ params['nb_tester_max'] = arg
+
+ if args.__len__() < 7:
+ usage()
+ sys.exit()
+
+ params['software_release_url'] = args[0]
+ params['server_url'] = args[1]
+ params['key_file'] = args[2]
+ params['cert_file'] = args[3]
+ params['computer_id'] = args[4]
+ params['computer_partition_id'] = args[5]
+ params['plugin_name'] = args[6]
+
+ go(params)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
+
Propchange: slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py
------------------------------------------------------------------------------
svn:executable = *
Added: 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=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html (added)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/templates/ui.html [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<html lang="en">
+<head>
+ <title>No SQL tester</title>
+</head>
+<body>
+ Testers addresses:<br>
+ <ul id="testers_urls">
+ {% for url in tester_urls %}
+ <li>{{ url }}</li>
+ {% endfor %}
+ </ul>
+ 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>
+ {% endif %}
+ {% for item in results %}
+ <li><a href="{{ item.href }}">{{ item.name }}</a></li>
+ {% endfor %}
+ </ul>
+</body>
+</html>
+
Added: slapos/trunk/util/slapos.tool.onetimeupload/CHANGES.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/CHANGES.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/CHANGES.txt (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/CHANGES.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,8 @@
+0.0.1 (2010-11-09)
+------------------
+
+ - Add logging facility
+ - Add a secret key to validate upload
+ - Initial version.
+ [Romain Courteaud]
+
Added: slapos/trunk/util/slapos.tool.onetimeupload/MANIFEST.in
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/MANIFEST.in?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/MANIFEST.in (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/MANIFEST.in [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,3 @@
+include CHANGES.txt
+recursive-include src/slapos/tool/onetimeupload/templates *.html
+recursive-include src/slapos/tool/onetimeupload/static *
Added: slapos/trunk/util/slapos.tool.onetimeupload/README.txt
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/README.txt?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/README.txt (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/README.txt [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,5 @@
+onetimeupload
+=============
+
+onetimeupload is an HTTP application which only accepts one file to be
+uploaded.
Added: slapos/trunk/util/slapos.tool.onetimeupload/setup.cfg
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/setup.cfg?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/setup.cfg (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/setup.cfg [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = .dev
+tag_svn_revision = 1
Added: slapos/trunk/util/slapos.tool.onetimeupload/setup.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/setup.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/setup.py (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/setup.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,41 @@
+from setuptools import setup, find_packages
+import os
+
+name = "slapos.tool.onetimeupload"
+version = '0.0.1'
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+long_description=(
+ read('README.txt')
+ + '\n' +
+ read('CHANGES.txt')
+ )
+
+setup(
+ name = name,
+ version = version,
+ description = "onetimeupload -- tools to upload a file",
+ long_description=long_description,
+ license = "GPLv3",
+ keywords = "upload web",
+ classifiers=[
+ "Programming Language :: Python",
+ ],
+ packages = find_packages('src'),
+ include_package_data = True,
+ package_dir = {'':'src'},
+ namespace_packages = [ 'slapos', 'slapos.tool' ],
+ install_requires = [
+ 'setuptools', # namespaces
+ 'Flask',
+ ],
+ url='https://svn.erp5.org/repos/vifib/trunk/utils/slapos.tool.onetimeupload/',
+ zip_safe=False,
+ entry_points = """
+ [console_scripts]
+ onetimeupload = slapos.tool.onetimeupload:main
+ """,
+ )
+
Added: slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,7 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
+
Added: slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/__init__.py?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/__init__.py (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/__init__.py [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,125 @@
+##############################################################################
+#
+# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+import os
+import sys
+from flask import Flask, request, redirect
+from optparse import OptionParser, Option
+import logging
+import logging.handlers
+
+
+class Parser(OptionParser):
+ """
+ Parse all arguments.
+ """
+ def __init__(self, usage=None, version=None):
+ """
+ Initialize all options possibles.
+ """
+ OptionParser.__init__(self, usage=usage, version=version,
+ option_list=[
+ Option("-l", "--log_file",
+ help="The path of the log file",
+ type=str,
+ dest="log_file_path"),
+ ])
+
+
+ def check_args(self):
+ """
+ Check arguments
+ """
+ (options, args) = self.parse_args()
+ if len(args) != 4:
+ self.error("Incorrect number of arguments")
+ host, port, upload_file, key = args
+
+ upload_file = os.path.abspath(upload_file)
+
+ return options, host, port, upload_file, key
+
+class Config:
+ def setConfig(self, option_dict, host, port, upload_file, key):
+ """
+ Set options given by parameters.
+ """
+ # Set options parameters
+ for option, value in option_dict.__dict__.items():
+ setattr(self, option, value)
+ self.host = host
+ self.port = int(port)
+ self.upload_file = upload_file
+ self.key = key
+
+def run(config):
+
+ app = Flask(__name__)
+
+ if config.log_file_path is not None:
+ file_handler = logging.handlers.RotatingFileHandler(
+ config.log_file_path, maxBytes=500000, backupCount=5)
+
+ file_handler.setLevel(logging.WARNING)
+
+ app.logger.addHandler(file_handler)
+ logging.getLogger('werkzeug').addHandler(file_handler)
+
+ @app.route('/', methods=['GET', 'POST'])
+ def upload_file():
+ if os.path.exists(config.upload_file):
+ template = app.open_resource('templates/done.html')
+ return template.read()
+ else:
+ if request.method == 'POST':
+ file = request.files['file']
+ key = "%s" % request.form.get('key')
+ if file and key:
+ if key == config.key:
+ file.save(config.upload_file)
+ return redirect('/')
+ template = app.open_resource('templates/index.html')
+ return template.read()
+
+ app.run(host=config.host, port=config.port, ssl_context='adhoc')
+
+def main():
+ "Run default configuration."
+ usage = "usage: onetimeupload [options] HOST PORT UPLOAD_FILE KEY"
+
+ try:
+ # Parse arguments
+ config = Config()
+ config.setConfig(*Parser(usage=usage).check_args())
+
+ run(config)
+ return_code = 0
+ except SystemExit, err:
+ # Catch exception raise by optparse
+ return_code = err
+
+ sys.exit(return_code)
+
Added: slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/done.html
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/done.html?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/done.html (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/done.html [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,3 @@
+<!doctype html>
+<title>File Uploaded</title>
+<h1>File Uploaded</h1>
Added: slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/index.html
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/index.html?rev=45236&view=auto
==============================================================================
--- slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/index.html (added)
+++ slapos/trunk/util/slapos.tool.onetimeupload/src/slapos/tool/onetimeupload/templates/index.html [utf8] Fri Apr 8 12:55:35 2011
@@ -0,0 +1,10 @@
+<!doctype html>
+<title>Upload new File</title>
+<h1>Upload new File</h1>
+<form action="" method=post enctype=multipart/form-data>
+ <p>
+ <input type=file name=file><br/>
+ Secret Key <input type=text name=key><br/>
+ <input type=submit value=Upload>
+ </p>
+</form>
More information about the Erp5-report
mailing list