private async Task <decimal> GetGroupDesiredValue(AutoScalingGroup resource, AutoScalingResourceConfig config) { decimal?result = null; if (config.InstanceCountIncreaseDelayMinutes != null) { result = await FetchLaggedGroupDesiredValueFromCloudWatch(resource, config.InstanceCountIncreaseDelayMinutes.Value); } return(result ?? resource.DesiredCapacity); }
public async Task <decimal> GetValue(AutoScalingGroup resource, AutoScalingResourceConfig config, string property) { if (config == null) { throw new ArgumentNullException(nameof(config)); } switch (property) { case "GroupDesiredCapacity": return(await GetGroupDesiredValue(resource, config)); } throw new Exception("Unsupported property name"); }
private async Task <decimal> GetGroupDesiredValue(AutoScalingGroup resource, AutoScalingResourceConfig config) { if (config.InstanceCountIncreaseDelayMinutes == null) { return(resource.DesiredCapacity); } var delaySeconds = config.InstanceCountIncreaseDelayMinutes.Value * 60; var now = _timeProvider.UtcNow; var metric = await _cloudWatch.GetMetricStatisticsAsync( new GetMetricStatisticsRequest() { Dimensions = new List <Dimension>() { new Dimension() { Name = "AutoScalingGroupName", Value = resource.AutoScalingGroupName } }, Statistics = new List <string>() { "Minimum" }, Namespace = "AWS/AutoScaling", Period = delaySeconds, MetricName = "GroupDesiredCapacity", StartTime = now.AddSeconds(-1 * delaySeconds), EndTime = now } ); var threshold = metric.Datapoints.FirstOrDefault(); if (threshold == null) { throw new Exception( $"No datapoints returned when requesting desired capacity from CloudWatch for {resource.AutoScalingGroupName}"); } return((decimal)threshold.Minimum); }