Commit | Line | Data |
499ebcdd |
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], |
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 | |
62 | with $_ for qw( |
63 | System::Introspector::Report::Builder::Packages::Apt::API |
64 | ); |
65 | |
66 | 1; |