Skip to content

Commit 1ac9cc8

Browse files
committed
Fix OM2 exemplar compliance delegation
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
1 parent ff7b3bc commit 1ac9cc8

2 files changed

Lines changed: 56 additions & 2 deletions

File tree

prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetrics2TextFormatWriter.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,8 @@ private void writeGauge(Writer writer, GaugeSnapshot snapshot, EscapingScheme sc
200200

201201
private void writeHistogram(Writer writer, HistogramSnapshot snapshot, EscapingScheme scheme)
202202
throws IOException {
203-
if (!openMetrics2Properties.getCompositeValues()) {
203+
if (!openMetrics2Properties.getCompositeValues()
204+
&& !openMetrics2Properties.getExemplarCompliance()) {
204205
om1Writer.writeHistogram(writer, snapshot, scheme);
205206
return;
206207
}
@@ -273,7 +274,8 @@ private ClassicHistogramBuckets getClassicBuckets(
273274

274275
private void writeSummary(Writer writer, SummarySnapshot snapshot, EscapingScheme scheme)
275276
throws IOException {
276-
if (!openMetrics2Properties.getCompositeValues()) {
277+
if (!openMetrics2Properties.getCompositeValues()
278+
&& !openMetrics2Properties.getExemplarCompliance()) {
277279
om1Writer.writeSummary(writer, snapshot, scheme);
278280
return;
279281
}

prometheus-metrics-exposition-textformats/src/test/java/io/prometheus/metrics/expositionformats/OpenMetrics2TextFormatWriterTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,58 @@ void testExemplarComplianceSkipsExemplarWithoutTimestamp() throws IOException {
549549
assertThat(write(withoutTs, defaultWriter)).contains("# {trace_id=\"bbb\"} 2.0\n");
550550
}
551551

552+
@Test
553+
void testExemplarComplianceSkipsHistogramExemplarWithoutTimestamp() throws IOException {
554+
Exemplar exemplarWithoutTs = Exemplar.builder().value(2.0).traceId("bbb").build();
555+
OpenMetrics2TextFormatWriter complianceWriter =
556+
OpenMetrics2TextFormatWriter.builder()
557+
.setOpenMetrics2Properties(
558+
OpenMetrics2Properties.builder().exemplarCompliance(true).build())
559+
.build();
560+
561+
MetricSnapshots snapshots =
562+
MetricSnapshots.of(
563+
HistogramSnapshot.builder()
564+
.name("requests")
565+
.dataPoint(
566+
HistogramSnapshot.HistogramDataPointSnapshot.builder()
567+
.sum(2.0)
568+
.classicHistogramBuckets(
569+
ClassicHistogramBuckets.builder()
570+
.bucket(1.0, 1)
571+
.bucket(Double.POSITIVE_INFINITY, 1)
572+
.build())
573+
.exemplars(Exemplars.of(exemplarWithoutTs))
574+
.build())
575+
.build());
576+
577+
assertThat(write(snapshots, complianceWriter)).doesNotContain("# {");
578+
}
579+
580+
@Test
581+
void testExemplarComplianceSkipsSummaryExemplarWithoutTimestamp() throws IOException {
582+
Exemplar exemplarWithoutTs = Exemplar.builder().value(2.0).traceId("bbb").build();
583+
OpenMetrics2TextFormatWriter complianceWriter =
584+
OpenMetrics2TextFormatWriter.builder()
585+
.setOpenMetrics2Properties(
586+
OpenMetrics2Properties.builder().exemplarCompliance(true).build())
587+
.build();
588+
589+
MetricSnapshots snapshots =
590+
MetricSnapshots.of(
591+
SummarySnapshot.builder()
592+
.name("requests")
593+
.dataPoint(
594+
SummarySnapshot.SummaryDataPointSnapshot.builder()
595+
.count(1)
596+
.sum(2.0)
597+
.exemplars(Exemplars.of(exemplarWithoutTs))
598+
.build())
599+
.build());
600+
601+
assertThat(write(snapshots, complianceWriter)).doesNotContain("# {");
602+
}
603+
552604
private String writeWithCompositeValues(MetricSnapshots snapshots) throws IOException {
553605
OpenMetrics2TextFormatWriter writer =
554606
OpenMetrics2TextFormatWriter.builder()

0 commit comments

Comments
 (0)