File Coverage

blib/lib/Eixo/Docker/EventPool.pm
Criterion Covered Total %
statement 9 42 21.4
branch 0 4 0.0
condition 0 2 0.0
subroutine 3 9 33.3
pod 0 3 0.0
total 12 60 20.0


line stmt bran cond sub pod time code
1             package Eixo::Docker::EventPool;
2              
3 12     12   70 use strict;
  12         22  
  12         280  
4 12     12   52 use IO::Handle;
  12         23  
  12         385  
5              
6 12     12   57 use JSON;
  12         53  
  12         59  
7              
8             sub new{
9            
10 0   0 0 0   return bless({
11              
12             filter=>$_[1] || undef,
13              
14             api=>$_[2],
15              
16             frequency=>$_[3]
17              
18             }, $_[0]);
19              
20             }
21              
22             sub create{
23 0     0 0   my ($self) = @_;
24              
25 0           my ($reader, $writer);
26              
27 0           pipe($reader, $writer);
28              
29 0           $writer->autoflush(1);
30              
31 0 0         if(my $pid = fork){
32            
33 0           close($writer);
34              
35             return {
36            
37 0           pid=>$pid,
38              
39             reader=>$reader
40             }
41             }
42             else{
43              
44 0           $self->{writer} = $writer;
45              
46             $SIG{TERM} = sub {
47 0     0     exit 0;
48 0           };
49              
50 0           eval{
51 0           $self->loop;
52             };
53 0 0         if($@){
54 0           print "CRASHED : $@\n";
55 0           exit 1;
56             }
57             }
58             }
59              
60             sub loop{
61 0     0 0   my ($self) = @_;
62              
63 0           $self->{last} = time - 10;
64              
65 0           while(1){
66              
67 0           my $events = $self->__getEvents();
68              
69 0           $self->__sendEvents($events);
70             }
71             }
72              
73             sub __getEvents{
74 0     0     my ($self) = @_;
75              
76 0           my $n_time = time + $self->{frequency};
77              
78             my $events = $_[0]->{api}->events->get(
79              
80             until=>$n_time,
81              
82             since=>$self->{last}
83 0           );
84              
85 0           $self->{last} = $n_time;
86              
87 0           return $events;
88              
89             }
90              
91             sub __sendEvents{
92 0     0     my ($self, $events) = @_;
93              
94 0           my $w = $self->{writer};
95              
96 0           my $json = JSON->new;
97              
98 0           foreach my $e (@{$events->{Events}}){
  0            
99              
100 0           print $w $json->encode($e) . "\n";
101              
102             }
103              
104 0           $events->{Events} = [];
105             }
106              
107             1;