[JCLOUDS-1468] Adding missing options for the ListUsageRecords API call.
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java
index 55adab9..ddcd48f 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java
@@ -30,6 +30,7 @@
import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
+import java.util.Set;
/**
* Represents a usage record from CloudStack
@@ -53,6 +54,13 @@
PORT_FORWARDING_RULE(12),
NETWORK_OFFERING(13),
VPN_USERS(14),
+ VM_DISK_IO_READ(21),
+ VM_DISK_IO_WRITE(22),
+ VM_DISK_BYTES_READ(23),
+ VM_DISK_BYTES_WRITE(24),
+ VM_SNAPSHOT(25),
+ VOLUME_SECONDARY(26),
+ VM_SNAPSHOT_ON_PRIMARY(27),
UNRECOGNIZED(0);
private int code;
@@ -109,7 +117,7 @@
protected String serviceOfferingId;
protected String templateId;
protected String ipAddress;
- protected boolean isSourceNAT;
+ protected Boolean isSourceNAT;
protected double rawUsageHours;
protected String usage;
protected Long size;
@@ -117,6 +125,15 @@
protected UsageType usageType;
protected String project;
protected String projectId;
+ protected String domain;
+ protected Long virtualSize;
+ protected Long cpuNumber;
+ protected Long cpuSpeed;
+ protected Long memory;
+ protected Boolean isSystem;
+ protected String networkId;
+ protected Boolean isDefault;
+ protected Set<Tag> tags;
/**
* @see UsageRecord#getId()
@@ -241,7 +258,7 @@
/**
* @see UsageRecord#isSourceNAT()
*/
- public T isSourceNAT(boolean isSourceNAT) {
+ public T isSourceNAT(Boolean isSourceNAT) {
this.isSourceNAT = isSourceNAT;
return self();
}
@@ -301,10 +318,82 @@
this.projectId = projectId;
return self();
}
+
+ /**
+ * @see UsageRecord#getDomain()
+ */
+ public T domain(String domain) {
+ this.domain = domain;
+ return self();
+ }
+
+ /**
+ * @see UsageRecord#getVirtualSize()
+ */
+ public T virtualSize(Long virtualSize) {
+ this.virtualSize = virtualSize;
+ return self();
+ }
+
+ /**
+ * @see UsageRecord#getCpuNumber()
+ */
+ public T cpuNumber(Long cpuNumber) {
+ this.cpuNumber = cpuNumber;
+ return self();
+ }
+
+ /**
+ * @see UsageRecord#getCpuSpeed()
+ */
+ public T cpuSpeed(Long cpuSpeed) {
+ this.cpuSpeed = cpuSpeed;
+ return self();
+ }
+
+ /**
+ * @see UsageRecord#getMemory()
+ */
+ public T memory(Long memory) {
+ this.memory = memory;
+ return self();
+ }
+
+ /**
+ * @see UsageRecord#isSystem()
+ */
+ public T isSystem(Boolean isSystem) {
+ this.isSystem = isSystem;
+ return self();
+ }
+
+ /**
+ * @see UsageRecord#getNetworkId()
+ */
+ public T networkId(String networkId) {
+ this.networkId = networkId;
+ return self();
+ }
+
+ /**
+ * @see UsageRecord#isDefault()
+ */
+ public T isDefault(Boolean isDefault) {
+ this.isDefault = isDefault;
+ return self();
+ }
+ /**
+ * @see UsageRecord#getTags()
+ */
+ public T tags(Set<Tag> tags) {
+ this.tags = tags;
+ return self();
+ }
public UsageRecord build() {
return new UsageRecord(id, description, accountId, accountName, domainId, startDate, endDate, assignDate, releaseDate,
zoneId, virtualMachineId, virtualMachineName, serviceOfferingId, templateId, ipAddress, isSourceNAT, rawUsageHours,
- usage, size, type, usageType, project, projectId);
+ usage, size, type, usageType, project, projectId, domain, virtualSize, cpuNumber, cpuSpeed, memory, isSystem,
+ networkId, isDefault, tags);
}
public T fromUsageRecord(UsageRecord in) {
@@ -331,7 +420,16 @@
.type(in.getType())
.usageType(in.getUsageType())
.project(in.getProject())
- .projectId(in.getProjectId());
+ .projectId(in.getProjectId())
+ .domain(in.getDomain())
+ .virtualSize(in.getVirtualSize())
+ .cpuNumber(in.getCpuNumber())
+ .cpuSpeed(in.getCpuSpeed())
+ .memory(in.getMemory())
+ .isSystem(in.isSystem())
+ .networkId(in.getNetworkId())
+ .isDefault(in.isDefault())
+ .tags(in.getTags());
}
}
@@ -357,7 +455,7 @@
private final String serviceOfferingId;
private final String templateId;
private final String ipAddress;
- private final boolean isSourceNAT;
+ private final Boolean isSourceNAT;
private final double rawUsageHours;
private final String usage;
private final Long size;
@@ -365,18 +463,30 @@
private final UsageType usageType;
private final String project;
private final String projectId;
+ private final String domain;
+ private final Long virtualSize;
+ private final Long cpuNumber;
+ private final Long cpuSpeed;
+ private final Long memory;
+ private final Boolean isSystem;
+ private final String networkId;
+ private final Boolean isDefault;
+ private final Set<Tag> tags;
@ConstructorProperties({
"usageid", "description", "accountid", "account", "domainid", "startdate", "enddate", "assigndate", "releasedate",
"zoneid", "virtualmachineid", "name", "offeringid", "templateid", "ipaddress", "issourcenat", "rawusage", "usage",
- "size", "type", "usagetype", "project", "projectid"
+ "size", "type", "usagetype", "project", "projectid", "domain", "virtualsize", "cpunumber", "cpuspeed", "memory",
+ "issystem", "networkid", "isdefault", "tags"
})
protected UsageRecord(String id, @Nullable String description, @Nullable String accountId, @Nullable String accountName,
@Nullable String domainId, @Nullable Date startDate, @Nullable Date endDate, @Nullable Date assignDate,
@Nullable String releaseDate, @Nullable String zoneId, @Nullable String virtualMachineId, @Nullable String virtualMachineName,
@Nullable String serviceOfferingId, @Nullable String templateId, @Nullable String ipAddress,
- boolean isSourceNAT, double rawUsageHours, @Nullable String usage, @Nullable Long size,
- @Nullable String type, @Nullable UsageType usageType, @Nullable String project, @Nullable String projectId) {
+ @Nullable Boolean isSourceNAT, double rawUsageHours, @Nullable String usage, @Nullable Long size,
+ @Nullable String type, @Nullable UsageType usageType, @Nullable String project, @Nullable String projectId,
+ @Nullable String domain, @Nullable Long virtualSize, @Nullable Long cpuNumber, @Nullable Long cpuSpeed, @Nullable Long memory,
+ @Nullable Boolean isSystem, @Nullable String networkId, @Nullable Boolean isDefault, @Nullable Set<Tag> tags) {
this.id = id;
this.description = description;
this.accountId = accountId;
@@ -400,6 +510,15 @@
this.usageType = usageType;
this.project = project;
this.projectId = projectId;
+ this.domain = domain;
+ this.virtualSize = virtualSize;
+ this.cpuNumber = cpuNumber;
+ this.cpuSpeed = cpuSpeed;
+ this.memory = memory;
+ this.isSystem = isSystem;
+ this.networkId = networkId;
+ this.isDefault = isDefault;
+ this.tags = tags == null ? ImmutableSet.<Tag>of() : ImmutableSet.copyOf(tags);
}
public String getId() {
@@ -476,7 +595,8 @@
return this.ipAddress;
}
- public boolean isSourceNAT() {
+ @Nullable
+ public Boolean isSourceNAT() {
return this.isSourceNAT;
}
@@ -513,11 +633,55 @@
return this.projectId;
}
+ @Nullable
+ public String getDomain() {
+ return domain;
+ }
+
+ @Nullable
+ public Long getVirtualSize() {
+ return virtualSize;
+ }
+
+ @Nullable
+ public Long getCpuNumber() {
+ return cpuNumber;
+ }
+
+ @Nullable
+ public Long getCpuSpeed() {
+ return cpuSpeed;
+ }
+
+ @Nullable
+ public Long getMemory() {
+ return memory;
+ }
+
+ @Nullable
+ public Boolean isSystem() {
+ return isSystem;
+ }
+
+ @Nullable
+ public String getNetworkId() {
+ return networkId;
+ }
+
+ @Nullable
+ public Boolean isDefault() {
+ return isDefault;
+ }
+ @Nullable
+ public Set<Tag> getTags() {
+ return tags;
+ }
@Override
public int hashCode() {
return Objects.hashCode(id, description, accountId, accountName, domainId, startDate, endDate, assignDate, releaseDate,
zoneId, virtualMachineId, virtualMachineName, serviceOfferingId, templateId, ipAddress, isSourceNAT, rawUsageHours,
- size, usage, type, usageType, project, projectId);
+ size, usage, type, usageType, project, projectId, domain, virtualSize, cpuNumber, cpuSpeed, memory, isSystem,
+ networkId, isDefault, tags);
}
@Override
@@ -547,7 +711,15 @@
&& Objects.equal(this.type, that.type)
&& Objects.equal(this.usageType, that.usageType)
&& Objects.equal(this.project, that.project)
- && Objects.equal(this.projectId, that.projectId);
+ && Objects.equal(this.domain, that.domain)
+ && Objects.equal(this.virtualSize, that.virtualSize)
+ && Objects.equal(this.cpuNumber, that.cpuNumber)
+ && Objects.equal(this.cpuSpeed, that.cpuSpeed)
+ && Objects.equal(this.memory, that.memory)
+ && Objects.equal(this.isSystem, that.isSystem)
+ && Objects.equal(this.networkId, that.networkId)
+ && Objects.equal(this.isDefault, that.isDefault)
+ && Objects.equal(this.tags, that.tags);
}
protected ToStringHelper string() {
@@ -557,7 +729,9 @@
.add("releaseDate", releaseDate).add("zoneId", zoneId).add("virtualMachineId", virtualMachineId)
.add("virtualMachineName", virtualMachineName).add("serviceOfferingId", serviceOfferingId).add("templateId", templateId)
.add("ipAddress", ipAddress).add("isSourceNAT", isSourceNAT).add("rawUsageHours", rawUsageHours).add("usage", usage)
- .add("size", size).add("type", type).add("usageType", usageType).add("project", project).add("projectId", projectId);
+ .add("size", size).add("type", type).add("usageType", usageType).add("project", project).add("projectId", projectId)
+ .add("domain", domain).add("virtualSize", virtualSize).add("cpuNumber", cpuNumber).add("cpuSpeed", cpuSpeed).add("memory", memory)
+ .add("isSystem", isSystem).add("networkId", networkId).add("isDefault", isDefault).add("tags", tags);
}
@Override
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListUsageRecordsOptions.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListUsageRecordsOptions.java
index 8725226..b070058 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListUsageRecordsOptions.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/options/ListUsageRecordsOptions.java
@@ -65,6 +65,11 @@
ListUsageRecordsOptions options = new ListUsageRecordsOptions();
return options.pageSize(pageSize);
}
+
+ public static ListUsageRecordsOptions includeTags(boolean includeTags) {
+ ListUsageRecordsOptions options = new ListUsageRecordsOptions();
+ return options.includeTags(includeTags);
+ }
}
@@ -107,5 +112,9 @@
this.queryParameters.replaceValues("pagesize", ImmutableSet.of(pageSize));
return this;
}
-
+
+ public ListUsageRecordsOptions includeTags(boolean includeTags) {
+ this.queryParameters.replaceValues("includetags", ImmutableSet.of(includeTags + ""));
+ return this;
+ }
}
diff --git a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListUsageRecordsOptionsTest.java b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListUsageRecordsOptionsTest.java
index 80b9896..cc1bcba 100644
--- a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListUsageRecordsOptionsTest.java
+++ b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/options/ListUsageRecordsOptionsTest.java
@@ -20,6 +20,7 @@
import static org.jclouds.cloudstack.options.ListUsageRecordsOptions.Builder.accountInDomain;
import static org.jclouds.cloudstack.options.ListUsageRecordsOptions.Builder.domainId;
import static org.jclouds.cloudstack.options.ListUsageRecordsOptions.Builder.keyword;
+import static org.jclouds.cloudstack.options.ListUsageRecordsOptions.Builder.includeTags;
import static org.jclouds.cloudstack.options.ListUsageRecordsOptions.Builder.page;
import static org.jclouds.cloudstack.options.ListUsageRecordsOptions.Builder.pageSize;
import static org.jclouds.cloudstack.options.ListUsageRecordsOptions.Builder.type;
@@ -91,5 +92,14 @@
ListUsageRecordsOptions options = pageSize("500");
assertEquals(ImmutableSet.of("500"), options.buildQueryParameters().get("pagesize"));
}
-
+
+ public void testIncludeTags() {
+ ListUsageRecordsOptions options = new ListUsageRecordsOptions().includeTags(true);
+ assertEquals(ImmutableSet.of("true"), options.buildQueryParameters().get("includetags"));
+ }
+
+ public void testIncludeTagsStatic() {
+ ListUsageRecordsOptions options = includeTags(true);
+ assertEquals(ImmutableSet.of("true"), options.buildQueryParameters().get("includetags"));
+ }
}
diff --git a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/parse/ListUsageRecordsResponseTest.java b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/parse/ListUsageRecordsResponseTest.java
index 9bc5ec3..fe0d09f 100644
--- a/apis/cloudstack/src/test/java/org/jclouds/cloudstack/parse/ListUsageRecordsResponseTest.java
+++ b/apis/cloudstack/src/test/java/org/jclouds/cloudstack/parse/ListUsageRecordsResponseTest.java
@@ -31,6 +31,7 @@
import com.google.common.collect.ImmutableSet;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import org.jclouds.cloudstack.domain.Tag;
@Test(groups = "unit")
public class ListUsageRecordsResponseTest extends BaseSetParserTest<UsageRecord> {
@@ -61,7 +62,9 @@
.description("Template Id:203 Size:3117171712")
.usage("24 Hrs").usageType(UsageRecord.UsageType.TEMPLATE).rawUsageHours(24)
.size(3117171712L).templateId("0").id("203").project("project1").projectId("1")
- .startDate(start).endDate(end).build());
+ .startDate(start).endDate(end).domain("myDomain").virtualSize(3117171712L)
+ .cpuNumber(2L).cpuSpeed(1024L).memory(512L).isSystem(false).isDefault(false)
+ .tags(ImmutableSet.of(Tag.builder().key("env").value("dev").build())).build());
}
diff --git a/apis/cloudstack/src/test/resources/listusagerecordsresponse.json b/apis/cloudstack/src/test/resources/listusagerecordsresponse.json
index d1bc292..96fdc82 100644
--- a/apis/cloudstack/src/test/resources/listusagerecordsresponse.json
+++ b/apis/cloudstack/src/test/resources/listusagerecordsresponse.json
@@ -1 +1 @@
-{ "listusagerecordsresponse" : { "count":1 ,"usagerecord" : [ {"account":"admin","accountid":2,"domainid":1,"zoneid":1,"description":"Template Id:203 Size:3117171712","usage":"24 Hrs","usagetype":7,"rawusage":"24","templateid":0,"usageid":203,"size":3117171712,"project":"project1","projectid":1,"startdate":"2011-12-15'T'00:00:00+00:00","enddate":"2011-12-15'T'23:59:59+00:00"} ] } }
\ No newline at end of file
+{ "listusagerecordsresponse" : { "count":1 ,"usagerecord" : [ {"account":"admin","accountid":2,"domainid":1,"zoneid":1,"description":"Template Id:203 Size:3117171712","usage":"24 Hrs","usagetype":7,"rawusage":"24","templateid":0,"usageid":203,"size":3117171712,"project":"project1","projectid":1,"startdate":"2011-12-15'T'00:00:00+00:00","enddate":"2011-12-15'T'23:59:59+00:00","domain":"myDomain","virtualsize":3117171712,"cpunumber":2,"cpuspeed":1024,"memory":512,"issystem":false,"isdefault":false,tags:[ { "key":"env","value":"dev" } ] } ] } }
\ No newline at end of file