Forging/Forging Perl Script: Difference between revisions

The official GemStone IV encyclopedia.
< Forging
Jump to navigation Jump to search
m (add script template)
(Log parser in perl for forging related statistics)
Line 2: Line 2:
| title = Forging Perl Script
| title = Forging Perl Script
| author = XYGON
| author = XYGON
| compat = ?
| compat = Perl - Not a front end
}}
}}


Line 29: Line 29:
sub parse_logs {
sub parse_logs {
my($charname) = $ARGV[0];
my($charname) = $ARGV[0];
# FOR NOW - delete all data prior to starting


print "Parsing logs\n";
print "Parsing logs\n";
Line 38: Line 39:
foreach my $filename (sort{$files{$a} <=> $files{$b}} keys %files) {
foreach my $filename (sort{$files{$a} <=> $files{$b}} keys %files) {


# Only 2nd argument's logs
next if ($filename !~ /$charname*/);
next if ($filename !~ /$charname*/);


Line 47: Line 47:


if ($line =~ /180 sec/) {
if ($line =~ /180 sec/) {
# print "\nInventory update - $filename\t", scalar localtime($files{$filename}), "\n";
# Log an attempt
$arRank[$curRank] += 1;
$arRank[$curRank] += 1;


} elsif ($line =~ /Aha, you learned something that time./) {
} elsif ($line =~ /Aha, you learned something that time./) {
# Next rank
$curRank += 1;
$curRank += 1;
}
}
Line 57: Line 56:
}
}


use Text::ASCIITable;
# Print all results
my($t) = Text::ASCIITable->new({ headingText => 'Attempts Per Rank' });
for (my $i=1; $i <= $curRank; $i++) {
if ($curRank > 1000) {
print $i, " - ", $arRank[$i], "\n";
$t->setCols('Rank','ToNext','TotalAtt','ToNext','TotalAtt','ToNext','TotalAtt');
} elsif ($curRank > 500) {
$t->setCols('Rank','ToNext','TotalAtt','ToNext','TotalAtt');
} elsif ($curRank <= 500) {
$t->setCols('Rank','ToNext','TotalAtt');
}


my(@arSum) = ();
for (my $i=1; $i <= $curRank; $i++) {
if ($i + 1000 <= $curRank) {
$arSum[2] += $arRank[$i+1000];
$arSum[1] += $arRank[$i+500];
$arSum[0] += $arRank[$i];
$t->addRow($i,$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1],$arRank[$i+1000],$arSum[2]);
} elsif ($i + 500 <= $curRank) {
$arSum[1] += $arRank[$i+500];
$arSum[0] += $arRank[$i];
$t->addRow($i,$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1]);
} else {
$arSum[0] += $arRank[$i];
$t->addRow($i,$arRank[$i],$arSum[0]);
}
if ($i == 499) { $curRank = 0; }
}
}
print $t;
}
}

</nowiki>
</nowiki>

Revision as of 09:47, 6 July 2015

Title:Forging Perl Script
Author:XYGON
Compatibility:#UNDEFINED#

Used with scriptname.pl <CharacterName> Returns how many attempts were made to forge for each rank.

use strict;
use warnings;
use DBI;

my(%previous_inventory);
my(%current_inventory);

parse_logs();

sub get_sorted_files {
   my $path = shift;
   opendir my($dir), $path or die "can't opendir $path: $!";
   my %hash = map {$_ => (stat($_))[9] || undef} # avoid empty list
           map  { "$path$_" }
           readdir $dir;
   closedir $dir;
   return %hash;
}

sub parse_logs {
  my($charname) = $ARGV[0];
  # FOR NOW - delete all data prior to starting

  print "Parsing logs\n";
  my @arRank;
  my $curRank = 1;
  
  my %files = get_sorted_files("./");
  STDOUT->autoflush( 1 );
  foreach my $filename (sort{$files{$a} <=> $files{$b}} keys %files) {

    next if ($filename !~ /$charname*/);

    open my $logfile, '<', $filename or die "Could not open '$filename' $!\n";

    while (my $line = <$logfile>) {
      chomp $line;

      if ($line =~ /180 sec/) { 
        # print "\nInventory update - $filename\t", scalar localtime($files{$filename}), "\n";
        $arRank[$curRank] += 1;

      } elsif ($line =~ /Aha, you learned something that time./) {
        $curRank += 1;
      }
    }
  }

  use Text::ASCIITable;
  my($t) = Text::ASCIITable->new({ headingText => 'Attempts Per Rank' });
  if ($curRank > 1000) {
    $t->setCols('Rank','ToNext','TotalAtt','ToNext','TotalAtt','ToNext','TotalAtt');
  } elsif ($curRank > 500) {
    $t->setCols('Rank','ToNext','TotalAtt','ToNext','TotalAtt');
  } elsif ($curRank <= 500) {
    $t->setCols('Rank','ToNext','TotalAtt');
  }

  my(@arSum) = ();
  for (my $i=1; $i <= $curRank; $i++) {
    if ($i + 1000 <= $curRank) {      
      $arSum[2] += $arRank[$i+1000];
      $arSum[1] += $arRank[$i+500];
      $arSum[0] += $arRank[$i];
      $t->addRow($i,$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1],$arRank[$i+1000],$arSum[2]);
    } elsif ($i + 500 <= $curRank) {
      $arSum[1] += $arRank[$i+500];
      $arSum[0] += $arRank[$i];
      $t->addRow($i,$arRank[$i],$arSum[0],$arRank[$i+500],$arSum[1]);
    } else {
      $arSum[0] += $arRank[$i];
      $t->addRow($i,$arRank[$i],$arSum[0]);
    }
    if ($i == 499) { $curRank = 0; }
  }
  print $t;
}