initial version with mediawiki produce/parse, three reports, missing update-merger
[scpubgit/System-Introspector-Report.git] / lib / System / Introspector / Report / Builder / Packages / Apt / ByHost.pm
1 package System::Introspector::Report::Builder::Packages::Apt::ByHost;
2 use Moo;
3
4 extends 'System::Introspector::Report::Builder';
5
6 has _known_package => (is => 'ro', default => sub { {} });
7 has _host_package  => (is => 'ro', default => sub { {} });
8 has _host_upgrade  => (is => 'ro', default => sub { {} });
9
10 sub required_data {
11   return qw(
12     packages/apt
13     host
14   );
15 }
16
17 sub _collect_from_data {
18   my ($self, $id, $hostname, $packages, $upgrade, $data) = @_;
19   for my $package (keys %$packages) {
20     $self->_known_package->{$package}++;
21   }
22   $self->_host_package->{$id} = $packages;
23   $self->_host_upgrade->{$id} = $upgrade;
24   return 1;
25 }
26
27 sub render_reports {
28   my ($self) = @_;
29   my @columns = (
30     { key => 'package', label => 'Package' },
31     { key => 'version', label => 'Version' },
32     { key => 'upgrade', label => 'Upgrade' },
33   );
34   my $host_package = $self->_host_package;
35   my $host_upgrade = $self->_host_upgrade;
36   my @known_packages = sort keys %{$self->_known_package};
37   return map {
38     my $remote = $_;
39     +{
40       columns => \@columns,
41       title => "Packages on $remote",
42       id => ['packages-apt-by-remote', $remote],
43       meta => { remote => $remote },
44       rows => [map {
45         my $package = $_;
46         my $version = $host_package->{$remote}{$package}{version};
47         my $upgrade = $self->_clear_upgrade(
48           $host_upgrade->{$remote}{$package},
49           $version,
50         );
51         +{
52           package => $package,
53           defined($version) ? (version => $version) : (),
54           defined($upgrade) ? (upgrade => $upgrade) : (),
55         };
56       } @known_packages],
57     };
58   } sort keys %{$self->_host_package};
59 }
60
61 with $_ for qw(
62   System::Introspector::Report::Builder::Packages::Apt::API
63 );
64
65 1;