#!/bin/sh
#
# $Header: has/utl/ochadctl.sbs /unix/4 2016/06/08 18:42:06 wmiyoshi Exp $
#
#
# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
#
#    NAME
#     ochadctl - Cluster Health Analysis Control Utility
#
#    DESCRIPTION
#     Utility to control OCHAD
#
#   NOTES
#     Supported usage:
#     1. ochadctl start
#     2. ochadctl clean
#
#    MODIFIED   (MM/DD/YY)
#     wmiyoshi   05/19/16 - Bug 23255143 - pid matching issue in agent
#     wmiyoshi   04/08/16 - Bug 22808320 - Solaris/SPARC high CPU usage with
#                           check:jni
#     wmiyoshi   03/31/16 - Do not overwrite the previous output file
#     wmiyoshi   08/14/15 - Move generic code to perl script (ochadctl.pl)
#     wmiyoshi   08/14/15 - Branch for UNIX
#     wmiyoshi   07/27/15 - Remove obsolete command line options
#     wmiyoshi   07/27/15 - Rollback temporary fix for ucp.jar (bug 21219367)
#     wmiyoshi   06/08/15 - Add jdbc8.jar in the classpath
#     wmiyoshi   06/11/15 - Get logging level by OCHAD_LOGGING_LEVEL
#     wmiyoshi   06/11/15 - Use checked-in ucp.jar for bug 21219367
#     wmiyoshi   06/02/15 - Fix bug 20920651. Always create files in ADR.
#     sbasu      06/10/15 - Replace ojdbc v6 with v8
#     wmiyoshi   01/27/15 - Remove smile.jar from classpath
#     wmiyoshi   12/08/14 - Add clsce.jar to CLASSPATH
#     wmiyoshi   11/17/14 - Add ucp.jar
#     wmiyoshi   09/04/14 - Add OCHAD_PROPERTY_DEFS environment variable
#     wmiyoshi   03/24/14 - Load mode/project from a file
#     wmiyoshi   01/16/14 - Copy contents from chactl.sbs@@/main/11
#     samjo      11/04/13 - Change pwd and name of crash file
#     samjo      10/08/13 - Bug 17561666, 17571176
#     samjo      09/16/13 - Add offline mode
#     samjo      08/12/13 - Parse USR_ORA_ENV
#     samjo      07/15/13 - Add plugins.jar
#     samjo      07/29/13 - Add support for server pool
#     wmiyoshi   07/05/13 - Add srvmasm.jar in CLASSPATH
#     wmiyoshi   06/12/13 - Fix for emulated node env
#     wmiyoshi   06/07/13 - Change calibration parameters
#     samjo      06/05/13 - Fix warnings
#     wmiyoshi   05/29/13 - Add FTE and related jars
#     wmiyoshi   04/15/13 - change OCHAD main driver class
#     samjo      01/18/13 - Script to manage OCHAD
#     samjo      01/18/13 - Creation
#

# Preserve the command arg
ACTION=$1

OHOME=%ORACLE_HOME%
ORACLE_HOME=${OHOME}
export ORACLE_HOME

# redirect stdout/stderr to the output file
HOSTSTR=`$ORACLE_HOME/bin/crsctl get hostname`
export HOSTSTR
output_dir=$ORACLE_BASE/crsdata/$HOSTSTR/output
output_file=$output_dir/ochadOUT.trc
exec >> $output_file
exec 2>&1

# PERL Variables
PERL_DIR=$OHOME/perl
PERL_BIN=$PERL_DIR/bin
export PERL_BIN
PERL5LIB=$PERL_DIR/lib
export PERL5LIB

# JAVA_HOME
JAVA_HOME=$OHOME/jdk
export JAVA_HOME

# turn on output capture
_CRS_UI_FMT=-v
export _CRS_UI_FMT

# JRE Server options
JRE_OPTIONS=
JRE_OPTIONS_SERVER="-server"
SIGQUIT_SLEEP_INTERVAL=0

