summaryrefslogtreecommitdiff
path: root/qa/src/grind-tools
diff options
context:
space:
mode:
Diffstat (limited to 'qa/src/grind-tools')
-rwxr-xr-xqa/src/grind-tools387
1 files changed, 387 insertions, 0 deletions
diff --git a/qa/src/grind-tools b/qa/src/grind-tools
new file mode 100755
index 0000000..648374f
--- /dev/null
+++ b/qa/src/grind-tools
@@ -0,0 +1,387 @@
+#!/bin/sh
+
+_usage()
+{
+ echo "Usage: $0 [-v] [-a archive] [-h host] metricspec [...]"
+ echo
+ echo "metricspec one of the forms:"
+ echo " metric-name"
+ echo " metric-name[instance]"
+ exit 1
+}
+
+# Get standard environment
+. $PCP_DIR/etc/pcp.env
+
+status=0
+tmp=/tmp/$$
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+rm -f $tmp.*
+
+verbose=false
+very_verbose=false
+host=localhost
+archive=""
+while getopts "a:h:v" c
+do
+ case "$c"
+ in
+ a)
+ src="-a $OPTARG"
+ archive=$OPTARG
+ host=""
+ ;;
+ h)
+ src="-h $OPTARG"
+ archive=""
+ host=$OPTARG
+ ;;
+ v)
+ $verbose && very_verbose=true
+ verbose=true
+ ;;
+ *)
+ _usage
+ # NOTREACHED
+ ;;
+ esac
+done
+shift `expr $OPTIND - 1`
+
+if [ $# -lt 1 ]
+then
+ _usage
+ # NOTREACHHED
+fi
+
+for arg
+do
+ case "$arg"
+ in
+ *[*)
+ echo "$arg" >>$tmp.all
+ ;;
+ *)
+ pmprobe -I $src $arg \
+ | sed \
+ -e 's/ "/ /' \
+ -e 's/" "/ /g' \
+ -e 's/"$//' \
+ -e 's/ /\
+/g' \
+ | sed -e '1,2d' \
+ | while read inst
+ do
+ echo "$arg[$inst]" >>$tmp.all
+ done
+ ;;
+ esac
+done
+
+sed <$tmp.all -e 's/\[.*//' \
+| sort -u >$tmp.metrics
+
+# cat $tmp.metrics
+# echo
+# cat $tmp.all
+
+# pmie
+#
+sed <$tmp.all >$tmp.config \
+ -e "s/\[/ #'/" \
+ -e "s/]/'/" \
+ -e 's/$/+/' \
+ -e '$s/$/1;/'
+$very_verbose && echo "pmie config ..." && cat $tmp.config
+if pmie $src -c $tmp.config -C
+then
+ $verbose && echo "pmie OK"
+else
+ echo "pmie FAILED"
+ echo "pmie config:"
+ cat $tmp.config
+ status=1
+fi
+
+# pmval
+#
+sed -e 's/]//' -e 's/\[/ /' <$tmp.all \
+ | $PCP_AWK_PROG '
+BEGIN { printf "pmval -s 2 -t 1sec '"$src"' -i " }
+$1 != metric { if (NR > 1) {
+ print " " metric
+ printf "pmval -s 2 -t 1sec '"$src"' -i "
+ }
+ metric = $1
+ }
+NR > 1 { printf "," }
+ { printf $2 }
+END { print " " metric
+ }' \
+| sed -e "s/-i /-i '/" -e "s/ [^ ]*\$/'&/" >$tmp.config
+$very_verbose && echo "pmval cmd ..." && cat $tmp.config
+cat $tmp.config | sh >$tmp.out 2>&1
+if grep '^samples: *2$' $tmp.out >/dev/null
+then
+ $verbose && echo "pmval OK"
+else
+ echo "pmval FAILED"
+ echo "pmval cmd:"
+ cat $tmp.config
+ cat $tmp.out
+ status=1
+fi
+
+# pmlogger
+#
+if [ -z "$host" ]
+then
+ echo "pmlogger skipped, source is an archive"
+else
+ echo "log mandatory on default {" >$tmp.config
+ sed -e 's/]//' -e 's/\[/ /' <$tmp.all \
+ | $PCP_AWK_PROG >>$tmp.config '
+$1 != metric { if (NR > 1) print " ]"
+ print $1," ["
+ metric = $1
+ }
+ { print " \"" $2 "\"" }
+END { print " ]"
+ print "}"
+ }'
+ $very_verbose && echo "pmlogger config ..." && cat $tmp.config
+ if pmlogger -l $tmp.log $src -s 2 -t 1sec -c $tmp.config $tmp
+ then
+ $verbose && echo "pmlogger OK"
+ archive=$tmp
+ else
+ echo "pmlogger FAILED"
+ cat $tmp.log
+ echo "pmlogger config:"
+ cat $tmp.config
+ status=1
+ fi
+fi
+
+# pmdumptext - simple with -a or -h
+#
+if which pmdumptext >/dev/null 2>&1
+then
+ sed -e 's/]//' -e 's/\[/ /' <$tmp.all \
+ | $PCP_AWK_PROG '
+BEGIN { printf "pmdumptext -s 2 -t 1sec '"$src"'" }
+$1 != metric { if (NR > 1) {
+ print "]"
+ printf "pmdumptext -s 2 -t 1sec '"$src"'"
+ }
+ metric = $1
+ printf " %s[",metric
+ first = 1
+ }
+ { if (first) {
+ printf "%s",$2
+ first = 0
+ }
+ else
+ printf ",%s",$2
+ }
+END { print "]"
+ }' >$tmp.config
+ $very_verbose && echo "pmdumptext cmd ..." && cat $tmp.config
+ cat $tmp.config | sh >$tmp.out 2>&1
+ ok=`grep '^[A-Z][a-z][a-z] [A-Z][a-z][a-z]' $tmp.out | wc -l | sed -e 's/ //g'`
+ if [ "$ok" -eq 2 ]
+ then
+ $verbose && echo "pmdumptext (simple) OK"
+ else
+ echo "pmdumptext (simple) FAILED"
+ echo "pmdumptext cmd:"
+ cat $tmp.config
+ cat $tmp.out
+ status=1
+ fi
+else
+ echo "pmdumptext skipped, no binary installed"
+fi
+
+# pmdumptext - extended notation ...
+# myhost:kernel.all.cpu.idle[cpu0,cpu3]
+# /path/to/myarchive/kernel.all.cpu.idle[cpu1]
+#
+if which pmdumptext >/dev/null 2>&1
+then
+ if [ -n "$host" ]
+ then
+ pfx="$host:"
+ else
+ pfx="$archive/"
+ fi
+ sed -e 's/]//' -e 's/\[/ /' <$tmp.all \
+ | $PCP_AWK_PROG '
+BEGIN { printf "pmdumptext -s 2 -t 1sec" }
+$1 != metric { metric = $1
+ first = 1
+ if (NR > 1) printf "]"
+ }
+ { if (first) {
+ printf " %s%s[%s","'"$pfx"'",metric,$2
+ first = 0
+ }
+ else
+ printf ",%s",$2
+ }
+END { print "]" }' >$tmp.config
+ $very_verbose && echo "pmdumptext cmd ..." && cat $tmp.config
+ cat $tmp.config | sh >$tmp.out 2>&1
+ ok=`grep '^[A-Z][a-z][a-z] [A-Z][a-z][a-z]' $tmp.out | wc -l | sed -e 's/ //g'`
+ if [ "$ok" -eq 2 ]
+ then
+ $verbose && echo "pmdumptext (extended) OK"
+ else
+ echo "pmdumptext (extended) FAILED"
+ echo "pmdumptext cmd:"
+ cat $tmp.config
+ cat $tmp.out
+ status=1
+ fi
+fi
+
+# pmchart
+#
+if which pmchart >/dev/null 2>&1
+then
+ echo "#pmchart" >$tmp.config
+ echo "Version 2.0 host dynamic" >>$tmp.config
+ echo "Chart Title "test" Style line" >>$tmp.config
+ sed <$tmp.all >>$tmp.config \
+ -e 's/]//' \
+ -e 's/\[/ Instance /' \
+ -e 's/^/ Plot Color #-cycle Host * Metric /'
+ $very_verbose && echo "pmchart config ..." && cat $tmp.config
+ if pmchart -C -c $tmp.config $src
+ then
+ $verbose && echo "pmchart OK"
+ else
+ echo "pmchart FAILED"
+ echo "pmchart config:"
+ cat $tmp.config
+ status=1
+ fi
+else
+ echo "pmchart skipped, no binary installed"
+fi
+
+# pmview
+#
+if which pmview >/dev/null 2>&1
+then
+ echo 'pmview Version 2.1 "foo" "bar"' >$tmp.config
+ $PCP_AWK_PROG <$tmp.all >>$tmp.config '
+BEGIN { printf "_colorlist l1 (" }
+NR % 3 == 0 { printf " red" }
+NR % 3 == 1 { printf " green" }
+NR % 3 == 2 { printf " blue" }
+END { print " )" }'
+ $PCP_AWK_PROG <$tmp.metrics >>$tmp.config '
+BEGIN { printf "_colorlist l2 (" }
+NR % 3 == 0 { printf " red" }
+NR % 3 == 1 { printf " green" }
+NR % 3 == 2 { printf " blue" }
+END { print " )" }'
+ sed <$tmp.all \
+ -e 's/]//' \
+ -e 's/\[/ /' \
+ | $PCP_AWK_PROG '
+BEGIN { print "_grid ("
+ print " _bar 0 0 ("
+ print " _metrics ("
+ }
+ { printf " %s[%s] 10 \"%d\"\n",$1,$2,NR }
+END { print " )"
+ print " _colorlist l1"
+ print " )"
+ }' >>$tmp.config
+ sed <$tmp.all \
+ -e 's/]//' \
+ -e 's/\[/ /' \
+ | $PCP_AWK_PROG '
+BEGIN { print " _bar 1 0 ("
+ print " _metrics ("
+ }
+$1 != metric { if (NR > 1) {
+ printf "] 100 \"%d\"\n",NR
+ }
+ metric = $1
+ printf " %s[%s",$1,$2
+ next
+ }
+ { printf ",%s",$2 }
+END { printf "] 100 \"%d\"\n",NR
+ print " )"
+ print " _colorlist l2"
+ print " )"
+ }' >>$tmp.config
+ sed <$tmp.all \
+ -e 's/]//' \
+ -e 's/\[/ /' \
+ | $PCP_AWK_PROG '
+BEGIN { print " _stack 2 0 ("
+ print " _metrics ("
+ }
+ { printf " %s[%s] 10\n",$1,$2 }
+END { print " )"
+ print " _colorlist l1"
+ print " )"
+ print ")"
+ }' >>$tmp.config
+ $very_verbose && echo "pmview config ..." && cat $tmp.config
+ if pmview -C -c $tmp.config $src
+ then
+ $verbose && echo "pmview OK"
+ else
+ echo "pmview FAILED"
+ echo "pmview config:"
+ cat $tmp.config
+ status=1
+ fi
+else
+ echo "pmview skipped, no binary installed"
+fi
+
+# pmgadgets
+#
+if which pmgadgets >/dev/null 2>&1
+then
+ if [ -z "$host" ]
+ then
+ echo "pmgadgets skipped, source is an archive"
+ else
+ cat <<End-of-File >$tmp.config
+pmgadgets 1 "foo" "bar"
+_legend l (
+ _default green3
+ 10 yellow
+)
+End-of-File
+ sed <$tmp.all \
+ -e 's/]//' \
+ -e 's/\[/ /' \
+ | $PCP_AWK_PROG '
+ { printf "_led 10 %d 5 5\n",10*NR
+ printf " _metric %s[\"%s\"]\n",$1,$2
+ printf " _legend l\n"
+ }' >>$tmp.config
+ $very_verbose && echo "pmgadgets config ..." && cat $tmp.config
+ if pmgadgets -C -c $tmp.config $src
+ then
+ $verbose && echo "pmgadgets OK"
+ else
+ echo "pmgadgets FAILED"
+ echo "pmgadgets config:"
+ cat $tmp.config
+ status=1
+ fi
+ fi
+else
+ echo "pmgadgets skipped, no binary installed"
+fi