1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
#! /bin/sh
# PCP QA Test No. 932
# Check PMCD state change notification, aka PMCD_ADD_AGENT
#
# Copyright (c) 2016 Red Hat, Inc.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard filters
. ./common.product
. ./common.filter
. ./common.check
signal=$PCP_BINADM_DIR/pmsignal
status=1
done_clean=false
LOCALHOST=`hostname`
LOGGING_DIR="$PCP_ARCHIVE_DIR"
_check_local_primary_archive || _notrun "primary pmlogger not writing locally"
if [ ! -f $LOGGING_DIR/$LOCALHOST/Latest ]
then
_notrun "no Latest folio for primary pmlogger (logpush?)"
# NOTREACHED
fi
_cleanup()
{
if $done_clean
then
:
else
echo "Restore pmcd.conf and restart PMCD ..."
if [ -f $tmp.pmcd.conf ]
then
$sudo cp $tmp.pmcd.conf $PCP_PMCDCONF_PATH
rm -f $tmp.pmcd.conf
fi
_restore_primary_logger
_service pmcd restart 2>&1 | _filter_pcp_restart
_wait_for_pmcd
_service pmlogger restart 2>&1 | _filter_pcp_restart
_wait_for_pmlogger
done_clean=true
fi
_restore_auto_restart pmcd
_restore_auto_restart pmlogger
rm -f $tmp.*
exit $status
}
trap "_cleanup" 0 1 2 3 15
# real QA test starts here
PMDA_PMCD_PATH=$PCP_PMDAS_DIR/pmcd/pmda_pmcd.$DSO_SUFFIX
# copy the pmcd config file to restore state later.
cp $PCP_PMCDCONF_PATH $tmp.pmcd.conf
# start from a known starting point
_stop_auto_restart pmcd
_stop_auto_restart pmlogger
if ! _service pmlogger stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmlogger_end || _exit 1
if ! _service pmcd stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmcd_end || _exit 1
cat <<End-of-File >$tmp.tmp
# Installed by PCP QA test $seq on `date`
pmcd 2 dso pmcd_init $PMDA_PMCD_PATH
sample 29 pipe binary $PCP_PMDAS_DIR/sample/pmdasample -d 29
simple 253 pipe binary /var/lib/pcp/pmdas/simple/pmdasimple -d 253
End-of-File
$sudo cp $tmp.tmp $PCP_PMCDCONF_PATH
_writable_primary_logger
if ! _service pmcd restart 2>&1; then _exit 1; fi \
| _filter_pcp_restart
_wait_for_pmcd || _exit 1
if ! _service pmlogger restart 2>&1; then _exit 1; fi \
| _filter_pcp_restart
_wait_for_pmlogger || _exit 1
# be prepared to retry ...
#
_talk_to_pmlogger()
{
_i=0
while [ $_i -lt 10 ]
do
if [ -n "$3" ]
then
( echo "$1"; echo "$2"; echo "$3" ) | pmlc >$tmp.out 2>&1
else
( echo "$1"; echo "$2" ) | pmlc >$tmp.out 2>&1
fi
if grep 'Error' $tmp.out >/dev/null
then
echo "_talk_to_pmlogger \"$1\" \"$2\" \"$3\": failed @ iter $_i" >>$seq_full
cat $tmp.out >>$seq_full
pmsleep 0.1
_i=`expr $_i + 1`
else
echo "_talk_to_pmlogger \"$1\" \"$2\" \"$3\": success @ iter $_i" >>$seq_full
break
fi
done
cat $tmp.out
}
# Reset pmlogger
echo "log sample.dynamic.meta.metric"
# Log the sample pmda's sample.dynamic.meta.metric
_talk_to_pmlogger 'connect primary' \
'log mandatory on 500 msec { sample.dynamic.meta.metric }'
# log a few samples
sleep 2
echo "archive contents before pmda simple restart..."
echo "expect no <mark> record"
echo "---------------------------------------------------------------"
pmafm $LOGGING_DIR/$LOCALHOST/Latest pmdumplog >$tmp.out 2>&1
grep -E '(<mark>)|(sample.dynamic.meta.metric)' $tmp.out \
| _filter_pmdumplog \
| uniq
echo "---------------------------------------------------------------"
# Restart the simple pmda by killing it and the getting pmcd to restart it (HUP).
# pmlogger should receive PMCD_ADD_AGENT, which should cause
# a <mark> record to be inserted into the archive.
echo "restart the simple pmda"
$sudo $signal -a -s TERM pmdasimple
sleep 1 # let the signal arrive and let pmdasimple exit
$sudo $signal -a -s HUP pmcd # ensure pmcd restarts the PMDA
sleep 1 # let the signal arrive and pmcd think about it
echo "archive contents after pmda simple restart..."
echo "expect <mark> record"
echo "---------------------------------------------------------------"
pmafm $LOGGING_DIR/$LOCALHOST/Latest pmdumplog >$tmp.out 2>&1
grep -E '(<mark>)|(sample.dynamic.meta.metric)' $tmp.out \
| _filter_pmdumplog \
| uniq
echo "---------------------------------------------------------------"
# Stop logging the sample pmda's sample.dynamic.meta.metric
_talk_to_pmlogger 'connect primary' \
'log mandatory off { sample.dynamic.meta.metric }' \
'flush'
echo >>$seq_full
echo "pmlogger log ..." >>$seq_full
cat $LOGGING_DIR/$LOCALHOST/pmlogger.log >>$seq_full
status=0
exit
|