Merge branch 'master' of git://git.pcp.io/pcp into qt
[pcp.git] / qa / 275
blob9a39646ff62d00d201fa55d5aaddd6c41feaf404
1 #!/bin/sh
2 # PCP QA Test No. 275
4 # pmUnits handling for derived metrics
6 # Copyright (c) 2009 Ken McDonell. All Rights Reserved.
9 seq=`basename $0`
10 echo "QA output created by $seq"
12 # get standard environment, filters and checks
13 . ./common.product
14 . ./common.filter
15 . ./common.check
17 if grep -q 'pmRegisterDerived' $PCP_INC_DIR/pmapi.h
18 then
20 else
21 echo "No derived metric support" >$seq.notrun
22 echo "$seq: [not run] `cat $seq.notrun`"
23 exit 0
26 status=0 # success is the default!
27 $sudo rm -rf $tmp.* $seq.full
28 trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
30 export PCP_DERIVED_CONFIG=$tmp.config
32 # Derived metric expr dump from 0x8513a48...
33 # expr node 0x867eb68 type=PLUS left=0x867eb98 right=0x867ed28
34 _filter()
36 cat $tmp.out >>$seq.full
37 awk <$tmp.out >$tmp.sed '
38 BEGIN { n = 0 }
39 $1 == "expr" && $2 == "node" && $3 ~ /^0x/ { print "s/" $3 "/<addr-" n ">/"; n++ }
40 { next }'
41 echo "=== sed ===" >>$seq.full
42 cat $tmp.sed >>$seq.full
43 sed -f $tmp.sed <$tmp.out \
44 | sed \
45 -e '/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/s/[^ ]*.*numpmid/TIMESTAMP ... numpmid/' \
46 -e 's/=0x0 /=(nil) /g' \
47 -e "s;$tmp;TMP;"
48 # -e 's/ val=[0-9][0-9]*/ val=<number>/g'
51 # expr node <addr-6> type=NAME left=(nil) right=(nil) save_last=1 [sample.pdu] master=0
52 # ...
53 # [0] inst=-1, val=49794
54 _filter2()
56 sed <$tmp.out -e 's/val=/val /' \
57 | awk >$tmp.sed2 '
58 BEGIN { n = 0 }
59 /expr.*sample\./ { want=1; next }
60 want == 1 && $3 == "val" { if (seen[$4] != "y") {
61 print "s/ val=" $4 "$/ val=<value-" n ">/"
62 n++
63 seen[$4] = "y"
66 $1 == "expr" { want = 0 }'
67 echo "=== sed2 ===" >>$seq.full
68 cat $tmp.sed2 >>$seq.full
69 sed -f $tmp.sed2
72 # real QA test starts here
74 echo "=== expression trees and pmDesc propagation ==="
75 cat <<End-of-File >$tmp.config
76 my.space_over_time1 = sample.mirage + sample.mirage_longlong
77 my.space_over_time2 = sample.mirage_longlong + sample.mirage
78 my.space_over_time3 = sample.mirage_longlong + sample.mirage - sample.byte_rate
79 my.space_over_time4 = sample.byte_rate + sample.byte_rate_perhour
80 my.space = sample.byte_ctr + sample.kbyte_ctr
81 my.byte1 = sample.byte_rate * sample.scale_step.time_up_secs
82 my.byte2 = sample.byte_rate * sample.scale_step.time_up_nanosecs
83 my.x1 = sample.scale_step.bytes_down / sample.scale_step.time_up_secs
84 my.x2 = sample.scale_step.bytes_down / sample.scale_step.time_up_secs + sample.mirage
85 my.x3 = sample.scale_step.count_up * sample.scale_step.count_down
86 my.x4 = sample.scale_step.count_down / sample.scale_step.count_up
87 # discrete and instantaneous combinations
88 my.i1 = 42 + sample.scale_step.none_up
89 my.i2 = sample.scale_step.none_up + 42
90 my.i3 = pmcd.pmlogger.port - pmcd.pmlogger.port
91 End-of-File
92 echo
93 cat $tmp.config
95 echo
96 pminfo -Dderive,appl0,appl1 -d my >$tmp.out 2>&1
97 _filter
99 echo
100 echo "=== fetch values exercises ==="
101 echo
103 pminfo -f -a archives/sample_expr
105 # suggested by gcov analysis
106 echo
107 echo "=== some more scale conversion tests ==="
109 cat <<End-of-File >$tmp.config
110 gcov.a = ( 1 / sample.mirage_longlong ) / (1 / sample.mirage )
111 gcov.b = ( 1 / sample.mirage ) / (1 / sample.mirage_longlong )
112 gcov.c = sample.seconds + disk.all.total
113 gcov.d = sample.ulong.count.base - sample.ulong.count.kilo
114 gcov.e = sample.ulong.count.mega - sample.ulong.count.kilo
115 gcov.f = (1/sample.ulong.count.base) - (1/sample.ulong.count.kilo)
116 gcov.g = (1/sample.ulong.count.mega) - (1/sample.ulong.count.kilo)
117 End-of-File
118 echo
119 cat $tmp.config
121 pminfo -Dderive,appl1 -d gcov >$tmp.out 2>&1
122 _filter | _filter2
124 pminfo -f gcov.d gcov.e gcov.f gcov.g
126 exit
128 # don't have any semantic checking at this stage ... all done earlier
130 echo
131 echo "=== semantic errors ==="
132 cat <<End-of-File >$tmp.config
133 End-of-File
134 echo
135 cat $tmp.config
137 echo
138 pminfo -Dderive,appl0,appl1 -d my >$tmp.out 2>&1
139 _filter
141 # success, all done
142 exit