| #!/bin/bash |
| |
| # make-datafile.sh -- export data from MySQL testing database. |
| # |
| # Copyright (C) 2016 Free Software Foundation, Inc. |
| # |
| # This file is part of DejaGnu. |
| # |
| # DejaGnu is free software: you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by |
| # the Free Software Foundation, either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # DejaGnu is distributed in the hope that it will be useful, but |
| # WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with DejaGnu. If not, see <http://www.gnu.org/licenses/>. |
| |
| # This script executes a series of SQL calls to our testing database, |
| # and makes a data file for gnuplot. |
| |
| if test $# -eq 0; then |
| echo "ERROR: no testrun numbers specified!" |
| exit |
| fi |
| |
| # These are required to access the database |
| user="USER" |
| passwd="PASSWD" |
| outfile="testrun.data" |
| |
| # Check the environment for the database access information |
| if test x"${CBUILD_DBUSER}" != x; then |
| user="${CBUILD_DBUSER}" |
| fi |
| if test x"${CBUILD_DBPASSWD}" != x; then |
| passwd="${CBUILD_DBPASSWD}" |
| fi |
| |
| # Create the output file |
| rm -f ${outfile} |
| |
| # Add a header to make the file human readable |
| echo "# date tool version arch total PASS FAIL UNSUPPORTED UNTESTED UNRESOLVED XPASS XFAIL" > ${outfile} |
| |
| machines=$(mysql -u"$user" -p"$passwd" --local -e "SELECT DISTINCT(build_machine) FROM dejagnu.testruns" | sed -e 's/build_machine//' | tr '\n' ' ') |
| echo "Build machines are: ${machines}" |
| |
| tools="gcc g++ gfortran libstdc++ objc" |
| echo "Tools are: ${tools}" |
| |
| for testrun in "$@"; do |
| # Get the build info |
| binfo=$(mysql -u"$user" -p"$passwd" --local -e "SELECT tool,arch,date,version,branch,build_machine FROM dejagnu.testruns WHERE testrun=${testrun}" | tail -1) |
| |
| # Get rid of the embedded newlines |
| binfo=$(echo "$binfo" | tr -d '\n') |
| |
| # Split the query result into fields |
| tool=$(echo "$binfo" | cut -d ' ' -f 1) |
| arch=$(echo "$binfo" | cut -d ' ' -f 2) |
| date=$(echo "$binfo" | cut -d ' ' -f 3) |
| version=$(echo "$binfo" | cut -d ' ' -f 5) |
| build_machine=$(echo "$binfo" | cut -d ' ' -f 7) |
| |
| # Get the test counts |
| # total=`mysql -u"$user" -p${passwd} -e "SELECT count(*) FROM dejagnu.test WHERE result!=''" | tail -1` |
| passes=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='PASS'" | tail -1) |
| fails=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='FAIL'" | tail -1) |
| xpasses=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='XPASS'" | tail -1) |
| xfails=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='XFAIL'" | tail -1) |
| untested=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='UNTESTED'" | tail -1) |
| unsupported=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='UNSUPPORTED'" | tail -1) |
| unresolved=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='UNRESOLVED'" | tail -1) |
| # total=$(mysql -u"$user" -p"$passwd" -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result!=''" | tail -1) |
| # passes=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='PASS'" | tail -1) |
| # fails=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='FAIL'" | tail -1) |
| # xpasses=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='XPASS'" | tail -1) |
| # xfails=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='XFAIL'" | tail -1) |
| # untested=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='UNTESTED'" | tail -1) |
| # unsupported=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='UNSUPPORTED'" | tail -1) |
| # unresolved=$(mysql -u"$user" -p"$passwd" --local -e "SELECT count(*) FROM dejagnu.test WHERE testrun=${testrun} AND result='UNRESOLVED'" | tail -1) |
| |
| # Write the data line |
| all_passes=$((passes+ xfails)) |
| all_failures=$((fails + xpasses + untested + unresolved + unsupported)) |
| all_tests=$((all_passes + all_failures)) |
| |
| echo "${date} ${tool} ${version} ${arch} ${all_tests} ${passes} ${fails} ${xpasses} ${xfails} ${untested} ${unresolved} ${unsupported} ${build_machine}" >> ${outfile} |
| done |
| |
| # Extract the list of architectures supported for these results |
| arches=$(grep -v '#' testrun.data | cut -d ' ' -f 13 | sort | uniq | tr '\n' ' ') |
| echo "Architectures for this set of results: ${arches}" |
| |
| # Make a separate data file for each architecture so gnuplot can keep them organized |
| for i in ${arches}; do |
| if test "$i" = '.'; then |
| continue |
| fi |
| # filter out bogus test results to avoid weird spikes in the data |
| if test "$passes" -eq 0 -a "$fails" -eq 0; then |
| continue |
| fi |
| rm -f "$i".data |
| grep "$i" testrun.data | sort -V -k 3 | uniq -u > "$i".data |
| done |
| |
| rm testrun.data |
| |
| files=$(find . -maxdepth 1 -name '*.data' | tr '\n' ' ') |
| # Get all the versions in the files, we'll pad rows so all the rows match |
| versions=$(cut -d ' ' -f 3 "$files" | sort -V | uniq | tr '\n' ' ') |
| |
| for i in ${files}; do |
| for j in ${versions}; do |
| cnt=$(grep -c "$j" "$i") |
| if test "$cnt" -eq 0; then |
| echo "Adding $j to $i" |
| machine=$(echo "$i" | cut -d '.' -f 1) |
| echo "${date} ${tool} $j ${arch} 0 0 0 0 0 0 0 0 $machine" >> "$i" |
| fi |
| done |
| done |
| |
| # Re-sort based on the versions we just added as padding so the rows line up |
| for j in ${files}; do |
| mv "$j" tmp.data |
| sort -V -k 3 < tmp.data > "$j" |
| rm tmp.data |
| done |