summaryrefslogtreecommitdiff
path: root/src/ri-planner/src/main/java/io/trygvis/acme/planning/machine/CloudProcess.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/ri-planner/src/main/java/io/trygvis/acme/planning/machine/CloudProcess.java')
-rw-r--r--src/ri-planner/src/main/java/io/trygvis/acme/planning/machine/CloudProcess.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/ri-planner/src/main/java/io/trygvis/acme/planning/machine/CloudProcess.java b/src/ri-planner/src/main/java/io/trygvis/acme/planning/machine/CloudProcess.java
new file mode 100644
index 0000000..2002903
--- /dev/null
+++ b/src/ri-planner/src/main/java/io/trygvis/acme/planning/machine/CloudProcess.java
@@ -0,0 +1,48 @@
+package io.trygvis.acme.planning.machine;
+
+import org.apache.commons.lang3.builder.CompareToBuilder;
+import org.optaplanner.core.api.domain.entity.PlanningEntity;
+import org.optaplanner.core.api.domain.variable.PlanningVariable;
+
+import java.util.Comparator;
+
+@PlanningEntity(difficultyComparatorClass = CloudProcessDifficultyComparator.class)
+public class CloudProcess {
+ public String id;
+ public int requiredCpu;
+ public int requiredMemory;
+ public int requiredMultiplicand;
+
+ @PlanningVariable(
+ valueRangeProviderRefs = "computerRange",
+ strengthComparatorClass = CloudComputerStrengthComparator.class)
+ public CloudComputer computer;
+
+ public CloudProcess(String id, int requiredCpu, int requiredMemory) {
+ this.id = id;
+ this.requiredCpu = requiredCpu;
+ this.requiredMemory = requiredMemory;
+
+ this.requiredMultiplicand = requiredCpu * requiredMemory;
+ }
+
+ @SuppressWarnings("unused")
+ public CloudProcess() {
+ }
+
+ public String toString() {
+ return id;
+ }
+
+ public static class CloudComputerStrengthComparator implements Comparator<CloudComputer> {
+ public int compare(CloudComputer a, CloudComputer b) {
+ var x = a.instance;
+ var y = b.instance;
+ return new CompareToBuilder()
+ .append(x.multiplicand, y.multiplicand)
+ .append(y.cost, x.cost) // Descending (but this is debatable)
+ .append(x.kind, y.kind)
+ .toComparison();
+ }
+ }
+}