#!/bin/bash

# Use gnuplot to generate plots from fio run with -l and/or -w

if [ "$1"x == "x" ]; then
	echo Need title as arg
	exit 1
fi

GNUPLOT=$(which gnuplot)
if [ ! -x $GNUPLOT ]; then
	echo You need gnuplot installed to generate graphs
	exit 1
fi

TITLE=$1

PLOT_LINE=""
for i in *bw.log; do
	if [ ! -r $i ]; then
		continue
	fi
	PT=$(echo $i | sed s/_bw.log//g)
	if [ "$PLOT_LINE"x != "x" ]; then
		PLOT_LINE=$PLOT_LINE", "
	fi

	PLOT_LINE=$PLOT_LINE"'$i' title '$PT' with lines"
done

if [ "$PLOT_LINE"x != "x" ]; then
	echo Making bw logs
	echo "set title 'Bandwidth - $TITLE'; set xlabel 'time (msec)'; set ylabel 'KiB/sec'; set terminal png; set output '$TITLE-bw.png'; plot " $PLOT_LINE | $GNUPLOT -
fi

PLOT_LINE=""
for i in *slat.log; do
	if [ ! -r $i ]; then
		continue
	fi
	PT=$(echo $i | sed s/_slat.log//g)
	if [ "$PLOT_LINE"x != "x" ]; then
		PLOT_LINE=$PLOT_LINE", "
	fi

	PLOT_LINE=$PLOT_LINE"'$i' title '$PT' with lines"
done

if [ "$PLOT_LINE"x != "x" ]; then
	echo Making slat logs $PLOT_LINE
	echo "set title 'Submission latency - $TITLE'; set xlabel 'time (msec)'; set ylabel 'latency (msec)'; set terminal png; set output '$TITLE-slat.png'; plot " $PLOT_LINE | $GNUPLOT -
fi

PLOT_LINE=""
for i in *clat.log; do
	if [ ! -r $i ]; then
		continue
	fi
	PT=$(echo $i | sed s/_clat.log//g)
	if [ "$PLOT_LINE"x != "x" ]; then
		PLOT_LINE=$PLOT_LINE", "
	fi

	PLOT_LINE=$PLOT_LINE"'$i' title '$PT' with lines"
done

if [ "$PLOT_LINE"x != "x" ]; then
	echo Making clat logs $PLOT_LINE
	echo "set title 'Completion latency - $TITLE'; set xlabel 'time (msec)'; set ylabel 'latency (msec)'; set terminal png; set output '$TITLE-clat.png'; plot " $PLOT_LINE | $GNUPLOT -
fi
