#! /bin/sh
#
# chkconfig: - 55 45
# description:  Celery worker daemon
# processname: celeryd
# config: /etc/sysconfig/celeryd
# pidfile: /var/run/celeryd.pid
#
# To configure celeryd you probably need to tell it where to chdir.
#
# EXAMPLE CONFIGURATION
# =====================
#
# this is an example configuration for a Python project:
#
# /etc/sysconfig/celeryd:
#
#   # Where to chdir at start.
#   CELERYD_CHDIR="/opt/Myproject/"
#
#   # Extra arguments to celeryd
#   CELERYD_OPTS="--time-limit=300"
#
#   # Name of the celery config module.#
#   CELERY_CONFIG_MODULE="celeryconfig"
#
# EXAMPLE DJANGO CONFIGURATION
# ============================
#
#   # Where the Django project is.
#   CELERYD_CHDIR="/opt/Project/"
#
#   # Name of the projects settings module.
#   export DJANGO_SETTINGS_MODULE="settings"
#
#   # Path to celeryd
#   CELERYD="/opt/Project/manage.py"
#
#   # Extra arguments to manage.py
#   CELERYD_OPTS="celeryd"
#
# AVAILABLE OPTIONS
# =================
#
#   * CELERYD_OPTS
#       Additional arguments to celeryd, see `celeryd --help` for a list.
#
#   * CELERYD_CHDIR
#       Path to chdir at start. Default is to stay in the current directory.
#
#   * CELERYD_PID_FILE
#       Full path to the pidfile. Default is /var/run/celeryd.pid.
#
#   * CELERYD_LOG_FILE
#       Full path to the celeryd logfile. Default is /var/log/celeryd.log
#
#   * CELERYD_LOG_LEVEL
#       Log level to use for celeryd. Default is INFO.
#
#   * CELERYD
#       Path to the celeryd program. Default is `celeryd`.
#       You can point this to an virtualenv, or even use manage.py for django.
#
#   * CELERYD_USER
#       User to run celeryd as. Default is current user.
#
#   * CELERYD_GROUP
#       Group to run celeryd as. Default is current user.
#
#   * VIRTUALENV
#       Full path to the virtualenv environment to activate. Default is none.
#
#   * PYTHONPATH
#       A directory to add to the Python path.

CELERY_CONFIG_MODULE="settings"
CELERYD_CHDIR="/usr/local/python/ccgapps/yabi/release/yabi"
CELERYD_OPTS="-E -B --schedule=$CELERYD_CHDIR/logs/celerybeat-schedule"
CELERYD_PID_FILE="$CELERYD_CHDIR/logs/celeryd.pid"
CELERYD_LOG_FILE="$CELERYD_CHDIR/logs/celeryd.log"
CELERYD_LOG_LEVEL="INFO"
CELERYD="python -m celery.bin.celeryd_detach"
CELERYD_USER="apache"
CELERYD_GROUP="apache"
CELERY_LOADER="django"

VIRTUALENV="$CELERYD_CHDIR/virtualpython"
PYTHONPATH="/usr/local/etc/ccgapps:$CELERYD_CHDIR:/usr/local/python/ccgapps/yabi/release"
PYTHON_EGG_CACHE="/usr/local/python/ccgapps/yabi/.egg_cache"
DJANGO_SETTINGS_MODULE="settings"
DJANGO_PROJECT_DIR="$CELERYD_CHDIR"
PROJECT_DIRECTORY="$CELERYD_CHDIR"

export CELERY_CONFIG_MODULE DJANGO_SETTINGS_MODULE DJANGO_PROJECT_DIR CELERY_LOADER CELERY_CHDIR PYTHONPATH PROJECT_DIRECTORY PYTHON_EGG_CACHE

cd $CELERYD_CHDIR

# Source function library.
. /etc/init.d/functions

if test -f /etc/sysconfig/celeryd; then
    . /etc/sysconfig/celeryd
fi

RETVAL=0

DEFAULT_CELERYD="/usr/bin/celeryd"
CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-${CELERYD_LOGFILE:-"/var/log/celeryd.log"}}
CELERYD_PID_FILE=${CELERYD_PID_FILE:-${CELERYD_PIDFILE:-"/var/run/celeryd.pid"}}
CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-${CELERYD_LOGLEVEL:-"INFO"}}
CELERYD_USER=${CELERYD_USER:-${CELERYD_USER:-"celeryd"}}

CELERYD=${CELERYD:-$DEFAULT_CELERYD}

export CELERY_LOADER

CELERYD_OPTS="$CELERYD_OPTS -f $CELERYD_LOG_FILE -l $CELERYD_LOG_LEVEL --pidfile=$CELERYD_PID_FILE"

if [ -n "$2" ]; then
    CELERYD_OPTS="$CELERYD_OPTS $2"
fi

# Append the Django settings module to use, if specified
# AH - This was in the git version, but the option is not supported by celery
#if [ -n "$DJANGO_SETTINGS_MODULE" ]; then
#    CELERYD_OPTS="$CELERYD_OPTS --settings=$DJANGO_SETTINGS_MODULE"
#fi

start_worker () {
    if [ -n "$VIRTUALENV" ]; then
        source $VIRTUALENV/bin/activate
    fi
    echo -n $"Starting celeryd: "
    daemon --pidfile=$CELERYD_PID_FILE --user=$CELERYD_USER \
      PYTHONPATH=$PYTHONPATH:$CELERY_PYTHONPATH $CELERYD $CELERYD_OPTS 2>/dev/null &
    RETVAL=$?
    sleep 3; echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/celeryd
}

stop_worker () {
    echo -n $"Stopping celeryd: "
    kill -s TERM $(cat $CELERYD_PID_FILE) 2>/dev/null
    RETVAL=$?
    sleep 3; echo
    if [ $RETVAL -eq 0 ]; then
        rm -f /var/lock/subsys/celeryd
        rm -f $CELERYD_PID_FILE
    fi
}

case "$1" in
  start)
    start_worker
    ;;

  stop)
    stop_worker
    ;;

  restart)
    stop_worker
    start_worker
    ;;

  status)
    status celeryd
    ;;

  *)
    echo $"Usage: $0 {start|stop|restart|status}"
    exit 1
esac

exit $?
