Add build stuff.

master
Kaitlyn Parkhurst 3 years ago
parent f2eef86067
commit 7c12a58d12
  1. 96
      DB/lib/MJB/DB/Result/Blog.pm

@ -231,6 +231,100 @@ __PACKAGE__->has_many(
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2022-09-15 21:45:36
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:L3dxpgcZP09t4/pKOLFDUA
use DateTime;
sub repo {
my ( $self ) = @_;
return $self->search_related( 'repoes' )->first;
}
sub get_builds {
my ( $self ) = @_;
return [ map { +{
id => $_->id,
job_id => $_->job_id,
date => $_->created_at->strftime( "%F %T %Z" ),
} } $self->search_related( 'builds', { }, { order_by => { -DESC => 'created_at' } } ) ];
}
sub build_count {
my ( $self, @time ) = @_;
if ( ! @time ) {
return $self->search_related( 'builds', { }, { } )->count;
}
return $self->search_related( 'builds',
{
created_at => {
'>=',
$self->result_source->schema->storage->datetime_parser->format_datetime(
DateTime->now->subtract( @time )
)
}
},
{
},
)->count;
}
sub minutes_since_last_build {
my ( $self ) = @_;
my ( $build ) = $self->search_related( 'builds', { }, { order_by => { -DESC => 'created_at' }, limit => 1 } )->all;
return undef unless $build;
return DateTime->now->subtract_datetime( $build->created_at )->in_units( 'minutes' );
}
sub get_build_allowance {
my ( $self ) = @_;
# Create a data structure with the build restrictions.
#
# If there is no build yet, set minutes_since_last_build to one more than
# minutes_wait_after_build so this test passes to make the first build.
my $data = {
can_build => undef,
total_builds => $self->build_count,
wait_minutes => {
required => $self->minutes_wait_after_build,
current => defined $self->minutes_since_last_build ? $self->minutes_since_last_build : ( $self->minutes_wait_after_build + 1 ),
can_build => undef,
},
builds_over_hour => {
allowed => $self->builds_per_hour,
used => $self->build_count( hours => 1 ),
can_build => undef,
},
builds_over_day => {
allowed => $self->builds_per_day,
used => $self->build_count( hours => 24 ),
can_build => undef,
},
};
# Calculcate the results of the rules.
$data->{wait_minutes}{can_build} = $data->{wait_minutes}{required} <= $data->{wait_minutes}{current} ? 1 : 0;
$data->{builds_over_hour}{can_build} = $data->{builds_over_hour}{allowed} > $data->{builds_over_hour}{used} ? 1 : 0;
$data->{builds_over_day}{can_build} = $data->{builds_over_day}{allowed} > $data->{builds_over_day}{used} ? 1 : 0;
# If all limits can build, we're good.
$data->{can_build} = (
$data->{wait_minutes}{can_build} && $data->{builds_over_hour}{can_build} && $data->{builds_over_day}{can_build}
? 1
: 0
);
return $data;
}
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;

Loading…
Cancel
Save