dev-python/celery: Fix bracket usage in init script
authorJustin Lecher <jlec@gentoo.org>
Thu, 20 Aug 2015 12:22:52 +0000 (14:22 +0200)
committerJustin Lecher <jlec@gentoo.org>
Thu, 20 Aug 2015 12:23:00 +0000 (14:23 +0200)
* use /run instead of /var/run
* Fix dependencies for py3

Package-Manager: portage-2.2.20.1
Signed-off-by: Justin Lecher <jlec@gentoo.org>
dev-python/celery/celery-3.1.18-r1.ebuild [new file with mode: 0644]
dev-python/celery/files/celery.confd-r2 [new file with mode: 0644]
dev-python/celery/files/celery.initd-r2 [new file with mode: 0644]

diff --git a/dev-python/celery/celery-3.1.18-r1.ebuild b/dev-python/celery/celery-3.1.18-r1.ebuild
new file mode 100644 (file)
index 0000000..7d77dd3
--- /dev/null
@@ -0,0 +1,88 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+PYTHON_COMPAT=( python2_7 python3_{3,4} )
+
+inherit distutils-r1 bash-completion-r1
+
+DESCRIPTION="Open source asynchronous task queue/job queue based on distributed message passing"
+HOMEPAGE="http://celeryproject.org/ http://pypi.python.org/pypi/celery"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+# There are a number of other optional 'extras' which overlap with those of kombu, however
+# there has been no apparent expression of interest or demand by users for them. See requires.txt
+IUSE="doc examples redis sqs test yaml zeromq"
+
+RDEPEND="
+       <dev-python/kombu-3.1[${PYTHON_USEDEP}]
+       >=dev-python/kombu-3.0.25[${PYTHON_USEDEP}]
+       >=dev-python/anyjson-0.3.3[${PYTHON_USEDEP}]
+       >=dev-python/billiard-3.3.0.20[${PYTHON_USEDEP}]
+       <dev-python/billiard-3.4[${PYTHON_USEDEP}]
+       dev-python/pytz[${PYTHON_USEDEP}]
+       dev-python/greenlet[${PYTHON_USEDEP}]
+       sqs? ( >=dev-python/boto-2.13.3[${PYTHON_USEDEP}] )
+       zeromq? ( >=dev-python/pyzmq-13.1.0[${PYTHON_USEDEP}] )
+       yaml? ( >=dev-python/pyyaml-3.10[${PYTHON_USEDEP}] )
+"
+
+DEPEND="
+       dev-python/setuptools[${PYTHON_USEDEP}]
+       test? ( ${RDEPEND}
+               dev-python/gevent[$(python_gen_usedep python2_7)]
+               >=dev-python/mock-1.0.1[${PYTHON_USEDEP}]
+               dev-python/nose-cover3[${PYTHON_USEDEP}]
+               >=dev-python/pymongo-2.6.2[${PYTHON_USEDEP}]
+               dev-python/pyopenssl[${PYTHON_USEDEP}]
+               >=dev-python/python-dateutil-2.1[${PYTHON_USEDEP}]
+               dev-python/sqlalchemy[${PYTHON_USEDEP}]
+               redis? (
+                       dev-python/redis-py[${PYTHON_USEDEP}]
+                       >=dev-db/redis-2.8.0
+               )
+       )
+       doc? (
+               dev-python/docutils[${PYTHON_USEDEP}]
+               dev-python/sphinx[${PYTHON_USEDEP}]
+               dev-python/jinja[${PYTHON_USEDEP}]
+               dev-python/sqlalchemy[${PYTHON_USEDEP}]
+               )"
+
+PATCHES=(
+       "${FILESDIR}"/celery-docs.patch
+       "${FILESDIR}"/${PN}-3.1.11-test.patch
+)
+
+# testsuite needs it own source
+DISTUTILS_IN_SOURCE_BUILD=1
+
+python_compile_all() {
+       if use doc; then
+               mkdir docs/.build || die
+               emake -C docs html
+       fi
+}
+
+python_test() {
+       nosetests || die "Tests failed with ${EPYTHON}"
+}
+
+python_install_all() {
+       # Main celeryd init.d and conf.d
+       newinitd "${FILESDIR}/celery.initd-r2" celery
+       newconfd "${FILESDIR}/celery.confd-r2" celery
+
+       use examples && local EXAMPLES=( examples/. )
+
+       use doc && local HTML_DOCS=( docs/.build/html/. )
+
+       newbashcomp extra/bash-completion/celery.bash ${PN}
+
+       distutils-r1_python_install_all
+}
diff --git a/dev-python/celery/files/celery.confd-r2 b/dev-python/celery/files/celery.confd-r2
new file mode 100644 (file)
index 0000000..d5ba2f7
--- /dev/null
@@ -0,0 +1,51 @@
+# /etc/conf.d/celery
+
+##############################################################################
+# GLOBAL CONFIGURATION
+
+# User and group
+#CELERY_USER="celery"
+#CELERY_GROUP="celery"
+
+# This is generaly a good idea to set the environment correctly
+# because a lot of python package try to use HOME on init
+#export HOME="/var/lib/myproject"
+
+# Full path to the python project directory.
+#CELERY_PROJDIR="/var/lib/myproject"
+
+##############################################################################
+# CELERYD
+
+# Start the Celery worker daemon
+#CELERYD_ENABLED="yes"
+
+# celeryd notes
+#CELERYD_NODES="celery"
+
+# celeryd options
+# Example: set a 5 minute hard time limit for tasks, disable queue process prefetching and specify an app module from CELERY_PROJDIR
+#CELERYD_OPTS="--time-limit=300 -Ofair -A celeryapp"
+
+# Location and level of the celeryd log file
+#CELERYD_LOG_FILE=/var/log/celery/celeryd@%n.log
+#CELERYD_LOG_LEVEL="INFO"
+
+# Location of the celeryd pid file
+#CELERYD_PID_FILE=/run/celery/celeryd@%n.pid
+
+##############################################################################
+# CELERYBEAT
+
+# Start the Celery task scheduler daemon
+#CELERYBEAT_ENABLED="yes"
+
+# celerybeat options
+#CELERYBEAT_OPTS=""
+
+# Location and level of the celerybeat log file
+#CELERYBEAT_LOG_FILE=/var/log/celery/celerybeat.log
+#CELERYBEAT_LOG_LEVEL="INFO"
+
+# Location of the celerybeat pid file
+#CELERYBEAT_PID_FILE=/run/celery/celerybeat.pid
diff --git a/dev-python/celery/files/celery.initd-r2 b/dev-python/celery/files/celery.initd-r2
new file mode 100644 (file)
index 0000000..ec8ffb1
--- /dev/null
@@ -0,0 +1,206 @@
+#!/sbin/runscript
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the BSD license
+# $Id$
+
+extra_started_commands="reload"
+
+depend() {
+       need net
+       use rabbitmq redis logger dns
+}
+
+CELERYD_ENABLED=${CELERYD_ENABLED:-"no"}
+CELERYD_PID_FILE=${CELERYD_PID_FILE:-"/run/celery/celeryd@%n.pid"}
+CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-"/var/log/celery/celeryd@%n.log"}
+CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-"INFO"}
+CELERYD_NODES=${CELERYD_NODES:-"celery"}
+
+CELERYBEAT_ENABLED=${CELERYBEAT_ENABLED:-"no"}
+CELERYBEAT_PID_FILE=${CELERYBEAT_PID_FILE:-"/run/celery/celerybeat.pid"}
+CELERYBEAT_LOG_FILE=${CELERYBEAT_LOG_FILE:-"/var/log/celery/celerybeat.log"}
+CELERYBEAT_LOG_LEVEL=${CELERYBEAT_LOG_LEVEL:-"INFO"}
+
+export CELERY_LOADER
+
+CELERYD_MULTI=${CELERYD_MULTI:-"celery multi"}
+CELERYCTL=${CELERYCTL:-"celery"}
+CELERYBEAT=${CELERYBEAT:-"celery beat"}
+
+CELERYD_OPTS="${CELERYD_OPTS}"
+CELERYBEAT_OPTS="${CELERYBEAT_OPTS} -f ${CELERYBEAT_LOG_FILE} -l ${CELERYBEAT_LOG_LEVEL}"
+
+create_dirs() {
+       local logfile="${1}"
+       local pidfile="${2}"
+       local logdir=$(dirname ${logfile})
+       local piddir=$(dirname ${pidfile})
+
+       checkpath -d -q -m 0750 -o ${CELERY_USER:-"root"}:${CELERY_GROUP:-"root"} ${logdir} ${piddir}
+}
+
+[ -n "${CELERY_USER}" ] && DAEMON_OPTS="${DAEMON_OPTS} --uid=${CELERY_USER}"
+[ -n "${CELERY_GROUP}" ] && DAEMON_OPTS="${DAEMON_OPTS} --gid=${CELERY_GROUP}"
+
+checkconfig() {
+       if [ ! -c /dev/null ]; then
+               eerror "/dev/null is not a character device!"
+               return 1
+       fi
+
+       if [ -z "${CELERY_PROJDIR}" ]; then
+               eerror "Missing CELERY_PROJDIR variable"
+               return 1
+       fi
+
+       yesno "${CELERYD_ENABLED}" && \
+               create_dirs "${CELERYD_LOG_FILE}" "${CELERYD_PID_FILE}"
+
+       yesno "${CELERYBEAT_ENABLED}" && \
+               create_dirs "${CELERYBEAT_LOG_FILE}" "${CELERYBEAT_PID_FILE}"
+
+       return 0
+}
+
+celery_chdir() {
+       [ -n "${CELERY_PROJDIR}" ] && cd "${CELERY_PROJDIR}"
+}
+
+wait_pid () {
+       local pidfile=${1}
+       local timeout=${STOPTIMEOUT:-"10"}
+       local PID=$(cat "${pidfile}" 2>/dev/null)
+
+       while [ -n "${PID}" ] && [ "${timeout}" -ge 1 ]; do
+               kill -0 ${PID} 2>/dev/null || break
+               kill -TERM "${PID}"
+               timeout=$((${timeout} - 1))
+               sleep 0.5
+       done
+
+       [ "${timeout}" -lt 1 ] && return 1
+       [ -f ${pidfile} ] && rm -f ${pidfile}
+       return 0
+}
+
+# celeryd
+start_workers() {
+       yesno "${CELERYD_ENABLED}" || return 0
+
+       ${CELERYD_MULTI} start ${CELERYD_NODES} ${DAEMON_OPTS} \
+                               --pidfile="${CELERYD_PID_FILE}" \
+                               --logfile="${CELERYD_LOG_FILE}" \
+                               --loglevel="${CELERYD_LOG_LEVEL}" \
+                               ${CELERYD_OPTS}
+}
+
+stop_workers() {
+       yesno "${CELERYD_ENABLED}" || return 0
+
+       local timeout=${STOPTIMEOUT:-"10"}
+
+       ${CELERYD_MULTI} stop ${CELERYD_NODES} --pidfile="${CELERYD_PID_FILE}" || return 1
+
+       # Wait for each node
+       for node in ${CELERYD_NODES}; do
+               local pidfile=${CELERYD_PID_FILE/\%n/${node}}
+               local PID=$(cat "${pidfile}" 2>/dev/null)
+               while [ -n "${PID}" ] && [ "${timeout}" -ge 1 ]; do
+               kill -0 ${PID} 2>/dev/null || break
+               timeout=$((${timeout} - 1))
+               sleep 0.5
+               done
+       done
+
+       [ "${timeout}" -lt 1 ] && return 1
+       return 0
+}
+
+restart_workers() {
+       yesno "${CELERYD_ENABLED}" || return 0
+
+       ${CELERYD_MULTI} restart ${CELERYD_NODES} ${DAEMON_OPTS} \
+               --pidfile="${CELERYD_PID_FILE}" \
+               --logfile="${CELERYD_LOG_FILE}" \
+               --loglevel="${CELERYD_LOG_LEVEL}" \
+               ${CELERYD_OPTS}
+}
+
+# celerybeat
+start_beat() {
+       yesno "${CELERYBEAT_ENABLED}" || return 0
+
+       ebegin "Starting celerybeat"
+       ${CELERYBEAT} ${CELERYBEAT_OPTS} ${DAEMON_OPTS} --detach \
+               --pidfile="${CELERYBEAT_PID_FILE}"
+       eend ${?}
+}
+
+
+stop_beat() {
+       yesno "${CELERYBEAT_ENABLED}" || return 0
+
+       ebegin "Stopping celerybeat"
+       if [ -f "${CELERYBEAT_PID_FILE}" ]; then
+               wait_pid "${CELERYBEAT_PID_FILE}"
+       else
+               ewarn "not running"
+       fi
+       eend ${?}
+}
+
+
+start() {
+       local cr=0
+
+       checkconfig || return 1
+
+       ebegin "Starting ${SVCNAME}"
+       eindent
+
+       celery_chdir && \
+               start_workers && \
+               start_beat || cr=1
+
+       eoutdent
+       eend ${cr}
+}
+
+stop() {
+       local cr=0
+
+       checkconfig || return 1
+
+       ebegin "Stopping ${SVCNAME}"
+       eindent
+
+       celery_chdir
+       stop_workers || cr=1
+       stop_beat || cr=1
+
+       eoutdent
+       eend ${cr}
+}
+
+reload() {
+       local cr=0
+
+       checkconfig || return 1
+
+       ebegin "Restarting ${SVCNAME}"
+       eindent
+
+       celery_chdir
+       restart_workers || cr=1
+       stop_beat && start_beat || cr=1
+
+       eoutdent
+       eend ${cr}
+}
+
+status() {
+       checkconfig || return 1
+
+       celery_chdir && \
+               ${CELERYCTL} status
+}