use of io.opentelemetry.sdk.metrics.internal.instrument.BoundDoubleHistogram in project opentelemetry-java by open-telemetry.
the class SdkDoubleHistogramTest method collectMetrics_WithMultipleCollects.
@Test
void collectMetrics_WithMultipleCollects() {
long startTime = testClock.now();
DoubleHistogram doubleRecorder = sdkMeter.histogramBuilder("testRecorder").build();
BoundDoubleHistogram bound = ((SdkDoubleHistogram) doubleRecorder).bind(Attributes.builder().put("K", "V").build());
try {
// Do some records using bounds and direct calls and bindings.
doubleRecorder.record(9.1d, Attributes.empty());
bound.record(123.3d);
doubleRecorder.record(13.1d, Attributes.empty());
// Advancing time here should not matter.
testClock.advance(Duration.ofNanos(SECOND_NANOS));
bound.record(321.5d);
doubleRecorder.record(121.5d, Attributes.builder().put("K", "V").build());
assertThat(sdkMeterReader.collectAllMetrics()).satisfiesExactly(metric -> assertThat(metric).hasResource(RESOURCE).hasInstrumentationLibrary(INSTRUMENTATION_LIBRARY_INFO).hasName("testRecorder").hasDoubleHistogram().points().allSatisfy(point -> assertThat(point).hasStartEpochNanos(startTime).hasEpochNanos(testClock.now())).satisfiesExactlyInAnyOrder(point -> assertThat(point).hasCount(3).hasSum(566.3d).hasBucketCounts(0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0).hasAttributes(Attributes.builder().put("K", "V").build()), point -> assertThat(point).hasCount(2).hasSum(22.2d).hasBucketCounts(0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0).hasAttributes(Attributes.empty())));
// Histograms are cumulative by default.
testClock.advance(Duration.ofNanos(SECOND_NANOS));
bound.record(222d);
doubleRecorder.record(17d, Attributes.empty());
assertThat(sdkMeterReader.collectAllMetrics()).satisfiesExactly(metric -> assertThat(metric).hasResource(RESOURCE).hasInstrumentationLibrary(INSTRUMENTATION_LIBRARY_INFO).hasName("testRecorder").hasDoubleHistogram().points().allSatisfy(point -> assertThat(point).hasStartEpochNanos(startTime).hasEpochNanos(testClock.now())).satisfiesExactlyInAnyOrder(point -> assertThat(point).hasCount(4).hasSum(788.3).hasBucketCounts(0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0).hasAttributes(Attributes.builder().put("K", "V").build()), point -> assertThat(point).hasCount(3).hasSum(39.2).hasBucketCounts(0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0).hasAttributes(Attributes.empty())));
} finally {
bound.unbind();
}
}
use of io.opentelemetry.sdk.metrics.internal.instrument.BoundDoubleHistogram in project opentelemetry-java by open-telemetry.
the class SdkDoubleHistogramTest method boundDoubleHistogramRecord_MonotonicityCheck.
@Test
@SuppressLogger(SdkDoubleHistogram.class)
void boundDoubleHistogramRecord_MonotonicityCheck() {
DoubleHistogram histogram = sdkMeter.histogramBuilder("testHistogram").build();
BoundDoubleHistogram bound = ((SdkDoubleHistogram) histogram).bind(Attributes.empty());
try {
bound.record(-9);
assertThat(sdkMeterReader.collectAllMetrics()).hasSize(0);
logs.assertContains("Histograms can only record non-negative values. Instrument testHistogram has recorded a negative value.");
} finally {
bound.unbind();
}
}
use of io.opentelemetry.sdk.metrics.internal.instrument.BoundDoubleHistogram in project opentelemetry-java by open-telemetry.
the class SdkDoubleHistogramTest method collectMetrics_NoRecords.
@Test
void collectMetrics_NoRecords() {
DoubleHistogram doubleRecorder = sdkMeter.histogramBuilder("testRecorder").build();
BoundDoubleHistogram bound = ((SdkDoubleHistogram) doubleRecorder).bind(Attributes.builder().put("key", "value").build());
try {
assertThat(sdkMeterReader.collectAllMetrics()).isEmpty();
} finally {
bound.unbind();
}
}
Aggregations