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
|
#!/bin/sh
# PCP QA Test No. 1228
# pmiectl - mixed class and hostname tests - status action
#
# see qa/1205 for the pmlogctl variant of this test
#
# Copyright (c) 2020 Ken McDonell. All Rights Reserved.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
if pmiectl -c default status 2>/dev/null | grep ' default ' >/dev/null
then
_notrun "at least one pmie already defined for \"default\" class"
fi
_cleanup()
{
echo "_cleanup: ..." >>$seq_full
cd $here
$sudo pmiectl -f -c default destroy localhost >>$seq_full 2>&1
$sudo pmiectl -af -c $seq destroy >>$seq_full 2>&1
$sudo rm -rf $tmp $tmp.*
for dir in $seq-localhost $seq-LOCALHOSTNAME localhost $seq-`hostname`
do
[ -d "$PCP_LOG_DIR/pmie/$dir" ] && $sudo rm -rf "$PCP_LOG_DIR/pmie/$dir"
done
}
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
localhost=`hostname`
_filter()
{
tee -a $seq_full \
| sed \
-e '/^# created by pmiectl/s/ on .*/ on DATE/' \
-e "s;$tmp\.;TMP.;g" \
-e "s;$PCP_BINADM_DIR/;PCP_BINADM_DIR/;g" \
-e "s;$PCP_LOG_DIR/pmie/;PCP_LOG_DIR/pmie/;g" \
-e "s;$PCP_TMP_DIR/;PCP_TMP_DIR/;g" \
-e "s;$PCP_TMPFILE_DIR/pmiectl\.[^/]*;PCP_TMPFILE_DIR/pmiectl.XXXXX;g" \
-e "s;$PCP_ETC_DIR/;PCP_ETC_DIR/;g" \
# end
}
# Build filter for any existing non-qa and non-primary pmie instances.
# The "pmcd Host" and "Class" fields from the pmiectl status output
# should suffice to uniquely identify each.
#
pmiectl status 2>&1 \
| $PCP_AWK_PROG >$tmp.awk '
NR == 1 { next }
NF >= 5 { if ($4 == "primary") next
print "$1 == \"" $1 "\" && $4 == \"" $4 "\" { next }"
}
END { print "{ print }" }'
# Note status command output order is non-deterministic, hence the sort
# at the end
#
_filter_status()
{
tee -a $seq_full \
| $PCP_AWK_PROG -f $tmp.awk \
| sed \
-e "/^`hostname` .* primary /d" \
-e 's/[ ][ ]*/ /g' \
-e "s/^$localhost /LOCALHOSTNAME /" \
| $PCP_AWK_PROG '
$2 ~ /^[0-9][0-9]*$/ { $2 = "<nrule>" }
$3 ~ /^[0-9][0-9]*$/ { $3 = "<neval>" }
$5 ~ /^[0-9][0-9]*$/ { $5 = "<pid>" }
{ print }' >$tmp.tmp
head -1 $tmp.tmp
sed -e '1d' $tmp.tmp | LC_COLLATE=POSIX sort
}
cat <<End-of-File >$tmp.policy
[class]
$seq
[ident]
$seq-%h
[control]
%h n n PCP_LOG_DIR/pmie/%i/pmie.log -c $tmp.config
End-of-File
cat <<End-of-File >$tmp.config
delta = 1 sec;
some_inst pmcd.pmie.eval.actual > 0 ->
print "pmie is alive: rule evals:" " [%i] %v";
End-of-File
# real QA test starts here
echo '== -N -V -p -c create' | tee -a $seq_full
pmiectl -N -V -p $tmp.policy -c $seq create localhost 2>&1 | _filter
echo | tee -a $seq_full
echo '== -p -c create' | tee -a $seq_full
$sudo pmiectl -p $tmp.policy -c $seq create localhost | _filter
$sudo pmiectl -p $tmp.policy -c $seq create LOCALHOSTNAME | _filter
$sudo pmiectl create localhost | _filter
# exercise all the variants for "status"
# no args => all instances (hosts + classes)
echo '== status' | tee -a $seq_full
pmiectl status | _filter_status
# one host & all classes
echo '== status localhost' | tee -a $seq_full
pmiectl status localhost | _filter_status
# multiple hosts & all classes
echo '== status localhost `hostname`' | tee -a $seq_full
pmiectl status localhost `hostname` | _filter_status
# one class & all hosts
echo '== -c status' | tee -a $seq_full
pmiectl -c $seq status | _filter_status
# one class and one host
echo '== -c status localhost' | tee -a $seq_full
pmiectl -c $seq status localhost | _filter_status
# one class and two hosts
echo '== -c status localhost `hostname`' | tee -a $seq_full
pmiectl -c $seq status localhost `hostname` | _filter_status
status=0
exit
|