#!/bin/sh
# PCP QA Test No. 1123
# pmchart "views" that are executable
#
# Copyright (c) 2017 Ken McDonell.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"
status=0	# success is the default!

. ./common.qt

_cleanup()
{
    # reset pmcd's timeout
    #
    pmstore pmcd.control.timeout 5 >>$seq.full
}

_filter()
{
    sed \
	-e '/QStandardPaths: XDG_RUNTIME_DIR not set, defaulting/d' \
    # end
}

trap "_cleanup_qt; _cleanup; exit \$status" 0 1 2 3 15

which pmchart >/dev/null 2>&1 || _notrun "pmchart not installed"
[ -f $PCP_VAR_DIR/config/pmchart/BusyCPU ] || _notrun "BusyCPU view not installed"

if _avail_metric proc.psinfo.utime
then
    :
elif _avail_metric proc.psusage.utime
then
    :
else
    _notrun "neither proc.psinfo.utime nor proc.psusage.utime are available"
fi

case `hostname`
in
    shard)
	    # cannot explain or understand this, but the condition appears
	    # to be entirely reproducible - Aug 2018
	    #
	    _notrun "pmchart hangs for this test on `hostname`"
	    ;;
esac

# cannot rm $tmp because common.qt may have already created a directory
# for $XDG_RUNTIME_DIR below there
#
$sudo rm -rf $tmp.* $seq.full

# real QA test starts here

echo "BusyCPU ..."
# some CPU load
src/hanoi 200 &
pid=$!

# things may be busy now ... 8^)
#
export PMCD_CONNECT_TIMEOUT=30
export PMCD_REQUEST_TIMEOUT=30
pmstore pmcd.control.timeout 30 >>$seq.full

PCP_STDERR= $PCP_VAR_DIR/config/pmchart/BusyCPU \
| tee -a $here/$seq.full \
| grep 'Plot .* Instance ' \
| wc -l \
| $PCP_AWK_PROG '
1 <= $1 && $1 <= 10	{ print "Found between 1 and 10 busy processes"; next }
			{ print "Oops, found " $1 " busy processes" }'

PCP_STDERR= pmchart -c BusyCPU -C -C >$tmp.out 2>&1
( kill $pid >/dev/null 2>&1 ) &

# some of the processes may have exited, so make that noise
# go away
#
cat $tmp.out >>$seq.full
sed <$tmp.out \
    -e '/^pmchart: Error: local::proc\..*\.utime: IPC protocol failure/d' \
    -e '/^pmchart: Error: local::proc\..*\.utime: Unknown or illegal instance/d' \
    -e '/^Error: .*\/config\/pmchart\/Busy\CPU/d' \
    -e '/^Failed to plot metric "proc.psinfo.utime/d' \
    -e '/^host local::/d' \
    -e '/^Unknown or illegal instance identifier/d' \
| _filter

echo
echo "QA test ..."
cat <<'End-of-File' >$tmp.sh
#!/bin/sh

cat <<EOF
#pmchart
Version 2.0 host dynamic

Chart Title "CPU Utilization [`hostname` on `date +'%Y-%m-%d'`]" Style stacking
        Plot Color #-cycle Host * Metric kernel.all.cpu.user
        Plot Color #-cycle Host * Metric kernel.all.cpu.sys
EOF
End-of-File
chmod 755 $tmp.sh

# note -c argument cannot start with a /
#
cd `dirname $tmp`
echo '-- first with . in $PATH ...'
export PATH=.:$PATH
pmchart -c `basename $tmp.sh` -C -C 2>&1 \
| _filter

echo '-- now without . in $PATH, but ./ prefix for config arg ...'
PATH=`echo "$PATH" | sed -e 's/^\.://' -e 's/:\.$//' -e 's/:\.:/:/g'`
export PATH
pmchart -c ./`basename $tmp.sh` -C -C 2>&1 \
| _filter

# all done
exit
