python api: fix syntax error in recent context changes
[pcp.git] / qa / 130
blob09aee1d3856f92dd57baf4c53f536cce821d6f4c
1 #! /bin/sh
2 # PCP QA Test No. 130
3 # Compare rpc.server metrics with what nfsstat reports
5 # Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved.
8 seq=`basename $0`
9 echo "QA output created by $seq"
11 # get standard filters
12 . ./common.product
13 . ./common.filter
15 rm -f $seq.out
16 case $PCP_PLATFORM
19 echo "TODO: Need to reconcile rpc.server metrics for PCP_PLATFORM $PCP_PLATFORM" >$seq.notrun
20 echo "$seq: [not run] `cat $seq.notrun`"
21 exit 0
23 esac
25 echo checking PCP metric values against: nfsstat -rs
27 trap "rm -f $tmp.*; exit" 0 1 2 3 15
28 signal=$PCP_BINADM_DIR/pmsignal
30 # Don't bother about dupage
31 # Not very popular and has a bug: pv#652216
34 cat > $tmp.workload << \EOF
35 ls -R /hosts/localhost/usr >/dev/null 2>/dev/null &
36 KILL_PID=$!
37 sleep 3
38 $signal -s KILL $KILL_PID >/dev/null 2>&1
39 EOF
40 chmod u+x $tmp.workload
42 $tmp.workload >/dev/null 2>&1
43 sleep 2
45 # Example Output:
46 # > pminfo -f rpc.server
48 # rpc.server.badcalls
49 # value 0
51 # rpc.server.badlen
52 # value 0
54 # rpc.server.calls
55 # value 111217257
57 # rpc.server.duphits
58 # value 426
60 # rpc.server.nullrecv
61 # value 11687166
63 # rpc.server.xdrcall
64 # value 0
66 # > nfsstat -rs
68 # Server RPC:
69 # calls badcalls nullrecv badlen xdrcall duphits dupage
70 # 111220948 0 11687178 0 0 426 6198.58
73 pminfo -f rpc.server >$tmp.pminfo
74 nfsstat -rs >$tmp.nfs
76 # acceptance: abs diff within 10 or diff within 5%
78 cat $tmp.pminfo $tmp.nfs | tee $seq.full | $PCP_AWK_PROG '
79 NF == 0 { next }
80 /Server RPC/ { nfstat=1; next }
81 /rpc.server/ { # pminfo name
82 metric = $1
83 sub("rpc.server.", "", metric)
84 next
86 /value/ { # pminfo value
87 value=$2
88 if (metric == "dupage") {
89 value /= 1000
91 pminfo[metric] = value
92 next
94 NF>3 && nfstat==1 && /calls/ { # stat names
95 for(i=1;i<=NF;i++){
96 stat_names[i] = $i
98 next
100 NF>3 && nfstat==1 { # stat values
101 for(i=1;i<=NF;i++){
102 name = stat_names[i]
103 stat_chk[name] = 1
104 stat_value = $i
105 if (! (name in pminfo) ) {
106 print name ": not in pminfo output"
107 next
109 pminfo_value = pminfo[name]
110 delta = pminfo_value - stat_value
111 if (delta < 0) delta *= -1
113 ok=0
114 if (delta < 10) {
115 ok = 1
117 else {
118 if (stat_value == 0) {
119 ok = 0
120 } else {
121 pct = delta / stat_value
122 ok = (0.95 <= pct && pct <= 1.05)
125 if (ok)
126 print name ": OK"
127 else
128 print name ": mismatch, pcp=" pminfo_value " nfsstat=" stat_value
131 END {
132 for (name in pminfo) {
133 if (! (name in stat_chk) ) {
134 print name ": not in stats output"
138 ' | sort