#!/usr/bin/perl -w # arg 0 is filename sub usages_msg(){ print "Usage: $0 \n" print " parses and plots IOR results using gnuplot, and generates a .dat file for\n" print " simple graphing in spreadhseets\n" print "e.g.> perl iokit-parse-ior ior-log\n" exit 1; } if ( !$ARGV[0] ) { usages_msg() } $file = $ARGV[0]; # Open log file for reading open ( PFILE, "$file") or die "Can't open results log file"; # Open .csv file for writting required columns from log file. open ( DATAFILE, "> $file.dat" ) or die "Can't open csv file for writting"; $count = 0; while ( ) { chomp; @line = split( /\s+/ ); # splits line into tokens if ( $line[0] ) { # This comparison will be changed if there will be changes log file. if ( $line[0] eq "access" && $line[1] eq "bw(MiB/s)" ) { print DATAFILE "$count $line[1] $line[4] $line[5] $line[6] br(MiB/s) ropen(s) rd(s) rclose(s)\n"; $count = $count + 1; } # Two columns from output file are skiped since # they are constant and may not be so useful while graphing results. if ( $line[0] eq "write" ) { print DATAFILE "$count $line[1] $line[4] $line[5] $line[6] "; } if ( $line[0] eq "read" ) { print DATAFILE "$line[1] $line[4] $line[5] $line[6]\n"; $count = $count + 1; } } } close PFILE; close DATAFILE; # Open .scr file for writting instructions for gnuplot. open ( SCRFILE, "> $file.scr" ) or die "Can't open scr file for writting"; # Only two columns bw(MiB/s) and br(MiB/s) are considered for graphing results. print SCRFILE "plot \"$file.dat\" using 1:2 axes x1y1 title \"bw(MiB/s)\" with line\n"; print SCRFILE "replot \"$file.dat\" using 1:6 axes x1y1 title \"br(MiB/s)\" with line\n"; print SCRFILE "pause -1\n"; close SCRFILE; # check whether gnuplot exists? system ("which gnuplot > /dev/null") == 0 or die "gnuplot does not exists, Please install it and try again.\n"; # invoke gnuplot to display graph. system ("gnuplot $file.scr");