fix dynamic generation skip bug
[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 has include_uninstalled => (is => 'ro');
10
11 sub required_data {
12   return qw(
13     packages/apt
14     host
15   );
16 }
17
18 sub _collect_from_data {
19   my ($self, $id, $hostname, $packages, $upgrade, $data) = @_;
20   for my $package (keys %$packages) {
21     $self->_known_package->{$package}++;
22   }
23   $self->_host_package->{$id} = $packages;
24   $self->_host_upgrade->{$id} = $upgrade;
25   return 1;
26 }
27
28 sub render_reports {
29   my ($self) = @_;
30   my @columns = (
31     { key => 'package', label => 'Package' },
32     { key => 'version', label => 'Version' },
33     { key => 'upgrade', label => 'Upgrade' },
34   );
35   my $host_package = $self->_host_package;
36   my $host_upgrade = $self->_host_upgrade;
37   my @known_packages = sort keys %{$self->_known_package};
38   my $inc_uninstalled = $self->include_uninstalled;
39   return map {
40     my $remote = $_;
41     +{
42       columns => \@columns,
43       title => "Packages on $remote",
44       id => ['packages-apt-by-remote', $remote],
45       rowid => [qw( package )],
46       meta => { remote => $remote },
47       rows => [map {
48         my $package = $_;
49         my $version = $host_package->{$remote}{$package}{version};
50         my $upgrade = $self->_clear_upgrade(
51           $host_upgrade->{$remote}{$package},
52           $version,
53         );
54         +{
55           package => $package,
56           defined($version) ? (version => $version) : (),
57           defined($upgrade) ? (upgrade => $upgrade) : (),
58         };
59       } grep {
60         $inc_uninstalled
61           ? 1
62           : defined($host_package->{$remote}{$_});
63       } @known_packages],
64     };
65   } sort keys %{$self->_host_package};
66 }
67
68 with $_ for qw(
69   System::Introspector::Report::Builder::Packages::Apt::API
70 );
71
72 1;