[Erp5-report] r36308 cedric.dsm - in /erp5/trunk/utils/erp5.recipe.memcachedserver: ./ src/...
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Jun 14 15:10:47 CEST 2010
Author: cedric.dsm
Date: Mon Jun 14 15:10:44 2010
New Revision: 36308
URL: http://svn.erp5.org?rev=36308&view=rev
Log:
Adding memcachedserver egg for memcached-instance buildout
Added:
erp5/trunk/utils/erp5.recipe.memcachedserver/
erp5/trunk/utils/erp5.recipe.memcachedserver/CHANGES.txt
erp5/trunk/utils/erp5.recipe.memcachedserver/README.txt
erp5/trunk/utils/erp5.recipe.memcachedserver/setup.py
erp5/trunk/utils/erp5.recipe.memcachedserver/src/
erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/
erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/__init__.py
erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/
erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/__init__.py
erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/
erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/__init__.py
erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/ctl.py
Added: erp5/trunk/utils/erp5.recipe.memcachedserver/CHANGES.txt
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.memcachedserver/CHANGES.txt?rev=36308&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.recipe.memcachedserver/CHANGES.txt (added)
+++ erp5/trunk/utils/erp5.recipe.memcachedserver/CHANGES.txt [utf8] Mon Jun 14 15:10:44 2010
@@ -0,0 +1,9 @@
+Changelog
+=========
+
+0.0.1 (2010-06-11)
+----------------
+
+- Initial version
+ [Cedric de Saint Martin]
+
Added: erp5/trunk/utils/erp5.recipe.memcachedserver/README.txt
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.memcachedserver/README.txt?rev=36308&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.recipe.memcachedserver/README.txt (added)
+++ erp5/trunk/utils/erp5.recipe.memcachedserver/README.txt [utf8] Mon Jun 14 15:10:44 2010
@@ -0,0 +1,54 @@
+Introduction
+============
+
+This recipe generates a new daemon setup for Memcached, and allows to have
+multiple Memcached daemons running in the same machine. This does not compile
+new Memcached Software but only reuse some existing one.
+
+Example
+=======
+
+You can use it with a part like this :
+
+[buildout]
+parts = memcached-instance
+
+[memcached-instance]
+depends =
+ ${create-directories:command}
+recipe = erp5.recipe.memcachedserver
+
+memcached_software_bin =
+ ${software_definition:software_home}/parts/memcached/bin
+memcached_bin_folder = ${buildout:data-bin-directory}
+memcached_conf_file = ${buildout:etc-directory}/memcached.conf
+
+# Configuration goes here
+# -p
+memcached_tcp_port = 11211
+# -U
+memcached_udp_port = 11211
+# -l
+memcached_host = 127.0.0.1
+# -m
+memcached_memory_size = 64
+# -c
+memcached_simultaneous_connections = 1024
+# -u
+memcached_user = erp5
+# -d
+memcached_run_as_daemon = true
+# -P
+memcached_pid_file = /var/run/memcached.pid
+# -f
+memcached_factor = 1.25
+# -n
+memcached_key_size = 48
+# -t
+memcached_threads = 4
+
+Note
+=======
+Every Memcached options used here are optional. If an option is not specified
+int he buildout, memcached will use its default value.
+See man memcached for more information about these options.
\ No newline at end of file
Added: erp5/trunk/utils/erp5.recipe.memcachedserver/setup.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.memcachedserver/setup.py?rev=36308&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.recipe.memcachedserver/setup.py (added)
+++ erp5/trunk/utils/erp5.recipe.memcachedserver/setup.py [utf8] Mon Jun 14 15:10:44 2010
@@ -0,0 +1,36 @@
+from setuptools import setup, find_packages
+import os
+
+name = "erp5.recipe.memcachedserver"
+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 = 'de Saint Martin Cedric, for Nexedi',
+ author_email = 'cedric.dsm at tiolive.com',
+ description =
+ "zc.buildout recipe that creates an server of an installed memcached",
+ long_description = long_description,
+ license = "ZPL 2.1",
+ keywords = "memcached server buildout",
+ classifiers = [
+ "License :: OSI Approved :: Zope Public License",
+ "Framework :: Buildout",
+ ],
+
+ package_dir = {'': 'src'},
+ packages = find_packages('src'),
+ namespace_packages = ['erp5', 'erp5.recipe'],
+ include_package_data = True,
+ install_requires = ['setuptools', 'zc.recipe.egg'],
+ entry_points = {'zc.buildout': ['default = %s:Recipe' % name]},
+ )
Added: erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/__init__.py?rev=36308&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/__init__.py (added)
+++ erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/__init__.py [utf8] Mon Jun 14 15:10:44 2010
@@ -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: erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/__init__.py?rev=36308&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/__init__.py (added)
+++ erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/__init__.py [utf8] Mon Jun 14 15:10:44 2010
@@ -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: erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/__init__.py?rev=36308&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/__init__.py (added)
+++ erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/__init__.py [utf8] Mon Jun 14 15:10:44 2010
@@ -0,0 +1,118 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+# Copyright (c) 2006-2008 Zope Corporation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+import os
+from string import Template
+import logging
+import zc.buildout
+import zc.buildout.easy_install
+import zc.recipe.egg
+import ConfigParser
+
+class WithMinusTemplate(Template):
+ idpattern = '[_a-z][-_a-z0-9]*'
+
+class Recipe(object):
+ def __init__(self, buildout, name, options):
+ self.buildout, self.options, self.name = buildout, options, name
+ self.egg = zc.recipe.egg.Egg(buildout, options['recipe'], options)
+ self.logger=logging.getLogger(self.name)
+
+
+ def install_script(self, script_name):
+ """ Create default scripts
+ """
+ self.logger.info('Installing memcached wrapper script...')
+ options = self.options
+ memcached_software_bin = options.get("memcached_software_bin")
+ memcached_conf_file = options.get("memcached_conf_file")
+ # Warning : if python2.4 is not installed with buildout you will get a
+ # "ValueError: too many values to unpack" error.
+ # To avoid this, make sure python2.4 is installed by buildout
+ # (bin/buildout install python2.4)
+ # See https://bugs.launchpad.net/zc.buildout/+bug/421833 -
+ requirements, ws = self.egg.working_set(['erp5.recipe.memcachedserver'])
+ zc.buildout.easy_install.scripts(
+ [(script_name,'erp5.recipe.memcachedserver.ctl', 'main')],
+ ws, options['executable'], options.get("memcached_bin_folder"),
+ arguments = ("\n '%s/%s' ,"
+ "\n '%s' " % (memcached_software_bin,
+ script_name,
+ memcached_conf_file)))
+
+ def build_configuration_file(self):
+ config_file_location = self.options.get('memcached_conf_file')
+ tcp_port = self.options.get('memcached_tcp_port')
+ udp_port = self.options.get('memcached_udp_port')
+ host = self.options.get('memcached_host')
+ memory_size = self.options.get('memcached_memory_size')
+ simultaneous_connections = self.options.get(
+ 'memcached_simultaneous_connections')
+ user = self.options.get('memcached_user')
+ run_as_daemon = self.options.get('memcached_run_as_daemon')
+ pid_file = self.options.get('memcached_pid_file')
+ factor = self.options.get('memcached_factor')
+ key_size = self.options.get('memcached_key_size')
+ threads = self.options.get('memcached_threads')
+
+ # Checks configuration directory existence. If not, creates it
+ confpath = os.path.dirname(config_file_location)
+ if not os.path.isdir(confpath):
+ os.makedirs(confpath)
+
+ # Creates config file
+ self.logger.info('Creating memcached config file...')
+ config = ConfigParser.SafeConfigParser()
+ config.add_section('memcached')
+ if tcp_port:
+ config.set('memcached', 'tcp_port', tcp_port)
+ if udp_port:
+ config.set('memcached', 'udp_port', udp_port)
+ if host:
+ config.set('memcached', 'host', host)
+ if memory_size:
+ config.set('memcached', 'memory_size', memory_size)
+ if simultaneous_connections:
+ config.set('memcached', 'simultaneous_connections',
+ simultaneous_connections)
+ if user:
+ config.set('memcached', 'user', user)
+ if run_as_daemon:
+ config.set('memcached', 'run_as_daemon', run_as_daemon)
+ if pid_file:
+ config.set('memcached', 'pid_file', pid_file)
+ if factor:
+ config.set('memcached', 'factor', factor)
+ if key_size:
+ config.set('memcached', 'key_size', key_size)
+ if threads:
+ config.set('memcached', 'threads', threads)
+
+ try:
+ configfile = open(config_file_location, 'wb')
+ config.write(configfile)
+ configfile.close()
+ except IOError:
+ self.logger.error('Error writing memcached config file : %s',
+ config_file_location)
+ raise zc.buildout.UserError('Error writing memcached config file...')
+
+
+ def install(self):
+ self.build_configuration_file()
+ self.install_script('memcached')
+ return []
+
+ update = install
Added: erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/ctl.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/ctl.py?rev=36308&view=auto
==============================================================================
--- erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/ctl.py (added)
+++ erp5/trunk/utils/erp5.recipe.memcachedserver/src/erp5/recipe/memcachedserver/ctl.py [utf8] Mon Jun 14 15:10:44 2010
@@ -0,0 +1,95 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+# Copyright (c) 2006-2008 Zope Corporation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+#
+# Draft script to wrapper memcached programs calls.
+# This script can be improved to provide more features
+# in future.
+#
+
+from subprocess import call
+import ConfigParser
+
+def main(popenarg, conffile):
+ config = ConfigParser.SafeConfigParser()
+ config.read(conffile)
+
+ args = []
+
+ try:
+ tcp_port = config.get('memcached', 'tcp_port')
+ args.extend(['-p%s' % tcp_port])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ udp_port = config.get('memcached', 'udp_port')
+ args.extend(['-U%s' % udp_port])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ host = config.get('memcached', 'host')
+ args.extend(['-l%s' % host])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ memory_size = config.get('memcached', 'memory_size')
+ args.extend(['-m%s' % memory_size])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ simultaneous_connections = config.get('memcached',
+ 'simultaneous_connections')
+ args.extend(['-c%s' % simultaneous_connections])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ user = config.get('memcached', 'user')
+ args.extend(['-u%s' % user])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ config.get('memcached', 'run_as_daemon')
+ args.extend(['-d'])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ pid_file = config.get('memcached', 'pid_file')
+ args.extend(['-P%s' % pid_file])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ factor = config.get('memcached', 'factor')
+ args.extend(['-f%s' % factor])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ key_size = config.get('memcached', 'key_size')
+ args.extend(['-n%s' % key_size])
+ except ConfigParser.NoOptionError:
+ pass
+ try:
+ threads = config.get('memcached', 'threads')
+ args.extend(['-t%s' % threads])
+ except ConfigParser.NoOptionError:
+ pass
+
+ command = [popenarg]
+ command.extend(args)
+ print 'Running %s.' % command
+ call(command)
+
+if __name__ == "__main__":
+ import sys
+ main(sys.argv[1:])
\ No newline at end of file
More information about the Erp5-report
mailing list