#!/bin/bash

### BEGIN INIT INFO
# Provides:          <%= name %>
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: <%= description %>
# Description:       <%= description %>
### END INIT INFO

# Documentation available at
# http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html
# Debian provides some extra functions though
. /lib/lsb/init-functions

DAEMON_NAME=<%= name %>
DAEMON_USER=<%= uid %>
DAEMON_PATH=<%= base_path %>/<%= name %>/bin/<%= name %>

DAEMON_DESC=$(get_lsb_header_val $0 "Short-Description")
DAEMON_NICE=0

do_start() {
  local result
  local status

  status=($(su - $DAEMON_USER $DAEMON_PATH ping))

  if [ "${status[0]}" = "pong" ]; then
    log_warning_msg "${DAEMON_NAME} is already started"
    result=1
  else
    log_success_msg "Starting ${DAEMON_DESC}" "${DAEMON_NAME}"
    su - $DAEMON_USER $DAEMON_PATH start > /dev/null
    result=0
  fi
  return $result
}

do_stop() {
  local result
  local status

  status=($(su - $DAEMON_USER $DAEMON_PATH ping))

  if [ "${status[0]}" = "pong" ]; then
    log_success_msg "Stopping ${DAEMON_DESC}" "${DAEMON_NAME}"
    su - $DAEMON_USER $DAEMON_PATH stop > /dev/null
    result=0
  else
    log_failure_msg "${DAEMON_NAME} is not started"
    result=1
  fi
  return $result
}

do_restart() {
  local result

  do_stop
  result=$?
  if [ "$result" = 0 ]; then
    do_start
    result=$?
  fi

  return $result
}

do_status() {
  local result
  local status

  status=($(su - $DAEMON_USER $DAEMON_PATH ping))

  if [ "${status[0]}" = "pong" ]; then
    log_success_msg "${DAEMON_DESC}" "${DAEMON_NAME} is running"
    result=0
  else
    log_failure_msg "${DAEMON_NAME} is not running"
    result=1
  fi

  return $result
}

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

case "$1" in
start)        do_start;   exit $? ;;
stop)         do_stop;    exit $? ;;
restart)      do_restart; exit $? ;;
force-reload) do_restart; exit $? ;;
status)       do_status;  exit $? ;;
*)            do_usage;   exit  1 ;;
esac