#!/bin/sh
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# chkconfig: - 90 10
# description: Apache Traffic Server is a fast, scalable and extensible  \
#             HTTP/1.1 compliant caching proxy server.
# processname: traffic_manager traffic_server
# config: /etc/trafficserver
# config: /etc/sysconfig/trafficserver
#
# Template from /etc/init.d/skeleton on Ubuntu
#
### BEGIN INIT INFO
# Provides:          Traffic Server
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: Startup/shutdown script for the Apache Traffic Server
# Description:       Apache Traffic Server is fast, scalable and extensible
#                    HTTP/1.1 compliant caching proxy server.
### END INIT INFO

# Fedora:
#  When this file is installed as /etc/rc.d/init.d/trafficserver
#  and added to the chkconfig system with `chkconfig --add trafficserver`
#  then the default values of these variables can be overridden
#  in the /etc/sysconfig/trafficserver file
# Ubuntu:
#  Values read from /etc/default/trafficserver

TS_PACKAGE_NAME="@PACKAGE_NAME@"
TS_PACKAGE_VERSION="@PACKAGE_VERSION@"
TS_PACKAGE_BUGREPORT="@PACKAGE_BUGREPORT@"
UNAME_S=$(uname -s)

if [ -e /etc/SuSE-release ]; then
    DISTRIB_ID="suse"
elif [ -e /etc/fedora-release ]; then
    DISTRIB_ID="fedora"
elif [ -e /etc/gentoo-release ]; then
    DISTRIB_ID="gentoo"
elif [ -e /etc/redhat-release ]; then
    DISTRIB_ID="redhat" # also exists on Fedora
elif [ -e /etc/lsb-release ]; then
    DISTRIB_ID="ubuntu"
elif [ -e /etc/debian_version ]; then
    DISTRIB_ID="debian" # also exists on Ubuntu
elif [ -e /etc/slackware-version ]; then
    DISTRIB_ID="slackware"
elif [ "$UNAME_S" = "Darwin" ]; then
    DISTRIB_ID="Darwin"
elif [ "$UNAME_S" = "FreeBSD" ]; then
    DISTRIB_ID="FreeBSD"
fi

# We might want to move over to use /etc/system-release for more distros?
# I know at least Fedora supports it as well.
if [ "" = "$DISTRIB_ID" -a -e /etc/system-release ]; then
    case $(cat /etc/system-release) in
	*Amazon*)
	    DISTRIB_ID="redhat" # Amazon AMI is mostly like RHEL
	    ;;
	*)
	    ;;
    esac
fi

# /usr/bin/lsb_release -rd # Ubuntu release & description info

HEAD=/usr/bin/head
test -x $HEAD || HEAD=head
ESED=/usr/bin/sed
test -x $ESED || ESED=sed

# Ubuntu: Do NOT "set -e"

#Ubuntu:PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="start/stop Traffic Server"
NAME=trafficserver
SLEEP_TIME=5
TS_PREFIX="@prefix@"

TS_ROOT=${TS_ROOT:-$TS_PREFIX}

# ####################################
# run root is not used by default
# set this value if using a custom layout structure
# TS_RUNROOT=""

# TS_BASE is offset inside the file system from where the layout starts
# For standard installations TS_BASE will be empty
eval TS_BASE="`echo $TS_ROOT | ${ESED} -e 's;@prefix@$;;'`"

TM_NAME=${TM_NAME:-traffic_manager}
TS_NAME=${TS_NAME:-traffic_server}
TM_DAEMON=${TM_DAEMON:-$TS_BASE@exp_bindir@/traffic_manager}
TM_DAEMON_ARGS=""
TS_DAEMON=${TS_DAEMON:-$TS_BASE@exp_bindir@/traffic_server}
TS_DAEMON_ARGS=""
TL_BINARY=${TL_BINARY:-$TS_BASE@exp_bindir@/traffic_ctl}
TY_BINARY=${TL_BINARY:-$TS_BASE@exp_bindir@/traffic_layout}
TM_PIDFILE=${TM_PIDFILE:-$TS_BASE@exp_runtimedir@/manager.lock}
TS_PIDFILE=${TS_PIDFILE:-$TS_BASE@exp_runtimedir@/server.lock}
# number of times to retry check on pid lock file
PIDFILE_CHECK_RETRIES=${PIDFILE_CHECK_RETRIES:-30}
# stdout file of executable
STDOUTLOG=${STDOUTLOG:-$TS_BASE@exp_logdir@/traffic.out}
# stderr file of executable
STDERRLOG=${STDERRLOG:-$TS_BASE@exp_logdir@/traffic.out}
# hooks
RC_START_HOOK=${RC_START_HOOK:-$TS_BASE@exp_bindir@/rc_start_hook.sh}
RC_RELOAD_HOOK=${RC_PRELOAD_HOOK:-$TS_BASE@exp_bindir@/rc_reload_hook.sh}

