[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