mediawiki merging, row identification, tests
[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       rowid => [qw( package )],
44       meta => { remote => $remote },
45       rows => [map {
46         my $package = $_;
47         my $version = $host_package->{$remote}{$package}{version};
48         my $upgrade = $self->_clear_upgrade(
49           $host_upgrade->{$remote}{$package},
50           $version,
51         );
52         +{
53           package => $package,
54           defined($version) ? (version => $version) : (),
55           defined($upgrade) ? (upgrade => $upgrade) : (),
56         };
57       } @known_packages],
58     };
59   } sort keys %{$self->_host_package};
60 }
61
62 with $_ for qw(
63   System::Introspector::Report::Builder::Packages::Apt::API
64 );
65
66 1;