diff options
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java new file mode 100644 index 00000000000..842f2b1f1b4 --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java @@ -0,0 +1,44 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision.autoscale; + +import com.yahoo.config.provision.NodeResources; + +/** + * A resource subject to autoscaling + * + * @author bratseth + */ +public enum Resource { + + cpu { + String metric() { return "cpu"; } // TODO: Full metric name + double idealAverageLoad() { return 0.2; } + double valueFrom(NodeResources resources) { return resources.vcpu(); } + }, + + memory { + String metric() { return "memory"; } // TODO: Full metric name + double idealAverageLoad() { return 0.7; } + double valueFrom(NodeResources resources) { return resources.memoryGb(); } + }, + + disk { + String metric() { return "disk"; } // TODO: Full metric name + double idealAverageLoad() { return 0.7; } + double valueFrom(NodeResources resources) { return resources.diskGb(); } + }; + + abstract String metric(); + + /** The load we should have of this resource on average, when one node in the cluster is down */ + abstract double idealAverageLoad(); + + abstract double valueFrom(NodeResources resources); + + public static Resource fromMetric(String metricName) { + for (Resource resource : values()) + if (resource.metric().equals(metricName)) return resource; + throw new IllegalArgumentException("Metric '" + metricName + "' does not map to a resource"); + } + +} |