summaryrefslogtreecommitdiffstats
path: root/controller/libexec/dtf-result-stats.in
diff options
context:
space:
mode:
Diffstat (limited to 'controller/libexec/dtf-result-stats.in')
-rw-r--r--controller/libexec/dtf-result-stats.in79
1 files changed, 79 insertions, 0 deletions
diff --git a/controller/libexec/dtf-result-stats.in b/controller/libexec/dtf-result-stats.in
new file mode 100644
index 0000000..d4db46f
--- /dev/null
+++ b/controller/libexec/dtf-result-stats.in
@@ -0,0 +1,79 @@
+#!/bin/perl
+
+use strict;
+use warnings;
+use utf8;
+
+use Data::Dumper;
+use File::Basename;
+use Cwd;
+use Encode 'encode_utf8';
+
+# teplates
+use Text::Xslate;
+
+# yaml (quick) parser
+use YAML::Syck;
+
+our $srcdir = dirname(__FILE__);
+
+sub html_printer
+{
+ my $results = $_[0];
+ my $task_ids = $_[1];
+
+ my $xslate = Text::Xslate->new(path => ['@resulttemplatedir@']);
+
+ my $content = $xslate->render("html.tmpl", {
+ results => $results,
+ task_ids => $task_ids,
+ });
+ print encode_utf8($content);
+}
+
+if (! defined $ARGV[0] || ! -d $ARGV[0]) {
+ print STDERR "Please specify correct working directory\n";
+ exit (1);
+}
+
+my $workdir = $ARGV[0];
+
+my $data = [];
+
+my $task_ids = {};
+
+# go through *each* result directory
+my $olddir = getcwd;
+for (`find "$workdir" -maxdepth 1 -type d`) {
+ chomp;
+ chdir $_;
+
+ my $run_results = {};
+ $run_results->{dirname} = basename($_);
+ $run_results->{tasks} = {};
+ $run_results->{exit_status} = 0;
+
+ # go through each task
+ for (`find -maxdepth 1 -type f -name '*.result'`) {
+ chomp;
+
+ (my $task_id = $_) =~ s/\.result$//;
+ $task_id =~ s/.*\///;
+ $task_ids->{$task_id} = 1;
+
+ my $yaml_file = $_;
+ open my $fd, '<', $yaml_file
+ or die "can't open yaml file '$yaml_file'";
+
+ my $config = YAML::Syck::LoadFile($fd);
+ if ($config->{exit_status} != 0) {
+ $run_results->{exit_status} = 1;
+ }
+ $run_results->{tasks}->{$task_id} = $config;
+ }
+
+ push @{$data}, $run_results;
+}
+chdir $olddir;
+
+html_printer $data, $task_ids;