private int computeScaling()

in cloudwatch-lambda/src/main/java/com/amazonwebservices/blogs/containers/CloudWatchAlarmHandler.java [249:294]


	private int computeScaling (ComparisonOperator operator, 
			int minReplicas, 
			int maxReplicas, 
			int replicas, 
			ScalingBehavior scaleUpBehavior, 
			ScalingBehavior scaleDownBehavior) {
		
		ScalingBehavior behavior = null;
		boolean scalingUp = true;
		
		if (Objects.equals(operator, ComparisonOperator.GreaterThanOrEqualToThreshold) ||
			Objects.equals(operator, ComparisonOperator.GreaterThanThreshold)) {
			behavior = scaleUpBehavior;
			scalingUp = true;
		}
		else if (Objects.equals(operator, ComparisonOperator.LessThanOrEqualToThreshold) ||
				 Objects.equals(operator, ComparisonOperator.LessThanThreshold)) {
			behavior = scaleDownBehavior;
			scalingUp = false;
		}
		
		List<ScalingPolicy> policies = behavior.getPolicies();
		int changeInReplicas = Integer.MIN_VALUE;
		for (ScalingPolicy policy : policies) {
			if (Objects.equals(policy.getType(), ScalingPolicy.ScalingType.Pods)) {
				int value = policy.getValue();
				if (value >= changeInReplicas) changeInReplicas = value;
			}
			else if (Objects.equals(policy.getType(), ScalingPolicy.ScalingType.Percent)) {
				int value = policy.getValue() * replicas / 100;
				if (value >= changeInReplicas) changeInReplicas = value;
			}
		}
		
		int scaledReplicas = -1;
		if (scalingUp) {
			scaledReplicas = replicas + changeInReplicas;
			if (scaledReplicas > maxReplicas) scaledReplicas = maxReplicas;
		}
		else {
			scaledReplicas = replicas - changeInReplicas;
			if (scaledReplicas < minReplicas) scaledReplicas = minReplicas;
		}
		logger.info(String.format("Number of replicas after scaling set to %d", scaledReplicas));
		return scaledReplicas;
	}