Skip to content

Commit

Permalink
Made BucketedOutput generic. Renamed BucketDataPoint.java to NumericB…
Browse files Browse the repository at this point in the history
…ucketDataPoint
  • Loading branch information
tsegismont committed Mar 19, 2015
1 parent 895de81 commit 0295535
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,14 @@
import org.hawkular.metrics.api.jaxrs.param.Duration;
import org.hawkular.metrics.core.api.Availability;
import org.hawkular.metrics.core.api.AvailabilityMetric;
import org.hawkular.metrics.core.api.BucketDataPoint;
import org.hawkular.metrics.core.api.BucketedOutput;
import org.hawkular.metrics.core.api.Buckets;
import org.hawkular.metrics.core.api.Counter;
import org.hawkular.metrics.core.api.Metric;
import org.hawkular.metrics.core.api.MetricId;
import org.hawkular.metrics.core.api.MetricType;
import org.hawkular.metrics.core.api.MetricsService;
import org.hawkular.metrics.core.api.NumericBucketDataPoint;
import org.hawkular.metrics.core.api.NumericData;
import org.hawkular.metrics.core.api.NumericMetric;
import org.hawkular.metrics.core.impl.cassandra.MetricUtils;
Expand Down Expand Up @@ -443,11 +443,13 @@ public List<NumericData> apply(NumericMetric input) {
asyncResponse.resume(response);
return;
}
ListenableFuture<BucketedOutput> dataFuture = metricsService.findNumericStats(metric, start, end, buckets);
ListenableFuture<List<BucketDataPoint>> outputFuture = Futures.transform(
dataFuture, new Function<BucketedOutput, List<BucketDataPoint>>() {
ListenableFuture<BucketedOutput<NumericBucketDataPoint>> dataFuture = metricsService.findNumericStats(
metric, start, end, buckets
);
ListenableFuture<List<NumericBucketDataPoint>> outputFuture = Futures.transform(
dataFuture, new Function<BucketedOutput<NumericBucketDataPoint>, List<NumericBucketDataPoint>>() {
@Override
public List<BucketDataPoint> apply(BucketedOutput input) {
public List<NumericBucketDataPoint> apply(BucketedOutput<NumericBucketDataPoint> input) {
if (input == null) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,14 @@
/**
* @author John Sanda
*/
public class BucketedOutput {
public class BucketedOutput<POINT> {

private String tenantId;
private String id;
private Map<String, String> metadata = new HashMap<>();
private List<BucketDataPoint> data = new ArrayList<>();
private List<POINT> data = new ArrayList<>();

@SuppressWarnings("unused")
public BucketedOutput() {
}

Expand Down Expand Up @@ -64,16 +65,15 @@ public void setMetadata(Map<String, String> metadata) {
this.metadata = metadata;
}

public List<BucketDataPoint> getData() {
public List<POINT> getData() {
return data;
}

public void setData(List<BucketDataPoint> data) {
public void setData(List<POINT> data) {
this.data = data;
}

public void add(BucketDataPoint d) {
public void add(POINT d) {
data.add(d);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public interface MetricsService {

ListenableFuture<NumericMetric> findNumericData(NumericMetric metric, long start, long end);

ListenableFuture<BucketedOutput> findNumericStats(
ListenableFuture<BucketedOutput<NumericBucketDataPoint>> findNumericStats(
NumericMetric metric, long start, long end, Buckets buckets
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
*/
@ApiModel(value = "A bucket is a time range with multiple data items represented by min/avg/median/max/95thPercentile "
+ "values for that time span.")
public class BucketDataPoint {
public class NumericBucketDataPoint {

private long timestamp;
private double value;
Expand All @@ -40,15 +40,15 @@ public class BucketDataPoint {
private double max;
private double percentile95th;

public static BucketDataPoint newEmptyInstance(long timestamp) {
BucketDataPoint bucketDataPoint = new BucketDataPoint();
bucketDataPoint.setTimestamp(timestamp);
bucketDataPoint.setMin(NaN);
bucketDataPoint.setAvg(NaN);
bucketDataPoint.setMedian(NaN);
bucketDataPoint.setMax(NaN);
bucketDataPoint.setPercentile95th(NaN);
return bucketDataPoint;
public static NumericBucketDataPoint newEmptyInstance(long timestamp) {
NumericBucketDataPoint numericBucketDataPoint = new NumericBucketDataPoint();
numericBucketDataPoint.setTimestamp(timestamp);
numericBucketDataPoint.setMin(NaN);
numericBucketDataPoint.setAvg(NaN);
numericBucketDataPoint.setMedian(NaN);
numericBucketDataPoint.setMax(NaN);
numericBucketDataPoint.setPercentile95th(NaN);
return numericBucketDataPoint;
}

@ApiModelProperty(value = "Time when the value was obtained in milliseconds since epoch")
Expand Down Expand Up @@ -120,7 +120,7 @@ public boolean isEmpty() {

@Override
public String toString() {
return "BucketDataPoint[" +
return "NumericBucketDataPoint[" +
"timestamp=" + timestamp +
", min=" + min +
", avg=" + avg +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
import org.hawkular.metrics.core.api.MetricType;
import org.hawkular.metrics.core.api.MetricsService;
import org.hawkular.metrics.core.api.MetricsThreadFactory;
import org.hawkular.metrics.core.api.NumericBucketDataPoint;
import org.hawkular.metrics.core.api.NumericData;
import org.hawkular.metrics.core.api.NumericMetric;
import org.hawkular.metrics.core.api.Retention;
Expand Down Expand Up @@ -581,7 +582,7 @@ public ListenableFuture<NumericMetric> findNumericData(NumericMetric metric, lon
}

@Override
public ListenableFuture<BucketedOutput> findNumericStats(
public ListenableFuture<BucketedOutput<NumericBucketDataPoint>> findNumericStats(
NumericMetric metric, long start, long end, Buckets buckets
) {
// When we implement date partitioning, dpart will have to be determined based on
Expand All @@ -590,7 +591,7 @@ public ListenableFuture<BucketedOutput> findNumericStats(
metric.setDpart(Metric.DPART);
ResultSetFuture queryFuture = dataAccess.findData(metric, start, end);
ListenableFuture<NumericMetric> raw = Futures.transform(queryFuture, NUMERIC_METRIC_MAPPER, metricsTasks);
return Futures.transform(raw, new BucketedOutputMapper(buckets));
return Futures.transform(raw, new NumericBucketedOutputMapper(buckets));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
import org.apache.commons.math3.stat.descriptive.rank.Max;
import org.apache.commons.math3.stat.descriptive.rank.Min;
import org.apache.commons.math3.stat.descriptive.rank.Percentile;
import org.hawkular.metrics.core.api.BucketDataPoint;
import org.hawkular.metrics.core.api.BucketedOutput;
import org.hawkular.metrics.core.api.Buckets;
import org.hawkular.metrics.core.api.NumericBucketDataPoint;
import org.hawkular.metrics.core.api.NumericData;
import org.hawkular.metrics.core.api.NumericMetric;

Expand All @@ -38,20 +38,22 @@
/**
* @author Thomas Segismont
*/
public class BucketedOutputMapper implements Function<NumericMetric, BucketedOutput> {
public class NumericBucketedOutputMapper implements Function<NumericMetric, BucketedOutput<NumericBucketDataPoint>> {
private final Buckets buckets;

public BucketedOutputMapper(Buckets buckets) {
public NumericBucketedOutputMapper(Buckets buckets) {
this.buckets = buckets;
}

@Override
public BucketedOutput apply(NumericMetric input) {
public BucketedOutput<NumericBucketDataPoint> apply(NumericMetric input) {
if (input == null) {
return null;
}

BucketedOutput output = new BucketedOutput(input.getTenantId(), input.getId().getName(), input.getTags());
BucketedOutput<NumericBucketDataPoint> output = new BucketedOutput<>(
input.getTenantId(), input.getId().getName(), input.getTags()
);
output.setData(new ArrayList<>(buckets.getCount()));

List<NumericData> numericDataList = input.getData();
Expand All @@ -65,14 +67,14 @@ public BucketedOutput apply(NumericMetric input) {

if (dataIndex >= numericDatas.length) {
// Reached end of data points
output.getData().add(BucketDataPoint.newEmptyInstance(from));
output.getData().add(NumericBucketDataPoint.newEmptyInstance(from));
continue;
}

NumericData current = numericDatas[dataIndex];
if (current.getTimestamp() >= to) {
// Current data point does not belong to this bucket
output.getData().add(BucketDataPoint.newEmptyInstance(from));
output.getData().add(NumericBucketDataPoint.newEmptyInstance(from));
continue;
}

Expand All @@ -93,15 +95,15 @@ public BucketedOutput apply(NumericMetric input) {
Percentile percentile = new Percentile();
percentile.setData(values);

BucketDataPoint bucketDataPoint = new BucketDataPoint();
bucketDataPoint.setTimestamp(from);
bucketDataPoint.setMin(new Min().evaluate(values));
bucketDataPoint.setAvg(new Mean().evaluate(values));
bucketDataPoint.setMedian(percentile.evaluate(50.0));
bucketDataPoint.setMax(new Max().evaluate(values));
bucketDataPoint.setPercentile95th(percentile.evaluate(95.0));
NumericBucketDataPoint numericBucketDataPoint = new NumericBucketDataPoint();
numericBucketDataPoint.setTimestamp(from);
numericBucketDataPoint.setMin(new Min().evaluate(values));
numericBucketDataPoint.setAvg(new Mean().evaluate(values));
numericBucketDataPoint.setMedian(percentile.evaluate(50.0));
numericBucketDataPoint.setMax(new Max().evaluate(values));
numericBucketDataPoint.setPercentile95th(percentile.evaluate(95.0));

output.getData().add(bucketDataPoint);
output.getData().add(numericBucketDataPoint);
}

return output;
Expand Down

0 comments on commit 0295535

Please sign in to comment.