Search in sources :

Example 1 with DefaultBucket

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));
}
Also used : Histogram(io.opentelemetry.proto.metrics.v1.Histogram) DefaultBucket(com.amazon.dataprepper.model.metric.DefaultBucket) HistogramDataPoint(io.opentelemetry.proto.metrics.v1.HistogramDataPoint) Record(com.amazon.dataprepper.model.record.Record) Metric(com.amazon.dataprepper.model.metric.Metric) List(java.util.List) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.Test)

Example 2 with DefaultBucket

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;
}
Also used : DefaultBucket(com.amazon.dataprepper.model.metric.DefaultBucket) Bucket(com.amazon.dataprepper.model.metric.Bucket) DefaultBucket(com.amazon.dataprepper.model.metric.DefaultBucket) ArrayList(java.util.ArrayList) NumberDataPoint(io.opentelemetry.proto.metrics.v1.NumberDataPoint) SummaryDataPoint(io.opentelemetry.proto.metrics.v1.SummaryDataPoint)

Example 3 with DefaultBucket

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()));
    }
}
Also used : DefaultBucket(com.amazon.dataprepper.model.metric.DefaultBucket) Bucket(com.amazon.dataprepper.model.metric.Bucket) List(java.util.List) Map(java.util.Map) HistogramDataPoint(io.opentelemetry.proto.metrics.v1.HistogramDataPoint)

Aggregations

DefaultBucket (com.amazon.dataprepper.model.metric.DefaultBucket)3 Bucket (com.amazon.dataprepper.model.metric.Bucket)2 HistogramDataPoint (io.opentelemetry.proto.metrics.v1.HistogramDataPoint)2 List (java.util.List)2 Metric (com.amazon.dataprepper.model.metric.Metric)1 Record (com.amazon.dataprepper.model.record.Record)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 Histogram (io.opentelemetry.proto.metrics.v1.Histogram)1 NumberDataPoint (io.opentelemetry.proto.metrics.v1.NumberDataPoint)1 SummaryDataPoint (io.opentelemetry.proto.metrics.v1.SummaryDataPoint)1 ArrayList (java.util.ArrayList)1 Map (java.util.Map)1 Test (org.junit.Test)1