diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/514 | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/514')
-rwxr-xr-x | qa/514 | 190 |
1 files changed, 190 insertions, 0 deletions
@@ -0,0 +1,190 @@ +#!/bin/sh +# PCP QA Test No. 514 +# +# pmie - lots of expressions, checking pmie -d output and %v binding +# - see also QA 520 +# +# Copyright (c) 2012 Ken McDonell. All Rights Reserved. +# + +seq=`basename $0` +echo "QA output created by $seq" + +# get standard filters +. ./common.product +. ./common.filter +. ./common.check + +rm -f $seq.out +if [ $PCP_VER -lt 3702 ] +then + ln $seq.out.1 $seq.out || exit 1 +else + if [ $PCP_VER -lt 3900 ] + then + ln $seq.out.2 $seq.out || exit 1 + else + ln $seq.out.3 $seq.out || exit 1 + fi +fi + +status=1 # failure is the default! +$sudo rm -rf $tmp.* $seq.full +trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 + +LOCALHOST=`hostname` + +case $PCP_PLATFORM +in + irix|linux|solaris) + # same syslog options for Irix, Linux and OpenSolaris + SYSLOG_OPT='"-p daemon.info"' + ;; + darwin) + SYSLOG_OPT='' + ;; + *) + echo "Arrgh ... need syslog option for $PCP_PLATFORM" + exit 1 + ;; +esac + +SYSLOG='' +for f in /var/adm/SYSLOG /var/log/daemon.log /var/log/messages /var/log/syslog /var/log/system.log +do + if [ -f $f ] + then + SYSLOG=$f + break + fi +done +if [ -z "$SYSLOG" ] +then + echo "Arrgh! Cannot find your syslog file" + exit 1 +fi + +_filter() +{ + sed \ + -e "s/\([:@ ]\)$LOCALHOST/\1LOCALHOST/g" \ + -e "s/\([:@ ]\)local:/\1LOCALHOST/g" \ + -e 's/[A-Z][a-z][a-z] [A-Z][a-z][a-z] *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/DATE/' \ + -e 's/DATE [12][0-9][0-9][0-9]/DATE/' \ + -e '/evaluator exiting/s/pmie([0-9][0-9]*)/pmie(PID)/' \ + -e '/Performance Co-Pilot Inference Engine/s/Version .*/Version .../' \ + -e 's/\[red] 1[0-9][0-9]/[red] >=100/' \ + -e 's/\[green] 2[0-9][0-9]/[green] >=200/' \ + -e 's/\[blue] 3[0-9][0-9]/[blue] >=300/' +} + +_filter2() +{ + $PCP_AWK_PROG ' +$1 == "pmie:" { print; next } +/failed: / { print; next } +$1 == "initMetric:" { skip=1 } +skip == 1 { if ($1 == "Rule:") skip = 0 } +skip == 1 { next } + { print }' >$tmp.tmp + tr ' =' '\012' <$tmp.tmp \ + | grep '0x' \ + | $PCP_AWK_PROG >$tmp.sed ' +BEGIN { n = 0 } + { if (seen[$1] == 1) next + printf "s/%s/ADDR%03d/\n",$1,n + n++ + seen[$1] = 1 + }' + sed -f $tmp.sed <$tmp.tmp +} + +cat <<End-of-File >$tmp.pmie +some_inst sample.part_bin > 500 -> print "some > 500:" " [%i] %v"; +all_inst sample.part_bin > 0 -> shell "echo 'all > 0:'" " [%i] %v"; +some_sample hinv.ncpu @0..2 == hinv.ncpu -> syslog 10sec $SYSLOG_OPT "PCP QA $seq - please ignore: some sample ncpu equal" " [%i] %v"; +( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "arith %v"; +// true && true +sample.long.one != 2 && ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean1 %v"; +// false && true +sample.long.one <= 0 && ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean2 %v"; +// true && false +sample.long.one < 9 && ! ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean3 %v"; +// false && false +sample.long.one < 1 && ! ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean4 %v"; +// pmns error || true +min_inst no_such_metric == 100 || sample.long.million > 0 -> print "error1 %v"; +// true || true +min_inst sample.part_bin == 100 || ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean5:" " [%i] %v"; +// false || true +// NOTE instance bindings here will be for the _left_ subexpression +// (which is always false) ... this is odd but not unexpected +max_inst sample.part_bin == 100 || ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean6:" " [%i] %v"; +// true || false +sum_inst sample.part_bin > 500 || ! ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean7:" " [%i] %v"; +// false || false +avg_inst(sample.part_bin) == 0 || ! ( sample.long.million + sample.long.one - sample.long.ten ) * sample.long.hundred / sample.long.ten >= 0 -> print "boolean8:" " [%i] %v"; +count_inst(sample.part_bin > 0) > 0 -> print "count_inst:" "[%i] %v"; +some_inst match_inst "bin-[12345]" sample.part_bin > 100 -> print "match_inst:" " [%i] %v"; +some_inst nomatch_inst "bin-[12345]" sample.part_bin > 200 -> print "nomatch_inst:" " [%i] %v"; +// rising, falling - see QA 515 +all_inst rate sample.bin == 0 -> print "rate:" " [%i] %v"; +66%_inst sample.colour >= 200 -> print "66%_inst:" " [%i] %v"; +all_sample sample.long.ten @0..2 == 10 -> print "all_sample: " " [%i] %v"; +60%_sample some_inst sample.part_bin #'bin-300' #'bin-500' #'bin-700' @0..1 >= 500 -> print "60%_sample: " " [%i] %v"; +min_sample sample.long.hundred @0..1 == 100 -> print "min_sample: " " [%i] %v"; +max_sample sample.long.hundred @0..1 == 100 -> print "max_sample: " " [%i] %v"; +sum_sample sample.bin #'bin-100' @0..3 == 400 -> print "sum_sample: " " [%i] %v"; +avg_sample sample.bin #'bin-200' @0..1 == 200 -> print "avg_sample: " " [%i] %v"; +count_sample(some_inst sample.bin #'bin-200' #'bin-300' #'bin-400' @0..2 == 300) == 3 -> print "count_sample: " " [%i] %v"; +min_inst sample.part_bin > 0 -> print "min_inst:" " @%h [%i] %v"; +max_inst sample.part_bin > 0 -> print "max_inst:" " @%h [%i] %v"; +sample.long.one == 1 -> shell "false" | print "false |: %v"; +sample.long.ten == 10 -> shell "true" & print "true &: %v"; +sample.long.hundred == 100 -> print "print |:" " %v" | print "bozo don't execute me!"; + +// TODO at some other time ... alarm and stomp actions +End-of-File + +# real QA test starts here +cat <<End-of-File | pmie -t 250msec -d -Dappl1 >$tmp.out 2>$tmp.err & +f $tmp.pmie +l +r 1sec +v +End-of-File + +wait + +echo >>$seq.full +echo "pmie PID $!" >>$seq.full +echo >>$seq.full +echo "=== pmie output ===" >>$seq.full +cat $tmp.out >>$seq.full +echo >>$seq.full +echo "=== pmie errors ===" >>$seq.full +cat $tmp.err >>$seq.full + +_filter2 <$tmp.err | _filter +_filter <$tmp.out + +echo +echo "SYSLOG ..." +$sudo tail -100 $SYSLOG >$tmp.tmp +sed <$tmp.tmp -n \ + -e 's/PCP QA '"$seq"'/PCP QA xxx/' \ + -e '/ncpu equal/s/ [0-9][0-9]*/ N/g' \ + -e 's/PCP QA xxx/PCP QA '"$seq"'/' \ + -e '/\['$!']: PCP QA '"$seq"' - please ignore/{ +s/.*please ignore/.../ +p +}' \ +| LC_COLLATE=POSIX sort -u + +echo >>$seq.full +echo "=== tail SYSLOG ===" >>$seq.full +cat $tmp.tmp >>$seq.full + +# success, all done +status=0 +exit |