Commit | Line | Data |
f7ea4120 |
1 | package Object::Remote::LogRouter; |
2 | |
3 | use Moo; |
4 | use Scalar::Util qw(blessed); |
5 | |
6 | with 'Object::Remote::Role::LogForwarder'; |
7 | |
8 | has subscriptions => ( is => 'ro', required => 1, default => sub { [] } ); |
4a9fa1a5 |
9 | has description => ( is => 'rw', required => 1 ); |
f7ea4120 |
10 | |
11 | sub before_import { } |
37efeb68 |
12 | sub after_import { } |
f7ea4120 |
13 | |
14 | sub subscribe { |
6536ccd3 |
15 | my ($self, $logger, $selector) = @_; |
5d59cb98 |
16 | my $subscription_list = $self->subscriptions; |
6536ccd3 |
17 | |
18 | my $subscription = [ $logger, $selector ]; |
f7ea4120 |
19 | |
6536ccd3 |
20 | push(@$subscription_list, $subscription); |
21 | |
22 | return $self; |
f7ea4120 |
23 | } |
24 | |
25 | #TODO turn this logic into a role |
6536ccd3 |
26 | sub get_loggers { |
27 | my ($self, $caller, $level) = @_; |
5d59cb98 |
28 | my $should_clean = 0; |
6536ccd3 |
29 | my @logger_list; |
f7ea4120 |
30 | |
5d59cb98 |
31 | foreach(@{ $self->subscriptions }) { |
6536ccd3 |
32 | unless(defined) { |
5d59cb98 |
33 | $should_clean = 1; |
34 | next; |
35 | } |
6536ccd3 |
36 | |
5d59cb98 |
37 | my ($logger, $selector) = @$_; |
6536ccd3 |
38 | |
39 | if ($selector->({ log_level => $level, package => $caller, caller_level => 2 })) { |
40 | push(@logger_list, $logger); |
5d59cb98 |
41 | } |
f7ea4120 |
42 | } |
43 | |
44 | if ($should_clean) { |
5d59cb98 |
45 | $self->_remove_dead_subscriptions; |
f7ea4120 |
46 | } |
47 | |
6536ccd3 |
48 | return @logger_list; |
f7ea4120 |
49 | } |
50 | |
51 | sub _remove_dead_subscriptions { |
5d59cb98 |
52 | my ($self) = @_; |
53 | my @ok = grep { defined $_ } @{$self->subscriptions}; |
54 | @{$self->subscriptions} = @ok; |
55 | return; |
f7ea4120 |
56 | } |
57 | |
58 | |
59 | 1; |
60 | |