#!/usr/bin/perl
#
# IOMeter results parser, 2005, Paul Venezia
#
#	Simply run this script in the directory containing the CSV output of IOMeter.
#	Results are organized by filename.
#
#

use File::Glob ':glob';

@files = <*.csv>;
my %results;
my $parmcount = 1;
my $lcount = 0;
foreach my $file (@files) {
	undef @lines;
	open (LOG, "<$file");
	my @lines = <LOG>;
	foreach my $line (@lines) {
		$lcount++;
		if ($line =~ /'Access\sspecification\sname.+/) {
			$line = @lines[$lcount];
			$line =~ /(.+),\d/;
			#%results->{$file}->{test} = "$1";
			$thistest = "$1";

		}
		if ($line =~ /ALL,All.+/) {
			@thisres = (split(",", $line));

			# If you need more columns, add them here and increase the COLSPAN below

			%results->{$file}->{$thistest}{'IO/ps'} = @thisres[6];
			%results->{$file}->{$thistest}{'ReadIO/ps'} = @thisres[7];
			%results->{$file}->{$thistest}{'WriteIO/ps'} = @thisres[8];
			%results->{$file}->{$thistest}{'MB/ps'} = @thisres[9];
			%results->{$file}->{$thistest}{'ReadMB/ps'} = @thisres[10];
			%results->{$file}->{$thistest}{'WriteMB/ps'} = @thisres[11];
			%results->{$file}->{$thistest}{'Transactions/ps'} = @thisres[12];
			%results->{$file}->{$thistest}{'Connections/ps'} = @thisres[13];
			%results->{$file}->{$thistest}{CPU} = @thisres[45];
		}

	}			
$parmcount = 0;
$lcount = 0;

}

sub swrite {
  my $fmt = shift(@_);
  $^A = '';
  formline($fmt,@_);
  return $^A;
}


	
my %output;		
foreach my $logfile ( sort keys %results ) {
	#$TXT .= "$logfile: \n";
	$header = 1;
	foreach $test ( sort keys %{$results{$logfile}} ) {
		foreach $tsize ( sort keys %{$results{$logfile}{$test}} ) {
			$output{$test}{$logfile}{$tsize} =  swrite("@<<<<<<<<<<<<<<<<<<", $results{$logfile}{$test}{$tsize});
		}
		
	}
}

# Output

$TXT .= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
            \"http://www.w3.org/TR/html4/loose.dtd\">
<HTML>
<HEAD>
<TITLE>IOMeter Test Results</TITLE>
<STYLE>
BODY {
	FONT: 10px geneva, verdana, arial, sans-serif; COLOR: #3d3d3d
}
TD {
	FONT: 10px geneva, verdana, arial, sans-serif; COLOR: #3d3d3d
}
TH {
	FONT: 10px geneva, verdana, arial, sans-serif; COLOR: #3d3d3d;  font-weight: bold
}
FONT {
	FONT: 10px geneva, verdana, arial, sans-serif; COLOR: #3d3d3d
}
H2   {
	FONT: 14px geneva, verdana, arial, sans-serif; COLOR: #3d3d3d; font-weight: bold
}

</STYLE>
</HEAD>
<BODY>
<CENTER><H2>IOMeter Test Results</H2></CENTER><BR>
<TABLE BGCOLOR=\"#8888AA\" CELLPADDING=6 CELLSPACING=1 ALIGN=CENTER WIDTH=90%>
";
foreach $testsize (  map { $_->[1] }
                 sort { $a->[0] <=> $b->[0] }
                 map  { [ /(\d+)/, $_ ] }  keys %output ) {

	$TXT .= "<TABLE WIDTH=90% BGCOLOR=\"#8888AA\" ALIGN=CENTER CELLPADDING=6 CELLSPACING=1><TH BGCOLOR=\"#A0C0FF\"COLSPAN=10>$testsize</TH>\n";
	$header = 1;
	foreach $unit ( sort keys %{$output{$testsize}} ) {
		if ($header) {
			$TXT .= "<TR BGCOLOR=\"#A0C0E0\"><TH>Target</TH>";
			foreach $test ( sort keys %{$output{$testsize}{$unit}} ) {
				$TXT .= "<TH>$test</TH>";
			}
			undef $header;
		}
		$testunit = $unit;
		$testunit =~ s/\.csv//;
                my ($te, $bgcolor);
                  if (!defined $cs) {
                     $bgcolor = "#DDDDDD"; $cs = 1;
                  } else {
                     $bgcolor = "#EEEEEE"; undef $cs;
                  };

		$TXT .= "<TR BGCOLOR=\"$bgcolor\"><TD><B>$testunit</B></TD>";
			 
		foreach $test ( sort keys %{$output{$testsize}{$unit}} ) {
			$TXT .= "<TD ALIGN=CENTER>$output{$testsize}{$unit}{$test}";
		}
		$TXT .= "\n";
	}
	$TXT .= "</TABLE><BR>\n";
}

$TXT .= "\n</TR></TABLE></BODY></HTML>";
print $TXT;
