#!/bin/bash

# Copyright 2000-2001, Compaq Computer Corporation.  All rights reserved.
#
# cmafdtn init file for Compaq Foundation Agents
#
# See "man chkconfig" for information on next two lines
# chkconfig: - 99 1
# description: Compaq Foundation Agents - Linux
#
# Other Compaq Management Agents for Servers
#    cmasvr  : Compaq Server Agents - Linux
#    cmastor : Compaq Storage Agents - Linux
#    cmanic  : Compaq NIC Agents - Linux

LOGFILE=/var/spool/compaq/cma.log
NAME="Compaq Foundation Agents"
ETCROOT="/opt/compaq/foundation/etc"
PNAME="cmafdtn"
PNAMES="cmafdtnpeerd cmahostd cmathreshd cmawebd"
SNMPD="snmpd"
USAGE="Usage: $PNAME {star|stop|restart|status} [cmafdtnpeerd|cmahostd|cmathreshd|cmawebd]..."

cmaecho () {
  echo $*
  echo $* >>$LOGFILE 2>&1
}

cmausage () {
  cmaecho $USAGE
}

if [ "$#" -lt 1 ]; then
  cmausage
  exit 1
fi

OPCODE=$1
shift
AGENTS=$*

for i in $AGENTS; do
  FOUND=0
  for j in $PNAMES; do
    if [ $i = $j ]; then
      FOUND=1
      break;
    fi
  done
  if [ $FOUND = "0" ]; then
    cmausage
    exit 1
  fi
done

# Identify OS Vendor
if [ -f /etc/redhat-release ]; then
  VENDOR="RedHat"
elif [ -f /etc/SuSE-release ]; then
  VENDOR="SuSE"
else
  echo "ERROR: the Linux OS running on your system is not supported!"
  exit 1
fi

# echo "OPCODE = $OPCODE, AGENTS = $AGENTS"
# echo "VENDOR = $VENDOR"

case "$VENDOR" in
  RedHat)
        RETVAL=0
        # source function library
        . /etc/rc.d/init.d/functions
        PATH=/opt/compaq/foundation/bin:$PATH
        case "$OPCODE" in
          start)
                snmppid=`pidof $SNMPD`
                if [ -z "$snmppid" ]; then
        	  cmaecho
                  cmaecho "Can not start $PNAME! ($SNMPD is not running)"
        	  RETVAL=1
                else
                  if [ -z "$AGENTS" ]; then #start all agents
        	    cmaecho "Starting $NAME ($PNAME): All agents"
                    for AGENT in $PNAMES; do
                      [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT start
                    done
                  else
        	    cmaecho "Starting $NAME ($PNAME): $AGENTS"
                    for AGENT in $AGENTS; do
                      [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT start
                    done
                  fi
        	  touch /var/lock/subsys/$PNAME
                fi
        	cmaecho
        	;;
          stop)
                if [ -z "$AGENTS" ]; then #stop all agents
        	  cmaecho "Shutting down $NAME ($PNAME): All agents"
                  for AGENT in $PNAMES; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT stop
                  done
                else
        	  cmaecho "Shutting down $NAME ($PNAME): $AGENTS"
                  for AGENT in $AGENTS; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT stop
                  done
                fi
                REMOVELOCK=1
                for AGENT in $PNAMES; do
                  pidlist=`pidof -o $$ $AGENT`
                  if [ ! -z "$pidlist" ]; then
                    REMOVELOCK=0
                    break;
                  fi
                done
        	[ $REMOVELOCK = "1" ] && rm -f /var/lock/subsys/$PNAME
        	cmaecho
        	;;
          restart)
                if [ -z "$AGENTS" ]; then #restart all agents
        	  cmaecho "Re-starting $NAME ($PNAME): All agents"
                  for AGENT in $PNAMES; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT restart
                  done
                else
        	  cmaecho "Re-starting $NAME ($PNAME): $AGENTS"
                  for AGENT in $AGENTS; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT restart
                  done
                fi
        	cmaecho
                ;;
          status)
                if [ -z "$AGENTS" ]; then #status all agents
                  for AGENT in $PNAMES; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT status
                  done
                else
                  for AGENT in $AGENTS; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT status
                  done
                fi
        	RETVAL=$?
                ;;
          *)
        	cmausage
        	exit 1
        esac

        exit $RETVAL
        ;;
  SuSE)
        RETVAL=0
        . /etc/rc.config
        PATH=/opt/compaq/foundation/bin:$PATH
        case "$OPCODE" in
          start)
                snmppid=`pidof $SNMPD`
                if [ -z "$snmppid" ]; then
        	  cmaecho
                  cmaecho "Can not start $PNAME! ($SNMPD is not running)"
        	  RETVAL=1
                else
                  if [ -z "$AGENTS" ]; then # start all agents
        	    cmaecho "Starting $NAME ($PNAME): All agents"
                    for AGENT in $PNAMES; do
                      [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT start
                    done
                  else
        	    cmaecho "Starting $NAME ($PNAME): $AGENTS"
                    for AGENT in $AGENTS; do
                      [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT start
                    done
                  fi
                fi
        	cmaecho
        	;;
          stop)
                if [ -z "$AGENTS" ]; then #stop all agents
        	  cmaecho "Shutting down $NAME ($PNAME): All agents"
                  for AGENT in $PNAMES; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT stop
                  done
                else
        	  cmaecho "Shutting down $NAME ($PNAME): $AGENTS"
                  for AGENT in $AGENTS; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT stop
                  done
                fi
        	cmaecho
        	;;
          restart)
                if [ -z "$AGENTS" ]; then #restart all agents
        	  cmaecho "Re-starting $NAME ($PNAME): All agents"
                  for AGENT in $PNAMES; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT restart
                  done
                else
        	  cmaecho "Re-starting $NAME ($PNAME): $AGENTS"
                  for AGENT in $AGENTS; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT restart
                  done
                fi
        	cmaecho
                ;;
          status)
                if [ -z "$AGENTS" ]; then #status all agents
                  for AGENT in $PNAMES; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT status
                  done
                else
                  for AGENT in $AGENTS; do
                    [ -x $ETCROOT/$AGENT ] && $ETCROOT/$AGENT status
                  done
                fi
        	RETVAL=$?
                ;;
          *)
        	cmausage
        	exit 1
        esac

        exit $RETVAL
        ;;
     *)
        cmaecho "ERROR: Can't identify Linux OS vendor $VENDOR"
        exit 1
esac
