#!/bin/bash
#
# GitLab
# Maintainer: @elvanja, @troyanov, @eiyaya, @foyo23
# App Version: 5.0.0

# chkconfig: 2345 82 55
# processname: unicorn
# processname: sidekiq
# description: Runs unicorn and sidekiq for nginx integration.

# Related (kudos @4sak3n0ne):
# https://github.com/gitlabhq/gitlabhq/issues/1049#issuecomment-8386882
# https://gist.github.com/3062860

# Include RedHat function library
. /etc/rc.d/init.d/functions

# The name of the service
NAME=git

# The username and path to the gitlab source
USER=git
APP_PATH=/home/$USER/gitlab

# The PID and LOCK files used by unicorn and sidekiq
UPID=$APP_PATH/tmp/pids/unicorn.pid
ULOCK=/var/lock/subsys/unicorn
SPID=$APP_PATH/tmp/pids/sidekiq.pid
SLOCK=/var/lock/subsys/sidekiq

# The options to use when running unicorn
OPTS="-c $APP_PATH/config/unicorn.rb -E production -D"

# Ruby related path update
RUBY_PATH_PATCH="PATH=$PATH:/usr/local/bin:/usr/local/lib:/home/git/bin && export PATH && "

start() {
  cd $APP_PATH

  # Start unicorn
  echo -n $"Starting unicorn: "
  daemon --pidfile=$UPID --user=$USER "$RUBY_PATH_PATCH bundle exec unicorn_rails $OPTS"
  unicorn=$?
  [ $unicorn -eq 0 ] && touch $ULOCK
  echo

  # Start sidekiq
  echo -n $"Starting sidekiq: "
  daemon --pidfile=$SPID --user=$USER "$RUBY_PATH_PATCH RAILS_ENV=production bundle exec rake sidekiq:start"
  sidekiq=$?
  [ $sidekiq -eq 0 ] && touch $SLOCK
  echo

  retval=$unicorn || $sidekiq
  return $retval
}

stop() {
  cd $APP_PATH

  # Stop unicorn
  echo -n $"Stopping unicorn: "
  killproc -p $UPID
  unicorn=$?
  [ $unicorn -eq 0 ] && rm -f $ULOCK
  echo

  # Stop sidekiq
  echo -n $"Stopping sidekiq: "
  killproc -p $SPID
  sidekiq=$?
  [ $sidekiq -eq 0 ] && rm -f $SLOCK
  echo

  retval=$unicorn || $sidekiq
  return $retval
}

restart() {
  stop
  start
}

get_status() {
  status -p $UPID unicorn
  status -p $SPID sidekiq
}

query_status() {
  get_status >/dev/null 2>&1
}

case "$1" in
  start)
    query_status && exit 0
    start
    ;;
  stop)
    query_status || exit 0
    stop
    ;;
  restart)
    restart
    ;;
  status)
    get_status
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|status}" >&2
    exit 1
    ;;
esac

exit 0
