72 lines
1.4 KiB
Perl
72 lines
1.4 KiB
Perl
#! /usr/bin/env perl
|
|
|
|
use v5.10.1;
|
|
use strict;
|
|
use warnings;
|
|
use File::Basename;
|
|
use Getopt::Long;
|
|
use Pod::Usage;
|
|
|
|
use lib "../";
|
|
use ACU::Grading;
|
|
use ACU::Log;
|
|
use ACU::Trace;
|
|
|
|
# Parse arguments
|
|
our $debug;
|
|
my $input; my $format = "csv";
|
|
my $help; my $man;
|
|
GetOptions ("help|h|?" => \$help,
|
|
"man" => \$man,
|
|
"format|F=s" => \$format,
|
|
"debug|d|v" => \$debug,
|
|
"" => \$input)
|
|
or pod2usage(2);
|
|
pod2usage(1) if $help;
|
|
pod2usage(-exitval => 0, -verbose => 2) if $man;
|
|
|
|
|
|
my $xmlgrading;
|
|
if (defined $input) {
|
|
$xmlgrading = *STDIN;
|
|
}
|
|
else {
|
|
open $xmlgrading, "<", shift or die $!;
|
|
}
|
|
binmode $xmlgrading;
|
|
my $grade = Grading->new($xmlgrading);
|
|
close $xmlgrading unless $xmlgrading eq *STDIN;
|
|
|
|
my $who = "";
|
|
while ($#ARGV >= -1)
|
|
{
|
|
my $arg = shift // "//";
|
|
|
|
if ($arg eq "//")
|
|
{
|
|
say $who.",".$grade->compute() if ($format eq "csv" or $format eq "CSV");
|
|
print $grade->computeXML($who) if ($format eq "xml" or $format eq "XML");
|
|
|
|
$grade->reset();
|
|
$who = "";
|
|
|
|
last if ($#ARGV == -1);
|
|
}
|
|
else
|
|
{
|
|
if (-f $arg)
|
|
{
|
|
open my $xmltrace, "<", $arg or die "$arg: $!";
|
|
binmode $xmltrace;
|
|
my $trace = Trace->new($xmltrace);
|
|
close $xmltrace;
|
|
|
|
$grade->fill($trace->getIds);
|
|
$who = $trace->getFirstWho() // basename $arg, ".xml", ".trace", ".traces", ".defense", ".defenses", ".mill";
|
|
}
|
|
else {
|
|
log WARN, "No trace file: $arg, skip";
|
|
}
|
|
}
|
|
}
|