if [ -d /etc/rc.d/init.d ]; then
    SCRIPTNAME=/etc/rc.d/init.d/$NAME # Fedora
elif [ -d /etc/init.d ]; then
    SCRIPTNAME=/etc/init.d/$NAME # Ubuntu
elif [ "$DISTRIB_ID" = "Darwin" ]; then
    SCRIPTNAME=$0 # Darwin
elif [ "$DISTRIB_ID" = "FreeBSD" ]; then
    SCRIPTNAME=$0 # FreeBSD
else
    echo "This script needs to be ported to this OS"
    exit 1
fi

# Exit if the package can not be found
if [ ! -x "$TS_DAEMON" ]; then
    echo "Error: Can not find $TS_DAEMON using TS_ROOT=$TS_ROOT"
    echo "       Please set TS_ROOT to point to base installation."
    exit 0
fi

# Ubuntu: Read configuration variable file if it is present
test -r /etc/default/$NAME && . /etc/default/$NAME

# RHEL/Fedora: Read configuration variable file if it is present
test -r /etc/sysconfig/$NAME && . /etc/sysconfig/$NAME

# Gentoo: Read configuration variable file if it is present
test -r /etc/conf.d/$NAME && . /etc/conf.d/$NAME

# Ubuntu: Load the VERBOSE setting and other rcS variables
test -f /etc/default/rcS && . /etc/default/rcS

# Suse: load rc.status
test -f /etc/rc.status && . /etc/rc.status

# Fedora: make avail helper functions 'action', 'killproc', 'status', etc
test -f /etc/rc.d/init.d/functions && . /etc/rc.d/init.d/functions

# Gentoo: make avail helper function 'ebegin', 'eend', etc
test -f /etc/init.d/functions.sh && . /etc/init.d/functions.sh

# Ubuntu: Define LSB log_* functions.
#         Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
test -f /lib/lsb/init-functions && . /lib/lsb/init-functions

# FreeBSD
# NB: FreeBSD's ports system installs a run script in /usr/local/etc/rc.d/
# with native OS rc.subr(8) features.
test -f /etc/rc.subr && . /etc/rc.subr

if [ ! -d $TS_BASE@exp_runtimedir@ ]; then
	mkdir -p $TS_BASE@exp_runtimedir@
	chown @pkgsysuser@:@pkgsysgroup@ $TS_BASE@exp_runtimedir@
fi

#
# Fedora:
#  launches $* in the background
#  and checks if program creates its own pid lock file
#  redirects stdout and stderr to files
#  this function is meant to substitute 'daemon'
#  because 'daemon' expects $1 to fork itself
forkdaemon()
{
    local i=0

    # launch in background, i.e. fork
    # and redirect stdout and stderr to files
    $* --bind_stdout $STDOUTLOG --bind_stderr $STDERRLOG >> $STDOUTLOG 2>> $STDERRLOG &

    while (( $i < $PIDFILE_CHECK_RETRIES ))
    do
        # check for regular file and size greater than 0
        if [[ -f $TM_PIDFILE ]] && [[ -s $TM_PIDFILE ]]; then
            success
            return 0
        fi

        sleep 1  # zzz for 1 second
        (( i++ ))

    done

    failure
    return 1
}


