#!/bin/sh
#
# makuosan  Multicasts All-Kinds of Updating Operation for Servers on Administered Network
#
# Copyright (C) 2008 by KLab Inc.
#
# chkconfig: 99 01
# description: Makuosan(MAKUO for short) is a software \
#              which transfer files to multiple servers simultaneously \
#              using UDP multicast.
#              (MAKUO consists of makuosan daemon and command line utility msync.\
#              The makuosan should be run on every server in a cluster. \
#              The makuo talk to makuosan daemon.)
#
# processname: /usr/sbin/makuosan
# config: /etc/sysconfig/makuosan
# pidfile: /var/run/makuosan.pid

PATH=/sbin:/bin:/usr/bin:/usr/sbin

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

export MAKUOSAN_USER
export MAKUOSAN_GROUP
export MAKUOSAN_GROUPS
export MAKUOSAN_BASE
export MAKUOSAN_PORT
export MAKUOSAN_SOCK

# Get config.
test -f /etc/sysconfig/network  && . /etc/sysconfig/network
test -f /etc/sysconfig/makuosan && . /etc/sysconfig/makuosan
[ -n "$BASE_DIR" ] && MAKUOSAN_BASE=$BASE_DIR;
[ -n "$PORT"     ] && MAKUOSAN_PORT=$PORT
[ -n "$SOCKET"   ] && MAKUOSAN_SOCK=$SOCKET

# Check that networking is up.
[ "${NETWORKING}" = "yes" ] || exit 0
[ -x /usr/sbin/makuosan ]   || exit 1

RETVAL=0
prog="makuosan"

start(){
    # Check config.
    if [ -z "${MAKUOSAN_BASE}" ]; then
        echo "base directory setting (MAKUOSAN_BASE) is empty."
        exit 1
    fi
    if [ ! -d "${MAKUOSAN_BASE}" ]; then
        echo "${MAKUOSAN_BASE} is not exists."
        exit 1
    fi
    if [ -z "$LOGLEVEL" ]; then
      LOGLEVEL=1
    fi
    if [ -n "$MCAST_ADDRESS" ]; then
      OPTIONS="-m $MCAST_ADDRESS $OPTIONS"
    fi
    if [ -n "$IP_ADDRESS" ]; then
      OPTIONS="-l $IP_ADDRESS $OPTIONS"
    fi
    OPTIONS="-d $LOGLEVEL $OPTIONS"
    echo -n $"Starting $prog: "
    $prog $OPTIONS 2>/tmp/makuosan.$$
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      touch /var/lock/subsys/$prog
      p=`egrep '^pid ' /tmp/makuosan.$$ | cut -f 2 -d:`
      echo $p > /var/run/${prog}.pid
      echo_success
    else
      echo_failure
    fi
    rm -f /tmp/makuosan.$$
    echo
    return $RETVAL
}

stop(){
    echo -n $"Stopping $prog: "
    killproc $prog
    RETVAL=$?
    if [ $RETVAL -eq 0 ] ; then
        rm -f /var/lock/subsys/$prog
        rm -f /var/run/${prog}.pid
    fi
    echo
    return $RETVAL
}

status(){
  OPT="-c tcp:127.0.0.1:5000"
  [ -z "$PORT"          ] && PORT=5000
  [ -n "$IP_ADDRESS"    ] && OPT="-c tcp:$IPADDRESS:$PORT"
  [ -n "$MAKUOSAN_SOCK" ] && OPT="-c $MAKUOSAN_SOCK"
  msync $OPT --status
}

restart(){
    stop
    start
}

# See how we were called.
case "$1" in
    start)
	start
	;;
    stop)
	stop
	;;
    status)
	status
	;;
    restart)
	restart
	;;
    *)
	echo $"Usage: $0 {start|stop|status|restart}"
	RETVAL=1
esac

exit $RETVAL