#! /bin/sh
#
# Copyright (c) 2011-2012 Red Hat.
# Copyright (c) 1997 Silicon Graphics, Inc.  All Rights Reserved.
# 
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
# 
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
# 
# Install the logger PMDA and/or PMNS
#

. $PCP_DIR/etc/pcp.env
. $PCP_SHARE_DIR/lib/pmdaproc.sh

iam=logger
pmda_interface=5
forced_restart=false

pmdaSetup

# be careful that mortals cannot write any configuration files, as
# these would present a security problem
#
umask 022

# PMDA variables
#
configfile=""

_parsedefaults()
{
    echo "Extracting options from current installation ..."
    while getopts D:d:l c
    do
    	case $c in
	    \?)		echo "Warning: Unrecognized option in $PCP_PMCDCONF_PATH"
			echo "	       Remove line for the $iam PMDA in $PCP_PMCDCONF_PATH and re-run ./Install"
	    		exit 2;;
	    * )		;;
	esac
    done
    eval configfile='$'$OPTIND
}

# Get logfile(s) to monitor
if $do_pmda
then
    # set options from $PCP_PMCDCONF_PATH, if possible
    #
    ans=`$PCP_AWK_PROG <$PCP_PMCDCONF_PATH '
$1 == "'$iam'"	{ printf "%s",$6
		  for (i=7;i<=NF;i++) printf " %s",$i
		  print ""
	        }'`
    if [ ! -z "$ans" ]
    then
	_parsedefaults $ans
    fi

    # go figure out which configuration file to use ...
    #
    #default_configfile=./sample.conf
    default_configfile=''
    pmdaChooseConfigFile
    if [ ! -f "$configfile" ]
    then
	$PCP_ECHO_PROG $PCP_ECHO_N "Do you wish to enter logfile names and paths manually? [y] ""$PCP_ECHO_C"
	read ans
	if [ "X$ans" = "Xy" -o "X$ans" = "XY" -o -z "$ans" ]
	then
	    configfile="$configdir/$iam.conf"
	    if [ -f "$configfile" ]
	    then
		    echo "Removing old configuration file \"$configfile\""
		    rm -f "$configfile"
		    if [ -f "$configfile" ]
		    then
			    echo "Cannot remove \"$configfile\""
			    exit 1
		    fi
	    fi

	    echo
	    echo \
'Enter the PMNS name and logfile path.  If the  path ends in "|", the
filename is interpreted as a command which will output data.

An empty line terminates the logfile selection process and there must
be at least one logfile specified.  '

	    args=""
	    touch "$configfile"
	    if [ ! -f "$configfile" ]
	    then
		echo "Installation aborted."
		exit 1
	    fi

	    while [ ! -s "$configfile" ]
	    do
		while true
		do
		    $PCP_ECHO_PROG $PCP_ECHO_N "Logfile PMNS name: ""$PCP_ECHO_C"
		    read name
		    [ -z "$name" ] && break

		    # Check name for invalid chars.
		    if ! echo $name | grep "^[A-Za-z][_A-Za-z0-9]*$" > /dev/null
		    then
			echo \
"Invalid characters in PMNS name: \"$name\".
Names must start with an alphabetic character ([a-zA-Z]).  The rest of
the characters in the name must be alphanumeric ([a-zA-Z0-9]) or an
underscore ('_')."
			continue
		    fi

		    # Make sure name isn't already in the logfile.
		    if grep "^${name}[ \t]" "$configfile" >/dev/null
		    then
			echo "Sorry, logfile PMNS name \"$name\" already specified.  Please try again."
			continue
		    fi

		    $PCP_ECHO_PROG $PCP_ECHO_N "Logfile pathname: ""$PCP_ECHO_C"
		    read pathname
		    [ -z "$pathname" ] && break
		    if grep "[ \t]${pathname}$" "$configfile" >/dev/null
		    then
			echo "Sorry, pathname \"$pathname\" already specified.  Please try again."
			continue
		    fi

		    $PCP_ECHO_PROG $PCP_ECHO_N "Restricted access [n]: ""$PCP_ECHO_C"
		    read restrict
		    if [ "$restrict" = "y" -o "$restrict" = "yes" ]; then
			restrict="y"
		    else
			restrict="n"
		    fi

		    echo "$name $restrict $pathname" >>"$configfile"
		done
	    done
	else
	    echo ""
	    echo "Error: Abandoning installation as no configuration file was specified."
	    exit 1
	fi
    fi

    args="$configfile"
fi

pmdaInstall

exit 0
