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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
#! /bin/sh
# PCP QA Test No. 102
# pmlc parser/scanner/error handling
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard filters
. ./common.product
. ./common.filter
. ./common.check
_cleanup()
{
_restore_config $PCP_SYSCONFIG_DIR/pmcd
_restore_primary_logger
_service pmcd restart 2>&1 | _filter_pcp_restart
_wait_for_pmcd
_restore_auto_restart pmcd
_service pmlogger restart 2>&1 | _filter_pcp_restart
_wait_for_pmlogger
_restore_auto_restart pmlogger
$sudo rm -f $tmp $tmp.*
exit $status
}
status=1
trap "_cleanup" 0 1 2 3 15
_stop_auto_restart pmcd
_stop_auto_restart pmlogger
_filter_pmlc()
{
# error message mapping is due to differences between PCP_PLATFORMs
#
sed \
-e 's/connect [0-9][0-9]*/connect PID/' \
-e 's/Version [0-9].*/Version VERSION/' \
-e 's/^parse error/Syntax error/' \
-e 's/line [0-9]*/line NUM/g' \
-e 's/^syntax error/Syntax error/' \
-e 's/^Reason: Unknown or illegal.*$/Reason: No PMCD agent for domain of request/'
}
# if we're below the PMAPI (as opposed to sleeping in the main pmlogger
# loop) when SIGTERM is delivered, we risk seeing errors like
# pmGetInDom(29.2): IPC protocol failure
# and pmlogger will then exit ... treat these like the expected Info:
# ... Caught signal ... message
#
_my_logger_filter()
{
sed -e '/^_*pm.*: IPC protocol failure/s/.*/[DATE] pmlogger(PID) Info: pmlogger: Caught signal 15, exiting/'
}
_disable_agent_restart()
{
echo PMCD_RESTART_AGENTS=0 > $tmp.defaults
$sudo cp $tmp.defaults $PCP_SYSCONFIG_DIR/pmcd
}
signal=$PCP_BINADM_DIR/pmsignal
# real QA test starts here
_save_config $PCP_SYSCONFIG_DIR/pmcd
_writable_primary_logger
_disable_agent_restart
ls -l $PCP_VAR_DIR/config/pmlogger/config.default >>$seq_full
cat $PCP_VAR_DIR/config/pmlogger/config.default >>$seq_full
pmlc -P </dev/null 2>&1 >>$seq_full
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
$PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mlogger( |$)' >>$seq_full
cat <<End-of-File >$tmp.pmlc
# not connected
query sample.drift
advisory on 1 hour sample.drift
connect primary
# incomplete - syntax error
query sample.bin [
query {
sample.drift
# eat input
# up to
# next } -- curly brace
}
query {
barf.no.metric
# suck to } ... not that one, this one ..
}
End-of-File
_try_pmlc
_filter_pmlc <$tmp.err
_filter_pmlc <$tmp.out
for delta in "-1 msec" "75 hours" "599 hours" "1200 hours"
do
$sudo rm -f $tmp.* # refactor-ok
cat <<End-of-File >$tmp.config
log advisory on $delta sample.bin [100]
End-of-File
$sudo rm -f $tmp.* # refactor-ok
_start_up_pmlogger -L -c /dev/null -l $tmp.log -T 6 $tmp
pmsleep 1.5
cat <<End-of-File >$tmp.pmlc
connect $pid
log advisory on $delta sample.bin [100]
End-of-File
_try_pmlc
_filter_pmlc <$tmp.err
_filter_pmlc <$tmp.out
$sudo $signal -s TERM $pid
_wait_pmlogger_end $pid || _exit 1
_filter_pmlogger_log <$tmp.log | _my_logger_filter
done
pmsleep 1
cat <<End-of-File >$tmp.pmlc
connect primary
log mandatory on 1 hour { sample.bin, sample.drift, sample.seconds }
query sample.bin[333]
End-of-File
_try_pmlc
_filter_pmlc <$tmp.err
_filter_pmlc <$tmp.out
$sudo $signal -a pmdasample
pmsleep 1 # time to cleanup
pminfo -f sample >/dev/null 2>&1 # and make sure pmcd notices
cat <<End-of-File >$tmp.pmlc
connect primary
query sample.bin[100]
query sample.bin[100]
End-of-File
_try_pmlc
_filter_pmlc <$tmp.err
_filter_pmlc <$tmp.out
$sudo $signal -a -s HUP pmcd
pmsleep 1 # time to cleanup
cat <<End-of-File >$tmp.pmlc
connect primary
query sample.bin[100]
query { sample.bin,sample.drift sample.seconds }
query { sample.bin sample.drift,sample.seconds }
query sample.bin [100,200,300 400 500,700]
query sample.bin [100,"bin-200"]
End-of-File
_try_pmlc
_filter_pmlc <$tmp.err
# nl state is non-deterministic because pmlogger might, or might not,
# have logger these metrics by now
#
_filter_pmlc <$tmp.out \
| sed -e 's/mand on /mand on nl/'
cat <<End-of-File >$tmp.pmlc
connect primary
log mandatory maybe {
sample.bin
sample.drift, sample.seconds
}
End-of-File
_try_pmlc
_filter_pmlc <$tmp.err
_filter_pmlc <$tmp.out
status=0
exit
|