use of com.amazon.dataprepper.model.metric.DefaultBucket in project data-prepper by opensearch-project.
the class MetricsPluginHistogramTest method test.
@Test
public void test() throws JsonProcessingException {
final double bound_0 = 10.0;
final double bound_1 = 100.0;
final double bound_2 = 1000.0;
HistogramDataPoint dp = HistogramDataPoint.newBuilder().addBucketCounts(0).addBucketCounts(5).addBucketCounts(17).addBucketCounts(33).addExplicitBounds(bound_0).addExplicitBounds(bound_1).addExplicitBounds(bound_2).setCount(4).setSum(1d / 3d).build();
Histogram histogram = Histogram.newBuilder().addDataPoints(dp).build();
List<Record<? extends Metric>> processedRecords = (List<Record<? extends Metric>>) rawProcessor.doExecute(Collections.singletonList(new Record<>(fillServiceRequest(histogram))));
Record<? extends Metric> record = processedRecords.get(0);
ObjectMapper objectMapper = new ObjectMapper();
Map<Object, Object> map = objectMapper.readValue(record.getData().toJsonString(), Map.class);
DefaultBucket bucket_0 = new DefaultBucket((double) -Float.MAX_VALUE, bound_0, 0L);
DefaultBucket bucket_1 = new DefaultBucket(bound_0, bound_1, 5L);
DefaultBucket bucket_2 = new DefaultBucket(bound_1, bound_2, 17L);
DefaultBucket bucket_3 = new DefaultBucket(bound_2, (double) Float.MAX_VALUE, 33L);
assertHistogramProcessing(map, Arrays.asList(bucket_0, bucket_1, bucket_2, bucket_3));
}
use of com.amazon.dataprepper.model.metric.DefaultBucket in project data-prepper by opensearch-project.
the class OTelMetricsProtoHelper method createBuckets.
/**
* Create the buckets, see <a href="https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto">
* the OTel metrics proto spec</a>
* <p>
* The boundaries for bucket at index i are:
* <p>
* <pre>{@code
* (-infinity, explicit_bounds[i]) for i == 0
* (explicit_bounds[i-1], +infinity) for i == size(explicit_bounds)
* (explicit_bounds[i-1], explicit_bounds[i]) for 0 < i < size(explicit_bounds)
* }</pre>
*
* <br>
* <br>
* <b>NOTE:</b> here we map infinity as +/- FLOAT.MAX_VALUE since JSON rfc4627 only supports finite numbers and
* OpenSearch maps double values to floats as per default.
*
* @param bucketCountsList a list with the bucket counts
* @param explicitBoundsList a list with the bounds
* @return buckets list
*/
public static List<Bucket> createBuckets(List<Long> bucketCountsList, List<Double> explicitBoundsList) {
List<Bucket> buckets = new ArrayList<>();
if (bucketCountsList.isEmpty()) {
return buckets;
}
if (bucketCountsList.size() - 1 != explicitBoundsList.size()) {
LOG.error("bucket count list not equals to bounds list {} {}", bucketCountsList.size(), explicitBoundsList.size());
throw new IllegalArgumentException("OpenTelemetry protocol mandates that the number of elements in bucket_counts array must be by one greater than\n" + " // the number of elements in explicit_bounds array.");
} else {
for (int i = 0; i < bucketCountsList.size(); i++) {
if (i == 0) {
// "-Infinity"
double min = -Float.MAX_VALUE;
double max = explicitBoundsList.get(i);
Long bucketCount = bucketCountsList.get(i);
buckets.add(new DefaultBucket(min, max, bucketCount));
} else if (i == bucketCountsList.size() - 1) {
double min = explicitBoundsList.get(i - 1);
// "Infinity"
double max = Float.MAX_VALUE;
Long bucketCount = bucketCountsList.get(i);
buckets.add(new DefaultBucket(min, max, bucketCount));
} else {
double min = explicitBoundsList.get(i - 1);
double max = explicitBoundsList.get(i);
Long bucketCount = bucketCountsList.get(i);
buckets.add(new DefaultBucket(min, max, bucketCount));
}
}
}
return buckets;
}
use of com.amazon.dataprepper.model.metric.DefaultBucket in project data-prepper by opensearch-project.
the class MetricsPluginHistogramTest method assertHistogramProcessing.
private void assertHistogramProcessing(Map<Object, Object> map, List<DefaultBucket> expectedBuckets) {
assertThat(map).contains(entry("kind", Metric.KIND.HISTOGRAM.toString()));
assertThat(map).contains(entry("unit", "seconds"));
assertThat(map).contains(entry("description", "description"));
assertThat(map).contains(entry("name", "name"));
assertThat(map).contains(entry("bucketCounts", 4));
assertThat(map).contains(entry("sum", (1d / 3d)));
assertThat(map).contains(entry("count", 4));
assertThat(map).contains(entry("serviceName", "service"));
assertThat(map).contains(entry("aggregationTemporality", "AGGREGATION_TEMPORALITY_UNSPECIFIED"));
assertThat(map).containsKey("buckets");
List<Map> listOfMaps = (List<Map>) map.get("buckets");
assertThat(listOfMaps).hasSize(expectedBuckets.size());
for (int i = 0; i < expectedBuckets.size(); i++) {
Bucket expectedBucket = expectedBuckets.get(i);
Map<Object, Object> actualBucket = listOfMaps.get(i);
assertThat(actualBucket).contains(entry("min", expectedBucket.getMin())).contains(entry("max", expectedBucket.getMax())).contains(entry("count", expectedBucket.getCount().intValue()));
}
}
Aggregations