#!/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"