App-FargateStack
view release on metacpan or search on metacpan
lib/App/FargateStack/AutoscalingConfig.pm view on Meta::CPAN
max_capacity
metric
min_capacity
policy_arn
policy_name
requests
scale_in_cooldown
scale_out_cooldown
scheduled_actions
task_name
)
);
use parent qw(Class::Accessor::Fast);
########################################################################
sub new {
########################################################################
my ( $class, @args ) = @_;
my $options = ref $args[0] ? $args[0] : {@args};
die 'usage: App::FargateStack::AutoscalingConfig->new(config => autoscaling-config)'
if !$options->{config};
my $self = $class->SUPER::new($options);
foreach (qw(cpu requests scale_in_cooldown scale_out_cooldown policy_name)) {
next if !defined $self->get($_);
$self->update( $_ => $self->get($_) );
}
$self->parse_metric();
if ( $self->get_cpu || $self->get_requests ) {
$self->parse_cooldown();
$self->parse_scaling_capacity();
}
$self->parse_scheduled_actions();
$self->sanity_check();
return $self;
}
########################################################################
sub sanity_check {
########################################################################
my ($self) = @_;
die 'autoscaling: cpu & requests are mutually exclusive'
if $self->get_cpu && $self->get_requests;
return;
}
########################################################################
sub update {
########################################################################
my ( $self, $key, $value ) = @_;
$self->get_config->{$key} = $value;
return $self->set( $key, $value );
}
########################################################################
sub has_scheduled_action {
########################################################################
my ($self) = @_;
return exists $self->get_config->{scheduled};
}
########################################################################
sub parse_scheduled_actions {
########################################################################
my ($self) = @_;
return
if !$self->has_scheduled_action;
my $scheduled = $self->get_config->{scheduled};
my %scheduled_actions;
foreach my $scheduled_action_name ( keys %{$scheduled} ) {
$scheduled_actions{$scheduled_action_name} = $self->_parse_scheduled_action( $scheduled->{$scheduled_action_name} );
}
$self->set_scheduled_actions( \%scheduled_actions );
return $self;
}
########################################################################
sub parse_cooldown {
########################################################################
my ($self) = @_;
return
if !$self->get_cpu && !$self->get_requests;
my $config = $self->get_config;
my $scale_out_cooldown = $self->get_scale_out_cooldown // $config->{scale_out_cooldown};
my $scale_in_cooldown = $self->get_scale_in_cooldown // $config->{scale_in_cooldown};
$scale_out_cooldown ||= $DEFAULT_AUTOSCALING_SCALE_OUT_COOLDOWN;
$scale_in_cooldown ||= $DEFAULT_AUTOSCALING_SCALE_IN_COOLDOWN;
$self->update( scale_out_cooldown => int $scale_out_cooldown );
$self->update( scale_in_cooldown => int $scale_in_cooldown );
return $self;
}
########################################################################
( run in 0.985 second using v1.01-cache-2.11-cpan-39bf76dae61 )