Commit | Line | Data |
499ebcdd |
1 | package System::Introspector::Report::Builder::Packages::Apt::ByHost; |
2 | use Moo; |
3 | |
4 | extends 'System::Introspector::Report::Builder'; |
5 | |
576b4278 |
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 | has include_uninstalled => (is => 'ro'); |
499ebcdd |
10 | |
11 | sub required_data { |
12 | return qw( |
13 | packages/apt |
14 | host |
15 | ); |
16 | } |
17 | |
18 | sub _collect_from_data { |
19 | my ($self, $id, $hostname, $packages, $upgrade, $data) = @_; |
20 | for my $package (keys %$packages) { |
21 | $self->_known_package->{$package}++; |
22 | } |
23 | $self->_host_package->{$id} = $packages; |
24 | $self->_host_upgrade->{$id} = $upgrade; |
25 | return 1; |
26 | } |
27 | |
28 | sub render_reports { |
29 | my ($self) = @_; |
30 | my @columns = ( |
31 | { key => 'package', label => 'Package' }, |
32 | { key => 'version', label => 'Version' }, |
33 | { key => 'upgrade', label => 'Upgrade' }, |
34 | ); |
35 | my $host_package = $self->_host_package; |
36 | my $host_upgrade = $self->_host_upgrade; |
37 | my @known_packages = sort keys %{$self->_known_package}; |
576b4278 |
38 | my $inc_uninstalled = $self->include_uninstalled; |
499ebcdd |
39 | return map { |
40 | my $remote = $_; |
41 | +{ |
42 | columns => \@columns, |
43 | title => "Packages on $remote", |
44 | id => ['packages-apt-by-remote', $remote], |
21e7cc98 |
45 | rowid => [qw( package )], |
499ebcdd |
46 | meta => { remote => $remote }, |
47 | rows => [map { |
48 | my $package = $_; |
49 | my $version = $host_package->{$remote}{$package}{version}; |
50 | my $upgrade = $self->_clear_upgrade( |
51 | $host_upgrade->{$remote}{$package}, |
52 | $version, |
53 | ); |
54 | +{ |
55 | package => $package, |
56 | defined($version) ? (version => $version) : (), |
57 | defined($upgrade) ? (upgrade => $upgrade) : (), |
58 | }; |
576b4278 |
59 | } grep { |
60 | $inc_uninstalled |
61 | ? 1 |
62 | : defined($host_package->{$remote}{$_}); |
499ebcdd |
63 | } @known_packages], |
64 | }; |
65 | } sort keys %{$self->_host_package}; |
66 | } |
67 | |
68 | with $_ for qw( |
69 | System::Introspector::Report::Builder::Packages::Apt::API |
70 | ); |
71 | |
72 | 1; |