summaryrefslogtreecommitdiff
path: root/src/pmlogger/rc_pmlogger
diff options
context:
space:
mode:
Diffstat (limited to 'src/pmlogger/rc_pmlogger')
-rw-r--r--src/pmlogger/rc_pmlogger301
1 files changed, 301 insertions, 0 deletions
diff --git a/src/pmlogger/rc_pmlogger b/src/pmlogger/rc_pmlogger
new file mode 100644
index 0000000..251b43b
--- /dev/null
+++ b/src/pmlogger/rc_pmlogger
@@ -0,0 +1,301 @@
+#!/bin/sh
+#
+# Copyright (c) 2012 Red Hat.
+# Copyright (c) 2000-2008 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.
+#
+# Start or Stop the Performance Co-Pilot pmlogger processes.
+#
+# The following is for chkconfig on RedHat based systems
+# chkconfig: 2345 94 06
+# description: pmlogger is a performance metrics logger for the Performance Co-Pilot (PCP)
+#
+# The following is for insserv(1) based systems,
+# e.g. SuSE, where chkconfig is a perl script.
+### BEGIN INIT INFO
+# Provides: pmlogger
+# Required-Start: $local_fs
+# Should-Start: $network $remote_fs $syslog $time $pmcd
+# Required-Stop: $local_fs
+# Should-Stop: $network $remote_fs $syslog $pmcd
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Control pmlogger (the performance metrics logger for PCP)
+# Description: Configure and control pmlogger (the performance metrics logger for the Performance Co-Pilot)
+### END INIT INFO
+
+. $PCP_DIR/etc/pcp.env
+. $PCP_SHARE_DIR/lib/rc-proc.sh
+
+PMLOGCTRL=$PCP_PMLOGGERCONTROL_PATH
+PMLOGGER=$PCP_BINADM_DIR/pmlogger
+prog=$PCP_RC_DIR/`basename $0`
+
+# search for your mail agent of choice ...
+#
+MAIL=''
+for try in Mail mail email
+do
+ if which $try >/dev/null 2>&1
+ then
+ MAIL=$try
+ break
+ fi
+done
+
+tmp=`mktemp -d /var/tmp/pcp.XXXXXXXXX` || exit 1
+status=1
+trap "rm -rf $tmp; exit \$status" 0 1 2 3 15
+
+if is_chkconfig_on pmlogger
+then
+ PMLOGGER_CTL=on
+else
+ PMLOGGER_CTL=off
+fi
+
+VERBOSE_CTL=on
+
+case "$PCP_PLATFORM"
+in
+ mingw)
+ # nothing we can usefully do here, skip the test
+ #
+ IAM=0
+ ;;
+
+ *)
+ # standard Unix/Linux style test
+ #
+ ID=id
+ IAM=`$ID -u 2>/dev/null`
+ if [ -z "$IAM" ]
+ then
+ # do it the hardway
+ #
+ IAM=`$ID | sed -e 's/.*uid=//' -e 's/(.*//'`
+ fi
+ ;;
+esac
+
+# Note: _start_pmcheck() runs in the background, in parallel with
+# the rest of the script. It might complete well after the caller
+# so tmpfile handling is especially problematic. Goal is to speed
+# bootup by starting potentially slow (remote monitoring) pmlogger
+# processes in the background.
+#
+_start_pmcheck()
+{
+ bgstatus=0
+ bgtmp=`mktemp -d /var/tmp/pcp.XXXXXXXXX` || exit 1
+ trap "rm -rf $bgtmp; exit \$bgstatus" 0 1 2 3 15
+
+ pmlogger_check $VFLAG >$bgtmp/pmcheck.out 2>$bgtmp/pmcheck
+ bgstatus=$?
+ if [ -s $bgtmp/pmcheck ]
+ then
+ $PCP_BINADM_DIR/pmpost "pmlogger_check failed in $prog, mailing output to root"
+ if [ ! -z "$MAIL" ]
+ then
+ $MAIL -s "pmlogger_check failed in $prog" root <$bgtmp/pmcheck
+ else
+ echo "$prog: pmlogger_check failed ..."
+ cat $bgtmp/pmcheck
+ fi
+ fi
+ exit $bgstatus # co-process is now complete
+}
+
+_start_pmlogger()
+{
+ if which pmlogger_check >/dev/null 2>&1
+ then
+ # pmlogger_check uses $PMLOGCTRL to start everything that is needed
+ #
+ if [ ! -f $PMLOGCTRL ]
+ then
+ echo "$prog:"'
+Error: PCP archive logger control file '$PMLOGCTRL'
+ is missing! Cannot start any Performance Co-Pilot archive logger(s).'
+ # failure
+ false
+ else
+ # really start the pmlogger instances based on the control file.
+ # done in the background to avoid delaying the init script,
+ # failures are notified by mail
+ #
+ $ECHO $PCP_ECHO_N "Starting pmlogger ..." "$PCP_ECHO_C"
+ _start_pmcheck &
+ # success
+ true
+ fi
+ else
+ echo "$prog:"'
+Warning: Performance Co-Pilot installation is incomplete (at least the
+ script "pmlogger_check" is missing) and the PCP archive logger(s)
+ cannot be started.'
+ # failure
+ false
+ fi
+ $RC_STATUS -v
+}
+
+_shutdown()
+{
+ # Is any pmlogger running?
+ #
+ _get_pids_by_name pmlogger >$tmp/tmp
+ if [ ! -s $tmp/tmp ]
+ then
+ [ "$1" = verbose ] && echo "$prog: pmlogger not running"
+ return 0
+ fi
+
+ [ "$1" = quietly ] || \
+ $ECHO $PCP_ECHO_N "Stopping pmlogger ...""$PCP_ECHO_C"
+
+ # Terminate those pmloggers started by either pmlogger_check or
+ # pmlogger_daily ... relies on the -m option to pmlogger and the
+ # annotation in the (optional) 4th line of the port map files
+ #
+ for pid in `cat $tmp/tmp`
+ do
+ if [ -f "$PCP_TMP_DIR/pmlogger/$pid" ]
+ then
+ note=`sed -n -e 4p <"$PCP_TMP_DIR/pmlogger/$pid"`
+ if [ "$note" = pmlogger_check -o "$note" = pmlogger_daily ]
+ then
+ pmsignal -s TERM $pid
+ fi
+ fi
+ done
+ $RC_STATUS -v
+ $PCP_BINADM_DIR/pmpost "stop pmlogger from $prog"
+}
+
+_usage()
+{
+ echo "Usage: $prog [-v] {start|restart|condrestart|stop|status|reload|force-reload}"
+}
+
+while getopts v c
+do
+ case $c
+ in
+ v) # force verbose
+ VERBOSE_CTL=on
+ ;;
+
+ *)
+ _usage
+ exit 1
+ ;;
+ esac
+done
+shift `expr $OPTIND - 1`
+
+if [ $VERBOSE_CTL = on ]
+then # For a verbose startup and shutdown
+ ECHO=$PCP_ECHO_PROG
+ REBUILDOPT=''
+ VFLAG='-V'
+else # For a quiet startup and shutdown
+ ECHO=:
+ REBUILDOPT=-s
+ VFLAG=
+fi
+
+if [ "$IAM" != 0 -a "$1" != "status" ]
+then
+ if [ -n "$PCP_DIR" ]
+ then
+ : running in a non-default installation, do not need to be root
+ else
+ echo "$prog:"'
+Error: You must be root (uid 0) to start or stop the Performance Co-Pilot loggers.'
+ exit
+ fi
+fi
+
+# First reset status of this service
+$RC_RESET
+
+# Return values acc. to LSB for all commands but status:
+# 0 - success
+# 1 - misc error
+# 2 - invalid or excess args
+# 3 - unimplemented feature (e.g. reload)
+# 4 - insufficient privilege
+# 5 - program not installed
+# 6 - program not configured
+#
+# Note that starting an already running service, stopping
+# or restarting a not-running service as well as the restart
+# with force-reload (in case signalling is not supported) are
+# considered a success.
+case "$1" in
+
+ 'start'|'restart'|'condrestart'|'reload'|'force-reload')
+ if [ "$1" = "condrestart" ] && ! is_chkconfig_on pmlogger
+ then
+ status=0
+ exit
+ fi
+ _shutdown quietly
+
+ # pmlogger messages should go to stderr, not the GUI notifiers
+ #
+ unset PCP_STDERR
+
+ if [ -x $PMLOGGER ]
+ then
+ if [ "$PMLOGGER_CTL" = on ]
+ then
+ _start_pmlogger
+ fi
+ fi
+
+ status=0
+ ;;
+
+ 'stop')
+ _shutdown verbose
+ status=0
+ ;;
+
+ 'status')
+ # NOTE: $RC_CHECKPROC returns LSB compliant status values.
+ $ECHO $PCP_ECHO_N "Checking for pmlogger:" "$PCP_ECHO_C"
+ if [ -r /etc/rc.status ]
+ then
+ # SuSE
+ $RC_CHECKPROC $PMLOGGER
+ $RC_STATUS -v
+ status=$?
+ else
+ # not SuSE
+ $RC_CHECKPROC $PMLOGGER
+ status=$?
+ if [ $status -eq 0 ]
+ then
+ $ECHO running
+ else
+ $ECHO stopped
+ fi
+ fi
+ ;;
+
+ *)
+ _usage
+ ;;
+esac
+