#! /bin/sh # PCP QA Test No. 348 # Install/Remove for Linux KVM pmda # # Copyright (c) 2008 Aconex. All Rights Reserved. # seq=`basename $0` echo "QA output created by $seq" # get standard filters . ./common.product . ./common.filter . ./common.check [ $PCP_PLATFORM = linux ] || _notrun "KVM only exists on Linux" perl -e "use PCP::PMDA" >/dev/null 2>&1 [ $? -eq 0 ] || _notrun "perl PCP::PMDA module not installed" kvm_stats_path=/sys/kernel/debug/kvm $sudo [ -d $kvm_stats_path ] || _notrun "KVM sysfs interface not available" rm -f $seq.out if [ $PCP_VER -lt 3600 ] then ln $seq.out.1 $seq.out || exit 1 else ln $seq.out.2 $seq.out || exit 1 fi status=1 done_clean=false rm -f $seq.full install_on_cleanup=false pminfo kvm >/dev/null 2>&1 && install_on_cleanup=true _cleanup() { if $done_clean then : else [ -f $tmp.pmcd.conf ] && $sudo mv $tmp.pmcd.conf $PCP_PMCDCONF_PATH rm -f $tmp.* $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start _wait_for_pmcd _wait_for_pmlogger if $install_on_cleanup then ( cd $PCP_PMDAS_DIR/kvm; $sudo ./Install /dev/null 2>&1 ) else ( cd $PCP_PMDAS_DIR/kvm; $sudo ./Remove >/dev/null 2>&1 ) fi done_clean=true fi exit $status } trap "_cleanup" 0 1 2 3 15 # real QA test starts here home=$PCP_PMDAS_DIR iam=kvm if [ ! -d $home/$iam ] then echo "Where is $home/$iam?" exit 1 fi cd $home/$iam unset ROOT MAKEFLAGS # copy the pmcd config file to restore state later. cp $PCP_PMCDCONF_PATH $tmp.pmcd.conf # start from a known starting point $sudo ./Remove >/dev/null 2>&1 $sudo rm -f pmns domain.h echo echo "=== $iam agent installation ===" $sudo ./Install $tmp.out 2>&1 # Check kvm metrics have appeared ... X metrics and Y values _filter_pmda_install <$tmp.out \ | sed \ -e '/^Waiting for pmcd/s/\.\.\.[. ]*$/DOTS/' \ | $PCP_AWK_PROG ' /Check kvm metrics have appeared/ { if ($7 >= 30 && $7 <= 40) $7 = "X" if ($10 >= 30 && $10 <= 40) $10 = "Y" } { print }' if pminfo -v $iam then : else echo "... failed! ... here is the Install log ..." cat $tmp.out fi echo echo "=== validate values ===" rm -f $tmp.stats $tmp.values $tmp.probe $tmp.diff pmprobe -v $iam | LC_COLLATE=POSIX sort > $tmp.probe echo "from pmprobe ..." >>$here/$seq.full cat $tmp.probe >>$here/$seq.full for stat in `$sudo find $kvm_stats_path -mindepth 1` do value=`$sudo cat $stat` echo $stat 1 $value | sed -e "s,$kvm_stats_path/,kvm.,g" >> $tmp.stats done LC_COLLATE=POSIX sort $tmp.stats > $tmp.values echo "from /sys/kernel/debug/kvm ..." >>$here/$seq.full cat $tmp.values >>$here/$seq.full LC_COLLATE=POSIX join $tmp.probe $tmp.values >$tmp.all echo >>$here/$seq.full cat $tmp.all >>$here/$seq.full echo echo "=== check values ===" cat $tmp.all \ | while read metric n1 vpcp n2 vsys do if [ "$n1" = 1 -a "$n2" = 1 ] then _within_tolerance $metric $vpcp $vsys 2% -v else echo "$metric: number of values not 1 as expected: pcp $n1 /sys $n2" fi done | tee -a $here/$seq.full echo echo "=== remove $iam agent ===" $sudo ./Remove >$tmp.out 2>&1 _filter_pmda_remove <$tmp.out status=0 exit