mediawiki merging, row identification, tests
[scpubgit/System-Introspector-Report.git] / lib / System / Introspector / Report / Builder / Packages / Apt / ByHost.pm
CommitLineData
499ebcdd 1package System::Introspector::Report::Builder::Packages::Apt::ByHost;
2use Moo;
3
4extends 'System::Introspector::Report::Builder';
5
6has _known_package => (is => 'ro', default => sub { {} });
7has _host_package => (is => 'ro', default => sub { {} });
8has _host_upgrade => (is => 'ro', default => sub { {} });
9
10sub required_data {
11 return qw(
12 packages/apt
13 host
14 );
15}
16
17sub _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
27sub 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],
21e7cc98 43 rowid => [qw( package )],
499ebcdd 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
62with $_ for qw(
63 System::Introspector::Report::Builder::Packages::Apt::API
64);
65
661;