##################################
#### Platform Specific Checks ####
##################################
# Set the shared library path for JNI shared libraries
# A few platforms use an environment variable other than LD_LIBRARY_PATH
PLATFORM=`uname`
export PLATFORM

case $PLATFORM in 
HP-UX)
     LD_LIBRARY_PATH=$OHOME/lib:$OHOME/srvm/lib:$SHLIB_PATH
     export LD_LIBRARY_PATH
     JRE_OPTIONS="-d64"
     ;;
AIX)
     LIBPATH=$OHOME/lib:$OHOME/srvm/lib:$LIBPATH
     export LIBPATH
     JRE_OPTIONS="-d64"
     JRE_OPTIONS_SERVER="-server $JRE_HEAP_OPTIONS"

     # Bug 11857338 - On AIX, add sleep after SIGQUIT
     # (because the JVM handles SIGQUIT asynchronously,
     # it needs extra time before we issue SIGKILL
     # to produce the requested dump)
     SIGQUIT_SLEEP_INTERVAL=5
     GRID_USER=`/usr/bin/whoami`
     export GRID_USER
     ;;
Linux)
     LD_LIBRARY_PATH=$OHOME/lib:$OHOME/srvm/lib:$LD_LIBRARY_PATH
     # Linux ( ppc64 || s390x ) => LD_LIBRARY_PATH lib32
     ARCH=`uname -m`;
     if [ "$ARCH" = "ppc64" -o "$ARCH" = "s390x" ]
     then
       JRE_OPTIONS="-d64"
       JRE_OPTIONS_SERVER="-server $JRE_HEAP_OPTIONS"
     fi
     export LD_LIBRARY_PATH
     ;;
SunOS) 
     LD_LIBRARY_PATH_64=$OHOME/lib:$OHOME/srvm/lib:$LD_LIBRARY_PATH_64
     export LD_LIBRARY_PATH_64
     LD_LIBRARY_PATH=$OHOME/lib:$OHOME/srvm/lib:$LD_LIBRARY_PATH
     export LD_LIBRARY_PATH
     JRE_OPTIONS="-d64"
     ;;
OSF1) LD_LIBRARY_PATH=$OHOME/lib:$OHOME/srvm/lib:$LD_LIBRARY_PATH
      export LD_LIBRARY_PATH
      ;;
Darwin)
     DYLD_LIBRARY_PATH=$OHOME/lib:$OHOME/srvm/lib:$DYLD_LIBRARY_PATH
     export DYLD_LIBRARY_PATH
      ;;
*)   if [ -d $OHOME/lib32 ];
     then
       LD_LIBRARY_PATH=$OHOME/lib32:$OHOME/srvm/lib32:$LD_LIBRARY_PATH
     else
       LD_LIBRARY_PATH=$OHOME/lib:$OHOME/srvm/lib:$LD_LIBRARY_PATH
     fi
     export LD_LIBRARY_PATH
     ;;
esac

JRE_OPTIONS="$JRE_OPTIONS $OCHAD_JRE_OPTIONS"

export JRE_OPTIONS
export JRE_OPTIONS_SERVER

ECHO="/bin/echo"
CDF="cd"

# change OCHAD cwd
eval '$CDF $output_dir > /dev/null 2>&1'
CDRC="$?"
if [ $CDRC -ne "0" ]; then
    $ECHO "Could not change CWD"
fi


# Main()

case "$ACTION" in
  'start')
    $PERL_BIN/perl -I$OHOME/lib $OHOME/bin/ochadctl.pl start
    STARTRC="$?"
    $ECHO "Return code is $STARTRC"
    exit $STARTRC
    ;;

  'clean')
    # Kill OCHAD process
    $PERL_BIN/perl -I$OHOME/lib $OHOME/bin/ochadctl.pl clean $SIGQUIT_SLEEP_INTERVAL
    CLEANRC="$?"
    $ECHO "Return code is $CLEANRC"
    exit $CLEANRC
    ;;

    *)
    # Ignore action
    $ECHO "Ignoring unknown action $ACTION"
    UNKNOWNRC=0
    $ECHO "Return code is $UNKNOWNRC"
    exit $UNKNOWNRC
esac