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
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],
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
61with $_ for qw(
62 System::Introspector::Report::Builder::Packages::Apt::API
63);
64
651;