Skip to content

Commit d95b631

Browse files
committed
Test OM2 original names through builders
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
1 parent a22750d commit d95b631

2 files changed

Lines changed: 90 additions & 76 deletions

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package io.prometheus.metrics.core.metrics;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import io.prometheus.metrics.config.EscapingScheme;
6+
import io.prometheus.metrics.config.OpenMetrics2Properties;
7+
import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
8+
import io.prometheus.metrics.expositionformats.OpenMetrics2TextFormatWriter;
9+
import io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter;
10+
import io.prometheus.metrics.model.snapshots.MetricSnapshots;
11+
import io.prometheus.metrics.model.snapshots.Unit;
12+
import java.io.ByteArrayOutputStream;
13+
import java.io.IOException;
14+
import java.nio.charset.StandardCharsets;
15+
import org.junit.jupiter.api.Test;
16+
17+
class OpenMetrics2TextFormatWriterTest {
18+
19+
@Test
20+
void counterPreservesOriginalNameWhenUnitIsConfigured() throws IOException {
21+
Counter counter =
22+
Counter.builder()
23+
.name("my_counter")
24+
.unit(Unit.SECONDS)
25+
.help("Test counter")
26+
.labelNames("method")
27+
.build();
28+
counter.labelValues("GET").inc(42.0);
29+
MetricSnapshots snapshots = MetricSnapshots.of(counter.collect());
30+
31+
String om1Output = writeWithOM1(snapshots);
32+
String om2Output = writeWithOM2(snapshots);
33+
34+
assertThat(om1Output).contains("my_counter_seconds_total{method=\"GET\"} 42.0");
35+
assertThat(om2Output)
36+
.contains("# TYPE my_counter counter\n")
37+
.contains("# UNIT my_counter seconds\n")
38+
.contains("# HELP my_counter Test counter\n")
39+
.containsPattern("(?m)^my_counter\\{method=\"GET\"} 42\\.0 st@\\d+\\.\\d{3}$")
40+
.doesNotContain("my_counter_seconds");
41+
}
42+
43+
@Test
44+
void nativeHistogramPreservesOriginalNameWhenUnitIsConfigured() throws IOException {
45+
Histogram histogram =
46+
Histogram.builder()
47+
.name("my.request.duration")
48+
.unit(Unit.SECONDS)
49+
.help("Request duration in seconds")
50+
.labelNames("http.path")
51+
.nativeOnly()
52+
.build();
53+
histogram.labelValues("/hello").observe(3.2);
54+
MetricSnapshots snapshots = MetricSnapshots.of(histogram.collect());
55+
56+
String om2Output = writeWithNativeHistograms(snapshots);
57+
58+
assertThat(om2Output)
59+
.contains("# TYPE \"my.request.duration\" histogram\n")
60+
.contains("# UNIT \"my.request.duration\" seconds\n")
61+
.contains("# HELP \"my.request.duration\" Request duration in seconds\n")
62+
.contains("{\"my.request.duration\",\"http.path\"=\"/hello\"} {count:1,sum:3.2,")
63+
.doesNotContain("my.request.duration_seconds");
64+
}
65+
66+
private String writeWithOM1(MetricSnapshots snapshots) throws IOException {
67+
return write(snapshots, OpenMetricsTextFormatWriter.create());
68+
}
69+
70+
private String writeWithOM2(MetricSnapshots snapshots) throws IOException {
71+
return write(snapshots, OpenMetrics2TextFormatWriter.create());
72+
}
73+
74+
private String writeWithNativeHistograms(MetricSnapshots snapshots) throws IOException {
75+
OpenMetrics2TextFormatWriter writer =
76+
OpenMetrics2TextFormatWriter.builder()
77+
.setOpenMetrics2Properties(
78+
OpenMetrics2Properties.builder().nativeHistograms(true).build())
79+
.build();
80+
return write(snapshots, writer);
81+
}
82+
83+
private String write(MetricSnapshots snapshots, ExpositionFormatWriter writer)
84+
throws IOException {
85+
ByteArrayOutputStream out = new ByteArrayOutputStream();
86+
writer.write(out, snapshots, EscapingScheme.ALLOW_UTF8);
87+
return out.toString(StandardCharsets.UTF_8.name());
88+
}
89+
}

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

