mediawiki report publishing
[scpubgit/System-Introspector-Report.git] / lib / System / Introspector / Report / Builder / Perls.pm
1 package System::Introspector::Report::Builder::Perls;
2 use Moo;
3
4 extends 'System::Introspector::Report::Builder';
5
6 has skip_errors => (is => 'ro', default => sub { 1 });
7
8 has _rows => (is => 'ro', default => sub { [] });
9
10 sub required_data {
11   return qw(
12     perls
13     host
14   );
15 }
16
17 sub collect_from {
18   my ($self, $id, $data) = @_;
19   my $perls    = $data->{perls}{perls} || {};
20   my $hostname = $data->{host}{hostname};
21   if (my @perl_keys = sort keys %$perls) {
22     for my $perl_key (@perl_keys) {
23       my $perl = $perls->{$perl_key};
24       next if defined($perl->{__error__}) and $self->skip_errors;
25       push @{$self->_rows}, {
26         hostname => $hostname,
27         remote   => $id,
28         location => $perl->{executable},
29         version  => $perl->{config}{version},
30         defined($perl->{__error__})
31           ? (__error__ => $perl->{__error__})
32           : (),
33       };
34     }
35   }
36   else {
37     push @{$self->_rows}, {
38       hostname => $hostname,
39       remote   => $id,
40     };
41   }
42   return 1;
43 }
44
45 sub render_reports {
46   my ($self) = @_;
47   return +{
48     title => 'Perl Installations',
49     id => 'perls',
50     rowid => [qw( remote location )],
51     meta => {},
52     columns => [
53       { key => 'remote',   label => 'Remote' },
54       { key => 'hostname', label => 'Hostname' },
55       { key => 'location', label => 'Location' },
56       { key => 'version',  label => 'Version' },
57     ],
58     rows => $self->_rows,
59   };
60 }
61
62 1;