All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nitorcreations.willow.autoscaler.config.AutoScalingPolicy Maven / Gradle / Ivy

package com.nitorcreations.willow.autoscaler.config;

import com.nitorcreations.willow.utils.MergeableProperties;

public class AutoScalingPolicy {

  private String name;
  private String metricName;
  private Integer metricThreshold;
  private String metricComparison;
  private String scalingAction;

  private Double scalingMultiplier = null;
  private Integer scalingStaticValue = null;

  public static AutoScalingPolicy fromProperties(MergeableProperties properties) {
    AutoScalingPolicy policy = new AutoScalingPolicy();
    policy.setName((String)properties.get("name"));
    policy.setMetricName((String)properties.get("metricName"));
    policy.setMetricThreshold(Integer.valueOf((String)properties.get("metricThreshold")));
    policy.setMetricComparison((String)properties.get("metricComparison"));
    policy.setScalingAction((String)properties.get("scalingAction"));
    return policy;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getMetricName() {
    return metricName;
  }

  public void setMetricName(String metricName) {
    this.metricName = metricName;
  }

  public Integer getMetricThreshold() {
    return metricThreshold;
  }

  public void setMetricThreshold(Integer metricThreshold) {
    this.metricThreshold = metricThreshold;
  }

  public String getMetricComparison() {
    return metricComparison;
  }

  public void setMetricComparison(String metricComparison) {
    this.metricComparison = metricComparison;
  }

  public String getScalingAction() {
    return scalingAction;
  }

  public void setScalingAction(String input) {
    this.scalingAction = input;
    if (input != null && (input.startsWith("-") || input.startsWith("+"))) {
      if (input.endsWith("%")) {
        scalingMultiplier = Double.valueOf(input.substring(0, input.length()-1));
        scalingMultiplier = scalingMultiplier / 100D;
      } else {
        scalingStaticValue = Integer.valueOf(input);
      }
    }
  }

  public int getPolicyEffect(int currentInstanceCount) {
    int effect = 0;
    if (scalingMultiplier != null) {
      effect = (int) Math.round(currentInstanceCount * scalingMultiplier);
      //
      if (effect == 0 && scalingMultiplier > 0) {
        effect = 1;
      } else if (effect == 0 && scalingMultiplier < 0) {
        effect = -1;
      }

    } else {
      effect = scalingStaticValue;
    }
    //make sure we don't return an effect that takes instance count below zero.
    while (currentInstanceCount + effect < 0) {
      ++effect;
    }
    return effect;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy