File Coverage

blib/lib/PkgForge/Daemon/Buildd.pm
Criterion Covered Total %
statement 15 15 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 20 20 100.0


line stmt bran cond sub pod time code
1             package PkgForge::Daemon::Buildd; # -*-perl-*-
2 1     1   2160 use strict;
  1         4  
  1         39  
3 1     1   7 use warnings;
  1         2  
  1         58  
4              
5             # $Id: Buildd.pm.in 17473 2011-06-01 13:07:47Z squinney@INF.ED.AC.UK $
6             # $Source:$
7             # $Revision: 17473 $
8             # $HeadURL: https://svn.lcfg.org/svn/source/tags/PkgForge-Server/PkgForge_Server_1_1_10/lib/PkgForge/Daemon/Buildd.pm.in $
9             # $Date: 2011-06-01 14:07:47 +0100 (Wed, 01 Jun 2011) $
10              
11             our $VERSION = '1.1.10';
12              
13             my $PLEASE_STOP = 0;
14              
15 1     1   8 use Moose;
  1         2  
  1         9  
16 1     1   7093 use MooseX::Types::Moose qw(Int);
  1         3  
  1         12  
17              
18             extends 'PkgForge::Daemon', 'PkgForge::Handler::Buildd';
19              
20             has 'poll' => (
21             is => 'ro',
22             isa => Int,
23             default => 60,
24             required => 1,
25             documentation => 'Interval (in seconds) to wait between queue runs',
26             );
27              
28             # Different pidfile for each individual buildd
29              
30             override 'init_pidfile' => sub {
31             my ($self) = @_;
32              
33             my $file = $self->progname . '-' . $self->name . '.pid';
34             my $path = File::Spec->catfile( $self->pidfile_dir, $file );
35              
36             return $path;
37             };
38              
39             override 'status_message' => sub {
40             my ( $self, $pid ) = @_;
41              
42             my $name = $self->name;
43             if ($pid) {
44             print "Build daemon '$name' is running with PID $pid\n";
45             } else {
46             print "Build daemon '$name' is not running\n";
47             }
48              
49             return;
50             };
51              
52             override 'shutdown' => sub {
53             my ($self) = @_;
54              
55             $self->logger->notice('Handling shutdown request');
56              
57             $PLEASE_STOP = 1;
58              
59             return;
60             };
61              
62             after 'start' => sub {
63             my ($self) = @_;
64              
65             my $name = $self->name;
66              
67             $self->logger->notice("Starting build daemon '$name'");
68              
69             $self->preflight();
70              
71             while ( !$PLEASE_STOP ) {
72             my $task = $self->next_task;
73             while ( !$PLEASE_STOP && !defined $task ) {
74             sleep $self->poll;
75             $task = $self->next_task;
76             }
77              
78             if ( !$PLEASE_STOP ) {
79             my $uuid = $task->job->uuid;
80             $self->logger->notice("Starting task $uuid on " . $self->name);
81             $self->execute($task);
82             $self->logger->notice("Finished task $uuid on " . $self->name);
83             }
84              
85             # Try to leave the registry in a nice state if we didn't complete
86             # the job. This way it will be attempted again later.
87              
88             $self->reset_unfinished_tasks();
89              
90             }
91              
92             $self->logger->notice("Stopping build daemon '$name'");
93              
94             exit 0;
95             };
96              
97 1     1   6311 no Moose;
  1         3  
  1         6  
98             __PACKAGE__->meta->make_immutable;
99              
100             1;
101             __END__