File Coverage

blib/lib/Object/Remote/WatchDog.pm
Criterion Covered Total %
statement 0 21 0.0
branch 0 2 0.0
condition 0 3 0.0
subroutine 0 9 0.0
pod 0 4 0.0
total 0 39 0.0


line stmt bran cond sub pod time code
1             package Object::Remote::WatchDog;
2              
3             use Object::Remote::Logging qw (:log :dlog router);
4             use Moo;
5              
6             has timeout => ( is => 'ro', required => 1 );
7              
8             BEGIN { router()->exclude_forwarding; }
9              
10             sub instance {
11 0     0 0   my ($class, @args) = @_;
12              
13 0   0       return our $WATCHDOG ||= do {
14 0     0     log_trace { "Constructing new instance of global watchdog" };
  0            
15 0           $class->new(@args);
16             };
17             };
18              
19             #start the watchdog
20             sub BUILD {
21 0     0 0   my ($self) = @_;
22              
23             $SIG{ALRM} = sub {
24             #if the Watchdog is killing the process we don't want any chance of the
25             #process not actually exiting and die could be caught by an eval which
26             #doesn't do us any good
27 0     0     log_fatal { "Watchdog has expired, terminating the process" };
  0            
28 0           exit(1);
29 0           };
30              
31 0     0     Dlog_debug { "Initializing watchdog with timeout of $_ seconds" } $self->timeout;
  0            
32 0           alarm($self->timeout);
33             }
34              
35             #invoke at least once per timeout to stop
36             #the watchdog from killing the process
37             sub reset {
38 0 0   0 0   die "Attempt to reset the watchdog before it was constructed"
39             unless defined our $WATCHDOG;
40              
41 0     0     log_debug { "Watchdog has been reset" };
  0            
42 0           alarm($WATCHDOG->timeout);
43             }
44              
45             #must explicitly call this method to stop the
46             #watchdog from killing the process - if the
47             #watchdog is lost because it goes out of scope
48             #it makes sense to still terminate the process
49             sub shutdown {
50 0     0 0   my ($self) = @_;
51 0     0     log_debug { "Watchdog is shutting down" };
  0            
52 0           alarm(0);
53             }
54              
55             1;
56              
57