#!/bin/bash

# Default configured services
if [ -e /etc/debian_version ]; then
    TOWER_CONFIG="/etc/default/ansible-tower"
else
    TOWER_CONFIG="/etc/sysconfig/ansible-tower"
fi

# Load default configuration
[ -e "${TOWER_CONFIG}" ] && . "${TOWER_CONFIG}"

service_action() {
    SERVICES=$TOWER_SERVICES

    for svc in ${SERVICES}; do

        service ${svc} $1
        this_return=$?
        if [ $this_return -gt $worst_return ]; then
            worst_return=$this_return
        fi
        # Allow supervisor time to cleanup child pids (ubuntu only)
        if [[ ${svc} == supervisor* && ${1} == stop && -e /etc/debian_version ]]; then
            S_PID=$(pidof -x supervisord)
            echo "Waiting to allow supervisor time to cleanup ... pid ${S_PID}"
            if [ "${S_PID}" ]; then
                i=0
                while kill -0 "${S_PID}" 2> /dev/null; do
                    if [ $i = '60' ]; then
                        break;
                    else
                        if [ $i == '0' ]; then
                            echo -n " ... waiting"
                        else
                            echo -n "."
                        fi
                        i=$(($i+1))
                        sleep 1
                    fi
                done
            fi
        fi
    done
}

usage() {
    echo "Ansible Tower service helper utility"
    echo "Usage: $0 {start|stop|restart|status}"
}

worst_return=0
case "$1" in
    help | -help | --help | -h)
        usage
        ;;
    start)
          echo "Starting Tower"
          service_action start
          ;;
    stop)
        echo "Stopping Tower"
        service_action stop
        ;;
    restart)
        echo "Restarting Tower"
        service_action stop
        service_action start
        ;;
    status)
        echo "Showing Tower Status"
        service_action status
        ;;
    *)
        usage
        worst_return=1
esac
exit $worst_return
