Commit | Line | Data |
499ebcdd |
1 | package System::Introspector::Report::Builder::Packages::Apt::ByPackage; |
2 | use Moo; |
3 | |
4 | extends 'System::Introspector::Report::Builder'; |
5 | |
6 | has _host_by_remote => (is => 'ro', default => sub { {} }); |
7 | has _host_data => (is => 'ro', default => sub { {} }); |
8 | |
9 | sub required_data { |
10 | return qw( |
11 | packages/apt |
12 | host |
13 | ); |
14 | } |
15 | |
16 | sub _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 | |
29 | sub render_reports { |
30 | my ($self) = @_; |
31 | my @columns = ( |
32 | { key => 'hostname', label => 'Hostname' }, |
d5fd5ba1 |
33 | { key => 'remote', label => 'Remote Host' }, |
499ebcdd |
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], |
21e7cc98 |
46 | rowid => [qw( remote )], |
499ebcdd |
47 | meta => { package => $package }, |
48 | rows => [ map { |
49 | my $remote = $_; |
50 | +{ |
51 | remote => $remote, |
52 | hostname => $hbr->{$remote}, |
53 | %{$hosts->{$remote}}, |
54 | }; |
55 | } sort keys %$hosts ], |
56 | }; |
57 | } sort keys %$data; |
58 | } |
59 | |
60 | with $_ for qw( |
61 | System::Introspector::Report::Builder::Packages::Apt::API |
62 | ); |
63 | |
64 | 1; |