diff options
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 |
commit | 82c774026474c33a01a63923c2e82e3c2129f230 (patch) | |
tree | ac34a5bf258663fa92a593aedd06f61f5f8baf1a /controller-api | |
parent | e83e90e93a4b012df3d30fd2cf6eab0f433ac645 (diff) |
Expose Cost API in Controller API classes
Diffstat (limited to 'controller-api')
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; + } +} |