Lines changed: 1 addition & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@
1212
import io.prometheus.metrics.model.snapshots.HistogramSnapshot;
1313
import io.prometheus.metrics.model.snapshots.InfoSnapshot;
1414
import io.prometheus.metrics.model.snapshots.Labels;
15-
import io.prometheus.metrics.model.snapshots.MetricMetadata;
1615
import io.prometheus.metrics.model.snapshots.MetricSnapshots;
1716
import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets;
1817
import io.prometheus.metrics.model.snapshots.Quantiles;
1918
import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
2019
import io.prometheus.metrics.model.snapshots.SummarySnapshot;
21-
import io.prometheus.metrics.model.snapshots.Unit;
2220
import java.io.ByteArrayOutputStream;
2321
import java.io.IOException;
2422
import java.nio.charset.StandardCharsets;
25-
import java.util.Collections;
2623
import org.junit.jupiter.api.Test;
2724

2825
class OpenMetrics2TextFormatWriterTest {
@@ -90,35 +87,6 @@ void testGetOpenMetrics2Properties() {
9087
assertThat(writer.getOpenMetrics2Properties().getCompositeValues()).isTrue();
9188
}
9289

93-
@Test
94-
void testCounterNoTotalSuffix() throws IOException {
95-
MetricSnapshots snapshots =
96-
MetricSnapshots.of(
97-
new CounterSnapshot(
98-
new MetricMetadata(
99-
"my_counter_seconds",
100-
"my_counter_seconds",
101-
"my_counter",
102-
"Test counter",
103-
Unit.SECONDS),
104-
Collections.singletonList(
105-
CounterSnapshot.CounterDataPointSnapshot.builder()
106-
.value(42.0)
107-
.labels(Labels.of("method", "GET"))
108-
.build())));
109-
110-
String om2Output = writeWithOM2(snapshots);
111-
112-
// OM2: name as provided, no _total or unit suffix appending.
113-
assertThat(om2Output)
114-
.isEqualTo(
115-
"# TYPE my_counter counter\n"
116-
+ "# UNIT my_counter seconds\n"
117-
+ "# HELP my_counter Test counter\n"
118-
+ "my_counter{method=\"GET\"} 42.0\n"
119-
+ "# EOF\n");
120-
}
121-
12290
@Test
12391
void testCounterWithTotalSuffix() throws IOException {
12492
MetricSnapshots snapshots =
@@ -688,49 +656,6 @@ void testNativeGaugeHistogramWithNegativeAndPositiveSpans() throws IOException {
688656
+ "# EOF\n");
689657
}
690658

691-
@Test
692-
void testNativeHistogramWithDots() throws IOException {
693-
Exemplar exemplar =
694-
Exemplar.builder()
695-
.labels(Labels.of("some.exemplar.key", "some value"))
696-
.value(3.0)
697-
.timestampMillis(1690298864383L)
698-
.build();
699-
700-
MetricSnapshots snapshots =
701-
MetricSnapshots.of(
702-
new HistogramSnapshot(
703-
new MetricMetadata(
704-
"my.request.duration.seconds",
705-
"my.request.duration.seconds",
706-
"my.request.duration",
707-
"Request duration in seconds",
708-
Unit.SECONDS),
709-
Collections.singletonList(
710-
HistogramSnapshot.HistogramDataPointSnapshot.builder()
711-
.labels(Labels.builder().label("http.path", "/hello").build())
712-
.sum(3.2)
713-
.nativeSchema(5)
714-
.nativeZeroCount(1)
715-
.nativeBucketsForPositiveValues(
716-
NativeHistogramBuckets.builder().bucket(2, 3).build())
717-
.exemplars(Exemplars.of(exemplar))
718-
.build())));
719-
720-
String output = writeWithNativeHistograms(snapshots);
721-
722-
assertThat(output)
723-
.isEqualTo(
724-
"# TYPE \"my.request.duration\" histogram\n"
725-
+ "# UNIT \"my.request.duration\" seconds\n"
726-
+ "# HELP \"my.request.duration\" Request duration in seconds\n"
727-
+ "{\"my.request.duration\",\"http.path\"=\"/hello\"}"
728-
+ " {count:4,sum:3.2,schema:5,zero_threshold:0.0,zero_count:1,"
729-
+ "positive_spans:[2:1],positive_buckets:[3]}"
730-
+ " # {\"some.exemplar.key\"=\"some value\"} 3.0 1690298864.383\n"
731-
+ "# EOF\n");
732-
}
733-
734659
@Test
735660
void testCompositeSummary() throws IOException {
736661
MetricSnapshots snapshots =
@@ -917,6 +842,6 @@ private String write(MetricSnapshots snapshots, ExpositionFormatWriter writer)
917842
throws IOException {
918843
ByteArrayOutputStream out = new ByteArrayOutputStream();
919844
writer.write(out, snapshots, EscapingScheme.ALLOW_UTF8);
920-
return out.toString(StandardCharsets.UTF_8);
845+
return out.toString(StandardCharsets.UTF_8.name());
921846
}
922847
}

0 commit comments

Comments
 (0)