#
# Ubuntu: Function that starts the daemon/service
#
do_start()
{
  # Return
  #   0 if daemon has been started
  #   1 if daemon was already running
  #   2 if daemon could not be started
    start-stop-daemon --start --quiet --pidfile $TM_PIDFILE --exec $TM_DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --background --quiet --pidfile $TM_PIDFILE --exec $TM_DAEMON -- \
        $TM_DAEMON_ARGS \
        || return 2
  # Add code here, if necessary, that waits for the process to be ready
  # to handle requests from services started subsequently which depend
  # on this one.  As a last resort, sleep for some time.
    sleep 1
    test -f "$TM_PIDFILE" || return 2
}

#
# Ubuntu: Function that stops the daemon/service
#
do_stop()
{
  # Return
  #   0 if daemon has been stopped
  #   1 if daemon was already stopped
  #   2 if daemon could not be stopped
  #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=QUIT/30/KILL/5 --pidfile $TM_PIDFILE --name $TM_NAME
    RETVAL="$?"
    test "$RETVAL" != 0 && return $RETVAL
  # Wait for children to finish too if this is a daemon that forks
  # and if the daemon is only ever run from this initscript.
  # If the above conditions are not satisfied then add some other code
  # that waits for the process to drop all resources that could be
  # needed by services started subsequently.  A last resort is to
  # sleep for some time.
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $TM_DAEMON
    RETVAL="$?"
    test "$RETVAL" != 0 && return $RETVAL
  # Need to stop the TM and TS also
    start-stop-daemon --stop --quiet --oknodo --retry=QUIT/30/KILL/5 --pidfile $TM_PIDFILE --name $TM_NAME
    RETVAL="$?"
    test "$RETVAL" != 0 && return $RETVAL
    start-stop-daemon --stop --quiet --oknodo --retry=QUIT/30/KILL/5 --pidfile $TS_PIDFILE --name $TS_NAME
    RETVAL="$?"
    test "$RETVAL" != 0 && return $RETVAL
  # Many daemons don't delete their pidfiles when they exit.
    rm -f $TM_PIDFILE
    rm -f $TM_PIDFILE
    rm -f $TS_PIDFILE
    return "$RETVAL"
}

rc_reload_hook()
{
    if [ ! -x "$RC_RELOAD_HOOK" ]; then
        return 0
    fi
    sh $RC_RELOAD_HOOK
    return $?
}

rc_start_hook()
{
    if [ ! -x "$RC_START_HOOK" ]; then
        return 0
    fi
    sh $RC_START_HOOK
    return $?
}

# Make sure the NOFILES limit is set high in case this process is not
# started from a logged in prompt
ulimit -n 500000

