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