| #!/bin/bash | |
| # A small script to help visualizing CPU usage over time data collected on CI | |
| # using `gnuplot`. | |
| # | |
| # This script is expected to be called with two arguments. The first is the full | |
| # commit SHA of the build you're interested in, and the second is the name of | |
| # the builder. For example: | |
| # | |
| # ./src/etc/cpu-usage-over-time-plot.sh 7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c x86_64-gnu | |
| # | |
| # That will generate `$builder.png` in the current directory which you can open | |
| # up to see a hopefully pretty graph. | |
| # | |
| # Improvements to this script are greatly appreciated! | |
| if [[ $# != 2 ]]; then | |
| echo "expected 2 arguments, received $#" | |
| echo "example usage: './src/etc/cpu-usage-over-time-plot.sh \ | |
| 7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c \ | |
| x86_64-gnu'" | |
| exit 1 | |
| fi | |
| set -ex | |
| bucket=rust-lang-ci2 | |
| commit=$1 | |
| builder=$2 | |
| curl -O https://$bucket.s3.amazonaws.com/rustc-builds/$commit/cpu-$builder.csv | |
| gnuplot <<-EOF | |
| reset | |
| set timefmt '%Y-%m-%dT%H:%M:%S' | |
| set xdata time | |
| set ylabel "CPU Usage %" | |
| set xlabel "Time" | |
| set datafile sep ',' | |
| set term png size 3000,1000 | |
| set output "$builder-$commit-cpu-usage-plot.png" | |
| set grid | |
| f(x) = mean_y | |
| fit f(x) 'cpu-$builder.csv' using 1:(100-\$2) via mean_y | |
| set label 1 gprintf("Average = %g%%", mean_y) center font ",18" | |
| set label 1 at graph 0.50, 0.25 | |
| set xtics rotate by 45 offset -2,-2.4 300 | |
| set ytics 10 | |
| set boxwidth 0.5 | |
| plot \\ | |
| mean_y with lines linetype 1 linecolor rgb "#ff0000" title "average", "cpu-$builder.csv" \\ | |
| using 1:(100-\$2) with points pointtype 7 pointsize 0.4 title "$builder", "" \\ | |
| using 1:(100-\$2) smooth bezier linewidth 3 title "bezier" | |
| EOF | |
| rm "cpu-$builder.csv" |