# main
case "$1" in
    start)
        rc_start_hook
        retval="$?"
        if [ "$retval" != 0 ]; then
            echo "precondition was not met: ${RC_START_HOOK}"
            exit "$retval"
        fi

        if [ "$DISTRIB_ID" = "ubuntu" -o "$DISTRIB_ID" = "debian" ] ; then
            test "x$VERBOSE" != "xno" && log_daemon_msg "Starting ${TS_PACKAGE_NAME}" "$NAME"
            retval=0
            do_start
            test "$?" -ne 0 -a "$?" -ne 1 && retval=1
            test "x$VERBOSE" != "xno" && log_end_msg "$retval"
            exit "$retval"
        elif [ "$DISTRIB_ID" = "gentoo" ]; then
	    ebegin "Starting ${TS_PACKAGE_NAME}"
	    do_start
	    eend $?
        elif [ "$DISTRIB_ID" = "fedora" -o "$DISTRIB_ID" = "redhat" ]; then
            action "Starting ${TS_PACKAGE_NAME}:" forkdaemon $TM_DAEMON $TM_DAEMON_ARGS
        elif [ "$DISTRIB_ID" = "suse" ]; then
            echo -n "Starting ${TS_PACKAGE_NAME}"
            startproc -p $TM_PIDFILE $TM_DAEMON $TM_DAEMON_ARGS
            rc_status -v
        elif [ "$DISTRIB_ID" = "Darwin" ]; then
            echo "Starting ${TS_PACKAGE_NAME}"
            launchctl bsexec / launchctl list $TM_NAME > /dev/null 2>&1 && exit 0
            launchctl bsexec / launchctl submit -l $TM_NAME -p $TM_DAEMON -o $STDOUTLOG -e $STDERRLOG -- $TM_DAEMON_ARGS
        elif [ "$DISTRIB_ID" = "FreeBSD" ]; then
            echo "Starting ${TS_PACKAGE_NAME}"
            name="$TM_NAME"
            command="/usr/sbin/daemon"
            command_args="-o $STDOUTLOG $TM_DAEMON $TM_DAEMON_ARGS"
            pidfile="$TM_PIDFILE"
            run_rc_command "$1"
        else
            echo "This script needs to be ported to this OS"
            exit 1
        fi
        ;;
    stop)
        if [ "$DISTRIB_ID" = "ubuntu" -o "$DISTRIB_ID" = "debian" ] ; then
            test "x$VERBOSE" != "xno" && log_daemon_msg "Stopping ${TS_PACKAGE_NAME}" "$NAME"
            retval=0
            do_stop
            test "$?" -ne 0 -a "$?" -ne 1 && retval=1
            test "x$VERBOSE" != "xno" && log_end_msg "$retval"
            exit "$retval"
        elif [ "$DISTRIB_ID" = "fedora" -o "$DISTRIB_ID" = "redhat" ]; then
            action "Stopping ${TM_NAME}:" killproc -p $TM_PIDFILE -d 35 $TM_DAEMON
            action "Stopping ${TS_NAME}:" killproc -p $TS_PIDFILE -d 35 $TS_DAEMON
        elif [ "$DISTRIB_ID" = "gentoo" ]; then
	    ebegin "Starting ${TS_PACKAGE_NAME}"
	    do_stop
	    eend $?
        elif [ "$DISTRIB_ID" = "suse" ]; then
            echo -n "Stopping ${TM_NAME}"
            killproc -p $TM_PIDFILE $TM_DAEMON
            rc_status -v
            echo -n "Stopping ${TS_NAME}"
            killproc -p $TS_PIDFILE $TS_DAEMON
            rc_status -v
        elif [ "$DISTRIB_ID" = "Darwin" ]; then
            echo "Stopping ${TS_PACKAGE_NAME}"
            launchctl bsexec / launchctl list $TM_NAME > /dev/null 2>&1 || exit 0
            echo "Stopping ${TM_NAME}"
            launchctl bsexec / launchctl remove ${TM_NAME}
            rm -f ${TM_PIDFILE}
            echo "Stopping ${TS_NAME}"
            kill $(cat $TS_PIDFILE)
            rm -f ${TS_PIDFILE}
        elif [ "$DISTRIB_ID" = "FreeBSD" ]; then
            echo "Stopping ${TS_PACKAGE_NAME}"
            if [ -e "$TM_PIDFILE" ]; then
                kill $(cat $TM_PIDFILE)
                rm -f ${TM_PIDFILE}
            fi
        else
            echo "This script needs to be ported to this OS"
            exit 1
        fi
        ;;
    reload|force-reload)
        rc_reload_hook
        retval="$?"
        if [ "$retval" != 0 ]; then
            echo "precondition was not met: ${RC_RELOAD_HOOK}"
            exit "$retval"
        fi

        if [ "$DISTRIB_ID" = "ubuntu" -o "$DISTRIB_ID" = "debian" ] ; then
            test "x$VERBOSE" != "xno" && log_daemon_msg "Reloading ${TS_PACKAGE_NAME}" "$NAME"
            retval=0
            $TL_BINARY config reload
            test "$?" -ne 0 -a "$?" -ne 1 && retval=1
            test "x$VERBOSE" != "xno" && log_end_msg "$retval"
            exit "$retval"
        elif [ "$DISTRIB_ID" = "fedora" -o "$DISTRIB_ID" = "redhat" ]; then
            action "Reloading ${NAME}:" $TL_BINARY config reload
        elif [ "$DISTRIB_ID" = "gentoo" ]; then
	    ebegin "Reloading ${NAME}"
            $TL_BINARY config reload
	    eend $?
        elif [ "$DISTRIB_ID" = "suse" ]; then
            echo -n "Reloading ${NAME}"
            $TL_BINARY config reload
            rc_status -v
        elif [ "$DISTRIB_ID" = "Darwin" ]; then
            echo "Reloading ${NAME}"
            $TL_BINARY config reload
        elif [ "$DISTRIB_ID" = "FreeBSD" ]; then
            echo "Reloading ${NAME}"
            $TL_BINARY config reload
        else
            echo "This script needs to be ported to this OS"
            exit 1
        fi
        ;;
    restart)
        if [ "$DISTRIB_ID" = "ubuntu" -o "$DISTRIB_ID" = "debian" ] ; then
      #
      # If the "reload" option is implemented then remove the
      # 'force-reload' alias
      #
            log_daemon_msg "Restarting ${TS_PACKAGE_NAME}" "$NAME"
            do_stop
            case "$?" in
                0|1)
                    sleep $SLEEP_TIME
                    do_start
                    case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 0 ;; # Daemons were already stopped
                        *) log_end_msg 1 ;; # Failed to start
                    esac
                    ;;
                *)
            # Failed to stop
                    log_end_msg 1
                    ;;
            esac
        else
      # This is the typical process for restart
            sh $0 'stop'
            sleep $SLEEP_TIME
            sh $0 'start'
        fi
        ;;
    status)
        if [ "$DISTRIB_ID" = "fedora" -o "$DISTRIB_ID" = "redhat" ]; then
            status -p $TM_PIDFILE $TM_NAME
        elif [ "$DISTRIB_ID" = "ubuntu" -o "$DISTRIB_ID" = "debian" ] ; then
            status_of_proc "$TM_DAEMON" "$TM_NAME" -p "$TM_PIDFILE" && exit 0 || exit $?
        elif [  "$DISTRIB_ID" = "suse" ]; then
            echo -n "Checking for service ${DM}: "
            checkproc -p $TM_PIDFILE $TM_NAME
            rc_status -v
        elif [ "$DISTRIB_ID" = "Darwin" ]; then
            /bin/echo -n "${TS_PACKAGE_NAME} is "
            launchctl bsexec / launchctl list $TM_NAME > /dev/null 2>&1
            status=$?
            [ $status -eq 0 ] || /bin/echo -n "not "
            echo "running."
        elif [ "$DISTRIB_ID" = "FreeBSD" -o "$DISTRIB_ID" = "gentoo" ]; then
            if pgrep $TM_NAME > /dev/null ; then
                echo "$TM_NAME running as pid `cat $TM_PIDFILE`" ; else
                echo "$TM_NAME not running"
            fi
            if pgrep $TS_NAME > /dev/null ; then
                echo "$TS_NAME running as pid `cat $TS_PIDFILE`"; else
                echo "$TS_NAME not running"
            fi
            exit $status
        else
            echo "This script needs to be ported to this OS"
            exit 1
        fi
        ;;
    condrestart)
        if [ "$DISTRIB_ID" = "fedora" -o "$DISTRIB_ID" = "redhat" ]; then
            if $0 'status'
            then
                sh $0 'stop'
                sh $0 'start'
            fi
        else
            echo "This script needs to be ported to this OS"
            exit 1
        fi
        ;;
    *)
        if [ "$DISTRIB_ID" = "ubuntu" -o "$DISTRIB_ID" = "debian" ] ; then
            echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
        elif [ "$DISTRIB_ID" = "fedora" -o "$DISTRIB_ID" = "redhat" ]; then
            echo "Usage: $0 {start|stop|status|restart|condrestart}"
        elif [ "$DISTRIB_ID" = "gentoo" ]; then
            echo "Usage: $0 {start|stop|reload|restart|status}"
        elif [ "$DISTRIB_ID" = "suse" ]; then
            echo "Usage: $0 {start|stop|restart|status}"
        elif [ "$DISTRIB_ID" = "Darwin" ]; then
            echo "Usage: $0 {start|stop|restart|status}"
        elif [ "$DISTRIB_ID" = "FreeBSD" ]; then
            echo "Usage: $0 Usage: (start|stop|restart|status)"
            echo "NB: FreeBSD's ports system installs a rc script in"
            echo "/usr/local/etc/rc.d/ with native rc.subr(8) features."
        else
            echo "This script needs to be ported to this OS"
            exit 1
        fi
        exit 3
        ;;
esac
