aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2019-12-02 14:41:36 +0100
committerØyvind Grønnesby <oyving@verizonmedia.com>2019-12-02 14:41:36 +0100
commit82c774026474c33a01a63923c2e82e3c2129f230 (patch)
treeac34a5bf258663fa92a593aedd06f61f5f8baf1a /controller-api
parente83e90e93a4b012df3d30fd2cf6eab0f433ac645 (diff)
Expose Cost API in Controller API classes
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/CostResource.java27
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/TenantResource.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItem.java54
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItemUsage.java33
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostMonths.java11
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostResult.java18
6 files changed, 145 insertions, 0 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/CostResource.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/CostResource.java
new file mode 100644
index 00000000000..5a6f68cc884
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/CostResource.java
@@ -0,0 +1,27 @@
+package com.yahoo.vespa.hosted.controller.api.application.v4;
+
+import com.yahoo.vespa.hosted.controller.api.application.v4.model.CostMonths;
+import com.yahoo.vespa.hosted.controller.api.application.v4.model.CostResult;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import java.util.List;
+
+@Path("") //Ensures that the produces annotation is inherited
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public interface CostResource {
+ String API_PATH = "cost";
+
+ @GET
+ @Path("/")
+ CostMonths costMonths();
+
+ @GET
+ @Path("/{month}")
+ CostResult cost(@PathParam("month") String month);
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/TenantResource.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/TenantResource.java
index 06a8f8371ab..27d63146dba 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/TenantResource.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/TenantResource.java
@@ -40,4 +40,6 @@ public interface TenantResource {
@Path(ApplicationResource.API_PATH)
ApplicationResource application();
+ @Path(CostResource.API_PATH)
+ CostResource cost();
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItem.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItem.java
new file mode 100644
index 00000000000..7bf6c08c3f7
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItem.java
@@ -0,0 +1,54 @@
+package com.yahoo.vespa.hosted.controller.api.application.v4.model;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.zone.ZoneId;
+
+public class CostItem {
+ private String applicationId;
+ private String zoneId;
+ private CostItemUsage cpu;
+ private CostItemUsage memory;
+ private CostItemUsage disk;
+
+ public CostItem() {}
+
+ public ApplicationId getApplicationId() {
+ return ApplicationId.fromSerializedForm(applicationId);
+ }
+
+ public ZoneId getZoneId() {
+ return ZoneId.from(zoneId);
+ }
+
+ public CostItemUsage getCpu() {
+ return cpu;
+ }
+
+ public CostItemUsage getMemory() {
+ return memory;
+ }
+
+ public CostItemUsage getDisk() {
+ return disk;
+ }
+
+ public static CostItem zeroItem(String applicationId, String zoneId) {
+ var item = new CostItem();
+ item.applicationId = applicationId;
+ item.zoneId = zoneId;
+ item.cpu = CostItemUsage.zero();
+ item.memory = CostItemUsage.zero();
+ item.disk = CostItemUsage.zero();
+ return item;
+ }
+
+ public static CostItem add(CostItem a, CostItem b) {
+ var added = new CostItem();
+ added.applicationId = a.applicationId;
+ added.zoneId = a.zoneId;
+ added.cpu = CostItemUsage.add(a.cpu, b.cpu);
+ added.memory = CostItemUsage.add(a.memory, b.memory);
+ added.disk = CostItemUsage.add(a.disk, b.disk);
+ return added;
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItemUsage.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItemUsage.java
new file mode 100644
index 00000000000..973611aa182
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostItemUsage.java
@@ -0,0 +1,33 @@
+package com.yahoo.vespa.hosted.controller.api.application.v4.model;
+
+import java.math.BigDecimal;
+
+public class CostItemUsage {
+ private BigDecimal usage;
+ private BigDecimal charge;
+
+ public CostItemUsage() {}
+
+ public BigDecimal getUsage() {
+ return usage;
+ }
+
+ public BigDecimal getCharge() {
+ return charge;
+ }
+
+ public static CostItemUsage zero() {
+ var usage = new CostItemUsage();
+ usage.charge = BigDecimal.ZERO;
+ usage.usage = BigDecimal.ZERO;
+ return usage;
+ }
+
+ public static CostItemUsage add(CostItemUsage a, CostItemUsage b) {
+ var added = new CostItemUsage();
+ added.usage = a.usage.add(b.usage);
+ added.charge = a.charge.add(b.usage);
+ return added;
+ }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostMonths.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostMonths.java
new file mode 100644
index 00000000000..17ad5ef460c
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostMonths.java
@@ -0,0 +1,11 @@
+package com.yahoo.vespa.hosted.controller.api.application.v4.model;
+
+import java.util.List;
+
+public class CostMonths {
+ public List<String> months;
+
+ public List<String> getMonths() {
+ return months;
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostResult.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostResult.java
new file mode 100644
index 00000000000..b6f23402b93
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/CostResult.java
@@ -0,0 +1,18 @@
+package com.yahoo.vespa.hosted.controller.api.application.v4.model;
+
+import java.util.List;
+
+public class CostResult {
+ private String month;
+ private List<CostItem> items;
+
+ public CostResult() {}
+
+ public String getMonth() {
+ return month;
+ }
+
+ public List<CostItem> getItems() {
+ return items;
+ }
+}