Commit | Line | Data |
60e1cc39 |
1 | package System::Introspector::Gatherer; |
2 | use Moo; |
a5e1e1c6 |
3 | use Object::Remote; |
4 | use Object::Remote::Future; |
5 | use System::Introspector::Gatherer::Bridge; |
60e1cc39 |
6 | use Module::Runtime qw( use_module ); |
7 | |
949dba9c |
8 | has introspectors => (is => 'ro', required => 1); |
9 | |
10 | sub gather_all { |
11 | my ($self) = @_; |
12 | my %report; |
93555732 |
13 | alarm 60*60; |
949dba9c |
14 | for my $spec (@{ $self->introspectors }) { |
15 | my ($base, $args) = @$spec; |
16 | $report{$base} = use_module("System::Introspector::Probe::$base") |
17 | ->new($args) |
18 | ->gather; |
19 | } |
20 | return \%report; |
60e1cc39 |
21 | } |
22 | |
a5e1e1c6 |
23 | sub _new_direct { |
949dba9c |
24 | my ($class, $remote, $args) = @_; |
25 | return $class->new::on($remote, $args || {}); |
a5e1e1c6 |
26 | } |
27 | |
28 | sub _new_bridged { |
949dba9c |
29 | my ($class, $bridge, $remote, $args) = @_; |
a5e1e1c6 |
30 | return System::Introspector::Gatherer::Bridge->new::on($bridge, |
31 | remote_spec => $remote, |
32 | remote_class => $class, |
949dba9c |
33 | remote_args => $args || {}, |
a5e1e1c6 |
34 | ); |
35 | } |
36 | |
37 | sub new_from_spec { |
38 | my ($class, %arg) = @_; |
39 | my ($user, $host, $sudo_user) = @arg{qw( user host sudo_user )}; |
40 | my $sudo = defined($sudo_user) ? sprintf('%s@', $sudo_user) : undef; |
949dba9c |
41 | my $args = { introspectors => $arg{introspectors} }; |
a5e1e1c6 |
42 | if (defined $host) { |
43 | my $remote = join '@', grep defined, $user, $host; |
44 | if (defined $sudo_user) { |
949dba9c |
45 | return $class->_new_bridged($remote, $sudo, $args); |
a5e1e1c6 |
46 | } |
47 | else { |
949dba9c |
48 | return $class->_new_direct($remote, $args); |
a5e1e1c6 |
49 | } |
50 | } |
51 | else { |
52 | if (defined $sudo_user) { |
949dba9c |
53 | return $class->_new_direct($sudo, $args); |
a5e1e1c6 |
54 | } |
55 | else { |
949dba9c |
56 | return $class->new($args); |
a5e1e1c6 |
57 | } |
58 | } |
59 | } |
60 | |
60e1cc39 |
61 | 1; |