summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java72
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java18
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java1
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java23
4 files changed, 88 insertions, 26 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java
index 31388d24e2e..44f8f6e786d 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java
@@ -6,7 +6,6 @@ import com.yahoo.config.provision.zone.ZoneId;
import java.math.BigDecimal;
import java.time.ZonedDateTime;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -125,30 +124,43 @@ public class Invoice {
private final String plan;
private final String agent;
private final ZonedDateTime addedAt;
- private final Optional<ZonedDateTime> startedAt;
- private final Optional<ZonedDateTime> endedAt;
- private final Optional<ApplicationId> applicationId;
- private final Optional<ZoneId> zoneId;
+ private ZonedDateTime startedAt;
+ private ZonedDateTime endedAt;
+ private ApplicationId applicationId;
+ private ZoneId zoneId;
+ private BigDecimal cpuHours;
+ private BigDecimal memoryHours;
+ private BigDecimal diskHours;
+ private BigDecimal cpuCost;
+ private BigDecimal memoryCost;
+ private BigDecimal diskCost;
- public LineItem(String id, String description, BigDecimal amount, String plan, String agent, ZonedDateTime addedAt, ZonedDateTime startedAt, ZonedDateTime endedAt, ApplicationId applicationId, ZoneId zoneId) {
+ public LineItem(String id, String description, BigDecimal amount, String plan, String agent, ZonedDateTime addedAt) {
this.id = id;
this.description = description;
this.amount = amount;
this.plan = plan;
this.agent = agent;
this.addedAt = addedAt;
- this.startedAt = Optional.ofNullable(startedAt);
- this.endedAt = Optional.ofNullable(endedAt);
+ }
+
+ public LineItem(String id, String description, BigDecimal amount, String plan, String agent, ZonedDateTime addedAt, ZonedDateTime startedAt, ZonedDateTime endedAt, ApplicationId applicationId, ZoneId zoneId,
+ BigDecimal cpuHours, BigDecimal memoryHours, BigDecimal diskHours, BigDecimal cpuCost, BigDecimal memoryCost, BigDecimal diskCost) {
+ this(id, description, amount, plan, agent, addedAt);
+ this.startedAt = startedAt;
+ this.endedAt = endedAt;
if (applicationId == null && zoneId != null)
throw new IllegalArgumentException("Must supply applicationId if zoneId is supplied");
- this.applicationId = Optional.ofNullable(applicationId);
- this.zoneId = Optional.ofNullable(zoneId);
- }
-
- public LineItem(String id, String description, BigDecimal amount, String plan, String agent, ZonedDateTime addedAt) {
- this(id, description, amount, plan, agent, addedAt, null, null, null, null);
+ this.applicationId = applicationId;
+ this.zoneId = zoneId;
+ this.cpuHours = cpuHours;
+ this.memoryHours = memoryHours;
+ this.diskHours = diskHours;
+ this.cpuCost = cpuCost;
+ this.memoryCost = memoryCost;
+ this.diskCost = diskCost;
}
/** The opaque ID of this */
@@ -183,22 +195,46 @@ public class Invoice {
/** What time period is this line item for - time start */
public Optional<ZonedDateTime> startedAt() {
- return startedAt;
+ return Optional.ofNullable(startedAt);
}
/** What time period is this line item for - time end */
public Optional<ZonedDateTime> endedAt() {
- return endedAt;
+ return Optional.ofNullable(endedAt);
}
/** Optionally - what application is this line item about */
public Optional<ApplicationId> applicationId() {
- return applicationId;
+ return Optional.ofNullable(applicationId);
}
/** Optionally - what zone deployment is this line item about */
public Optional<ZoneId> zoneId() {
- return zoneId;
+ return Optional.ofNullable(zoneId);
+ }
+
+ public Optional<BigDecimal> getCpuHours() {
+ return Optional.ofNullable(cpuHours);
+ }
+
+ public Optional<BigDecimal> getMemoryHours() {
+ return Optional.ofNullable(memoryHours);
+ }
+
+ public Optional<BigDecimal> getDiskHours() {
+ return Optional.ofNullable(diskHours);
+ }
+
+ public Optional<BigDecimal> getCpuCost() {
+ return Optional.ofNullable(cpuCost);
+ }
+
+ public Optional<BigDecimal> getMemoryCost() {
+ return Optional.ofNullable(memoryCost);
+ }
+
+ public Optional<BigDecimal> getDiskCost() {
+ return Optional.ofNullable(diskCost);
}
@Override
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java
index 50c257acd23..56369b52809 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java
@@ -16,14 +16,14 @@ public class CostInfo {
private final BigDecimal cpuHours;
private final BigDecimal memoryHours;
private final BigDecimal diskHours;
- private final int cpuCost;
- private final int memoryCost;
- private final int diskCost;
+ private final BigDecimal cpuCost;
+ private final BigDecimal memoryCost;
+ private final BigDecimal diskCost;
public CostInfo(ApplicationId applicationId, ZoneId zoneId,
BigDecimal cpuHours, BigDecimal memoryHours, BigDecimal diskHours,
- int cpuCost, int memoryCost, int diskCost) {
+ BigDecimal cpuCost, BigDecimal memoryCost, BigDecimal diskCost) {
this.applicationId = applicationId;
this.zoneId = zoneId;
this.cpuHours = cpuHours;
@@ -54,16 +54,20 @@ public class CostInfo {
return diskHours;
}
- public int getCpuCost() {
+ public BigDecimal getCpuCost() {
return cpuCost;
}
- public int getMemoryCost() {
+ public BigDecimal getMemoryCost() {
return memoryCost;
}
- public int getDiskCost() {
+ public BigDecimal getDiskCost() {
return diskCost;
}
+ public BigDecimal getTotalCost() {
+ return cpuCost.add(memoryCost).add(diskCost);
+ }
+
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java
index 80caef1709d..ec3f564e930 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java
@@ -50,6 +50,5 @@ public class MockMeteringClient implements MeteringClient {
public void setMeteringData(MeteringData meteringData) {
this.meteringData = Optional.of(meteringData);
this.resources = meteringData.getSnapshotHistory().entrySet().stream().map(Map.Entry::getValue).flatMap(List::stream).collect(Collectors.toList());
- boolean a = false;
}
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java
index b6e0cf5ce25..0dce968960f 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java
@@ -342,6 +342,29 @@ public class BillingApiHandler extends LoggingRequestHandler {
lineItem.applicationId().ifPresent(appId -> {
cursor.setString("application", appId.application().value());
});
+ lineItem.zoneId().ifPresent(zoneId ->
+ cursor.setString("zone", zoneId.value())
+ );
+
+ lineItem.getCpuHours().ifPresent(cpuHours ->
+ cursor.setString("cpuHours", cpuHours.toString())
+ );
+ lineItem.getMemoryHours().ifPresent(memoryHours ->
+ cursor.setString("memoryHours", memoryHours.toString())
+ );
+ lineItem.getDiskHours().ifPresent(diskHours ->
+ cursor.setString("diskHours", diskHours.toString())
+ );
+ lineItem.getCpuCost().ifPresent(cpuCost ->
+ cursor.setString("cpuCost", cpuCost.toString())
+ );
+ lineItem.getMemoryCost().ifPresent(memoryCost ->
+ cursor.setString("memoryCost", memoryCost.toString())
+ );
+ lineItem.getDiskCost().ifPresent(diskCost ->
+ cursor.setString("diskCost", diskCost.toString())
+ );
+
}
private HttpResponse deleteInstrument(String tenant, String userId, String instrument) {