#!/usr/bin/perl

use strict;
use warnings;

print "===== LogReportinator =====\n";
print "Converts timing information from a number of Greenstone|| logs into a\n";
print "nice CSV format.\n";
print "===========================\n";

use Cwd;

my $results = {};
my $dir = getcwd();

opendir(DH, $dir);
my @files = readdir(DH);
closedir(DH);

print " * Reading log files...\n";
my $log_file_count = 0;
my $log_failed_count = 0;
foreach my $file (@files)
{
  if ($file =~ /([a-z]+)-([a-z\.]+)-W(\d+)-(\d+)\.log/i)
  {
    my $digital_library = $1;
    my $host_machine = $2;
    my $number_of_workers = $3;
    my $test_run = $4;
    print ' - parsing: ' . $file . '... ';
    my $path = $dir . '/' . $file;
    my $grep_command = 'grep "Elapsed Time:" "' . $path . '"';
    my $grep_result = `$grep_command`;
    if ($grep_result =~ /Elapsed Time: (\d+\.\d\d\d\d\d\d)/)
    {
      my $duration = $1;
      if (!defined $results->{$number_of_workers})
      {
        $results->{$number_of_workers} = [$duration];
      }
      else
      {
        push(@{$results->{$number_of_workers}}, $duration);
      }
      $log_file_count++;
      print "success.\n";
    }
    else
    {
      print "failed!\n";
      $log_failed_count++;
    }
  }
}

print ' * Writing results.csv...';
open(FOUT, '>:utf8', $dir . '/results.csv') or die('Failed to open file for writing.');
foreach my $number_of_workers (sort keys %{$results})
{
  print FOUT $number_of_workers . ',' . join(',', @{$results->{$number_of_workers}}) . "\n";
}
close(FOUT);
print "written!\n";

print "========== Results ========\n";
print sprintf(' Parsed log file: %4d', $log_file_count) . "\n";
print sprintf(' Failed to parse: %4d', $log_failed_count) . "\n";
print "======== Complete! ========\n\n";
exit;
