value and statistics values are not compatible in cloudwatch

This commit is contained in:
Adrian Cole 2012-09-16 12:30:24 -07:00
parent f7feb0248a
commit 09065a32ca
3 changed files with 67 additions and 56 deletions

View File

@ -93,8 +93,10 @@ public class MetricDataBinder implements org.jclouds.rest.Binder {
formParameters.put("MetricData.member." + metricDatumIndex + ".Unit",
String.valueOf(metricDatum.getUnit()));
formParameters.put("MetricData.member." + metricDatumIndex + ".Value",
String.valueOf(metricDatum.getValue()));
if (metricDatum.getValue().isPresent()) {
formParameters.put("MetricData.member." + metricDatumIndex + ".Value",
String.valueOf(metricDatum.getValue().get()));
}
metricDatumIndex++;
}

View File

@ -25,14 +25,16 @@ import java.util.Date;
import java.util.Set;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
/**
* @see <a href="http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html" />
*
* @see <a href=
* "http://docs.amazonwebservices.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html"
* />
*
* @author Jeremy Whitlock
*/
public class MetricDatum {
@ -42,17 +44,17 @@ public class MetricDatum {
private final Optional<StatisticValues> statisticValues;
private final Optional<Date> timestamp;
private final Unit unit;
private final double value;
private final Optional<Double> value;
/**
* Private constructor to enforce using {@link Builder}.
*/
protected MetricDatum(Set<Dimension> dimensions, String metricName, StatisticValues statisticValues, Date timestamp,
Unit unit, double value) {
this.dimensions = ImmutableSet.<Dimension>copyOf(checkNotNull(dimensions, "dimensions"));
protected MetricDatum(Iterable<Dimension> dimensions, String metricName, Optional<StatisticValues> statisticValues,
Optional<Date> timestamp, Unit unit, Optional<Double> value) {
this.dimensions = ImmutableSet.<Dimension> copyOf(checkNotNull(dimensions, "dimensions"));
this.metricName = checkNotNull(metricName, "metricName");
this.statisticValues = Optional.fromNullable(statisticValues);
this.timestamp = Optional.fromNullable(timestamp);
this.statisticValues = checkNotNull(statisticValues, "statisticValues");
this.timestamp = checkNotNull(timestamp, "timestamp");
this.unit = checkNotNull(unit, "unit");
this.value = checkNotNull(value, "value");
}
@ -95,13 +97,13 @@ public class MetricDatum {
/**
* return the actual value of the metric
*/
public double getValue() {
public Optional<Double> getValue() {
return value;
}
/**
* Returns a new builder. The generated builder is equivalent to the builder
* created by the {@link Builder} constructor.
* Returns a new builder. The generated builder is equivalent to the builder created by the
* {@link Builder} constructor.
*/
public static Builder builder() {
return new Builder();
@ -110,36 +112,39 @@ public class MetricDatum {
public static class Builder {
// this builder is set to be additive on dimension calls, so make this mutable
private Set<Dimension> dimensions = Sets.newLinkedHashSet();
private ImmutableList.Builder<Dimension> dimensions = ImmutableList.<Dimension> builder();
private String metricName;
private StatisticValues statisticValues;
private Date timestamp;
private Optional<StatisticValues> statisticValues = Optional.absent();
private Optional<Date> timestamp = Optional.absent();
private Unit unit = Unit.NONE;
private double value;
private Optional<Double> value = Optional.absent();
/**
* Creates a new builder. The returned builder is equivalent to the builder
* generated by {@link org.jclouds.cloudwatch.domain.MetricDatum#builder}.
* Creates a new builder. The returned builder is equivalent to the builder generated by
* {@link org.jclouds.cloudwatch.domain.MetricDatum#builder}.
*/
public Builder() {}
public Builder() {
}
/**
* A list of dimensions describing qualities of the metric.
*
* @param dimensions the dimensions describing the qualities of the metric
*
*
* @param dimensions
* the dimensions describing the qualities of the metric
*
* @return this {@code Builder} object
*/
public Builder dimensions(Set<Dimension> dimensions) {
public Builder dimensions(Iterable<Dimension> dimensions) {
this.dimensions.addAll(checkNotNull(dimensions, "dimensions"));
return this;
}
/**
* A dimension describing qualities of the metric.
*
* @param dimension the dimension describing the qualities of the metric
*
*
* @param dimension
* the dimension describing the qualities of the metric
*
* @return this {@code Builder} object
*/
public Builder dimension(Dimension dimension) {
@ -149,9 +154,10 @@ public class MetricDatum {
/**
* The name of the metric.
*
* @param metricName the metric name
*
*
* @param metricName
* the metric name
*
* @return this {@code Builder} object
*/
public Builder metricName(String metricName) {
@ -161,34 +167,37 @@ public class MetricDatum {
/**
* The object describing the set of statistical values describing the metric.
*
* @param statisticValues the object describing the set of statistical values for the metric
*
*
* @param statisticValues
* the object describing the set of statistical values for the metric
*
* @return this {@code Builder} object
*/
public Builder statisticValues(StatisticValues statisticValues) {
this.statisticValues = statisticValues;
this.statisticValues = Optional.fromNullable(statisticValues);
return this;
}
/**
* The time stamp used for the metric. If not specified, the default value is set to the time the metric data was
* received.
*
* @param timestamp the time stamp used for the metric
*
* The time stamp used for the metric. If not specified, the default value is set to the time
* the metric data was received.
*
* @param timestamp
* the time stamp used for the metric
*
* @return this {@code Builder} object
*/
public Builder timestamp(Date timestamp) {
this.timestamp = timestamp;
this.timestamp = Optional.fromNullable(timestamp);
return this;
}
/**
* The unit for the metric.
*
* @param unit the unit for the metric
*
*
* @param unit
* the unit for the metric
*
* @return this {@code Builder} object
*/
public Builder unit(Unit unit) {
@ -198,13 +207,14 @@ public class MetricDatum {
/**
* The value for the metric.
*
* @param value the value for the metric
*
*
* @param value
* the value for the metric
*
* @return this {@code Builder} object
*/
public Builder value(double value) {
this.value = value;
public Builder value(Double value) {
this.value = Optional.fromNullable(value);
return this;
}
@ -212,7 +222,7 @@ public class MetricDatum {
* Returns a newly-created {@code MetricDatum} based on the contents of the {@code Builder}.
*/
public MetricDatum build() {
return new MetricDatum(dimensions, metricName, statisticValues, timestamp, unit, value);
return new MetricDatum(dimensions.build(), metricName, statisticValues, timestamp, unit, value);
}
}
@ -240,7 +250,8 @@ public class MetricDatum {
}
protected ToStringHelper string() {
return Objects.toStringHelper("").add("dimensions", dimensions).add("metricName", metricName).add(
"statisticValues", statisticValues).add("timestamp", timestamp).add("unit", unit).add("value", value);
return Objects.toStringHelper("").omitNullValues().add("dimensions", dimensions).add("metricName", metricName)
.add("statisticValues", statisticValues.orNull()).add("timestamp", timestamp.orNull()).add("unit", unit)
.add("value", value.orNull());
}
}

View File

@ -60,7 +60,6 @@ public class MetricDataBinderTest {
.statisticValues(ss)
.dimension(new Dimension("TestDimension", "FAKE"))
.unit(Unit.COUNT)
.value(2)
.build();
HttpRequest request = binder.bindToRequest(request(), ImmutableSet.of(metricDatum));
@ -73,8 +72,7 @@ public class MetricDataBinderTest {
"&MetricData.member.1.StatisticValues.Minimum=1.0" +
"&MetricData.member.1.StatisticValues.SampleCount=4.0" +
"&MetricData.member.1.StatisticValues.Sum=10.0" +
"&MetricData.member.1.Unit=" + Unit.COUNT.toString() +
"&MetricData.member.1.Value=2.0");
"&MetricData.member.1.Unit=" + Unit.COUNT.toString());
}
public void testMetricWithMultipleDimensions() throws Exception {