Skip to content

Commit c8c1e9b

Browse files
committed
avoid redundant escaping
Signed-off-by: Gregor Zeitlinger <[email protected]>
1 parent eee53be commit c8c1e9b

File tree

5 files changed

+281
-175
lines changed

5 files changed

+281
-175
lines changed

prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java

Lines changed: 55 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.prometheus.metrics.expositionformats.internal;
22

33
import static io.prometheus.metrics.expositionformats.internal.ProtobufUtil.timestampFromMillis;
4+
import static io.prometheus.metrics.model.snapshots.SnapshotEscaper.getSnapshotLabelName;
45

56
import com.google.protobuf.TextFormat;
67
import io.prometheus.metrics.expositionformats.ExpositionFormatWriter;
@@ -19,7 +20,6 @@
1920
import io.prometheus.metrics.model.snapshots.MetricSnapshot;
2021
import io.prometheus.metrics.model.snapshots.MetricSnapshots;
2122
import io.prometheus.metrics.model.snapshots.NativeHistogramBuckets;
22-
import io.prometheus.metrics.model.snapshots.PrometheusNaming;
2323
import io.prometheus.metrics.model.snapshots.Quantiles;
2424
import io.prometheus.metrics.model.snapshots.SnapshotEscaper;
2525
import io.prometheus.metrics.model.snapshots.StateSetSnapshot;
@@ -46,7 +46,7 @@ public String toDebugString(MetricSnapshots metricSnapshots, EscapingScheme esca
4646
for (MetricSnapshot s : metricSnapshots) {
4747
MetricSnapshot snapshot = SnapshotEscaper.escapeMetricSnapshot(s, escapingScheme);
4848
if (!snapshot.getDataPoints().isEmpty()) {
49-
stringBuilder.append(TextFormat.printer().printToString(convert(snapshot)));
49+
stringBuilder.append(TextFormat.printer().printToString(convert(snapshot, escapingScheme)));
5050
}
5151
}
5252
return stringBuilder.toString();
@@ -59,88 +59,95 @@ public void write(
5959
for (MetricSnapshot s : metricSnapshots) {
6060
MetricSnapshot snapshot = SnapshotEscaper.escapeMetricSnapshot(s, escapingScheme);
6161
if (!snapshot.getDataPoints().isEmpty()) {
62-
convert(snapshot).writeDelimitedTo(out);
62+
convert(snapshot, escapingScheme).writeDelimitedTo(out);
6363
}
6464
}
6565
}
6666

67-
public Metrics.MetricFamily convert(MetricSnapshot snapshot) {
67+
Metrics.MetricFamily convert(MetricSnapshot snapshot, EscapingScheme scheme) {
6868
Metrics.MetricFamily.Builder builder = Metrics.MetricFamily.newBuilder();
6969
if (snapshot instanceof CounterSnapshot) {
7070
for (CounterDataPointSnapshot data : ((CounterSnapshot) snapshot).getDataPoints()) {
71-
builder.addMetric(convert(data));
71+
builder.addMetric(convert(data, scheme));
7272
}
73-
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), "_total", Metrics.MetricType.COUNTER);
73+
setMetadataUnlessEmpty(
74+
builder, snapshot.getMetadata(), "_total", Metrics.MetricType.COUNTER, scheme);
7475
} else if (snapshot instanceof GaugeSnapshot) {
7576
for (GaugeSnapshot.GaugeDataPointSnapshot data : ((GaugeSnapshot) snapshot).getDataPoints()) {
76-
builder.addMetric(convert(data));
77+
builder.addMetric(convert(data, scheme));
7778
}
78-
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE);
79+
setMetadataUnlessEmpty(
80+
builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE, scheme);
7981
} else if (snapshot instanceof HistogramSnapshot) {
8082
HistogramSnapshot histogram = (HistogramSnapshot) snapshot;
8183
for (HistogramSnapshot.HistogramDataPointSnapshot data : histogram.getDataPoints()) {
82-
builder.addMetric(convert(data));
84+
builder.addMetric(convert(data, scheme));
8385
}
8486
Metrics.MetricType type =
8587
histogram.isGaugeHistogram()
8688
? Metrics.MetricType.GAUGE_HISTOGRAM
8789
: Metrics.MetricType.HISTOGRAM;
88-
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, type);
90+
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, type, scheme);
8991
} else if (snapshot instanceof SummarySnapshot) {
9092
for (SummarySnapshot.SummaryDataPointSnapshot data :
9193
((SummarySnapshot) snapshot).getDataPoints()) {
9294
if (data.hasCount() || data.hasSum() || data.getQuantiles().size() > 0) {
93-
builder.addMetric(convert(data));
95+
builder.addMetric(convert(data, scheme));
9496
}
9597
}
96-
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.SUMMARY);
98+
setMetadataUnlessEmpty(
99+
builder, snapshot.getMetadata(), null, Metrics.MetricType.SUMMARY, scheme);
97100
} else if (snapshot instanceof InfoSnapshot) {
98101
for (InfoSnapshot.InfoDataPointSnapshot data : ((InfoSnapshot) snapshot).getDataPoints()) {
99-
builder.addMetric(convert(data));
102+
builder.addMetric(convert(data, scheme));
100103
}
101-
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), "_info", Metrics.MetricType.GAUGE);
104+
setMetadataUnlessEmpty(
105+
builder, snapshot.getMetadata(), "_info", Metrics.MetricType.GAUGE, scheme);
102106
} else if (snapshot instanceof StateSetSnapshot) {
103107
for (StateSetSnapshot.StateSetDataPointSnapshot data :
104108
((StateSetSnapshot) snapshot).getDataPoints()) {
105109
for (int i = 0; i < data.size(); i++) {
106-
builder.addMetric(convert(data, snapshot.getMetadata().getName(), i));
110+
builder.addMetric(convert(data, snapshot.getMetadata().getPrometheusName(), i, scheme));
107111
}
108112
}
109-
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE);
113+
setMetadataUnlessEmpty(
114+
builder, snapshot.getMetadata(), null, Metrics.MetricType.GAUGE, scheme);
110115
} else if (snapshot instanceof UnknownSnapshot) {
111116
for (UnknownSnapshot.UnknownDataPointSnapshot data :
112117
((UnknownSnapshot) snapshot).getDataPoints()) {
113-
builder.addMetric(convert(data));
118+
builder.addMetric(convert(data, scheme));
114119
}
115-
setMetadataUnlessEmpty(builder, snapshot.getMetadata(), null, Metrics.MetricType.UNTYPED);
120+
setMetadataUnlessEmpty(
121+
builder, snapshot.getMetadata(), null, Metrics.MetricType.UNTYPED, scheme);
116122
}
117123
return builder.build();
118124
}
119125

120-
private Metrics.Metric.Builder convert(CounterDataPointSnapshot data) {
126+
private Metrics.Metric.Builder convert(CounterDataPointSnapshot data, EscapingScheme scheme) {
121127
Metrics.Counter.Builder counterBuilder = Metrics.Counter.newBuilder();
122128
counterBuilder.setValue(data.getValue());
123129
if (data.getExemplar() != null) {
124-
counterBuilder.setExemplar(convert(data.getExemplar()));
130+
counterBuilder.setExemplar(convert(data.getExemplar(), scheme));
125131
}
126132
Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder();
127-
addLabels(metricBuilder, data.getLabels());
133+
addLabels(metricBuilder, data.getLabels(), scheme);
128134
metricBuilder.setCounter(counterBuilder.build());
129135
setScrapeTimestamp(metricBuilder, data);
130136
return metricBuilder;
131137
}
132138

133-
private Metrics.Metric.Builder convert(GaugeSnapshot.GaugeDataPointSnapshot data) {
139+
private Metrics.Metric.Builder convert(GaugeSnapshot.GaugeDataPointSnapshot data, EscapingScheme scheme) {
134140
Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder();
135141
gaugeBuilder.setValue(data.getValue());
136142
Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder();
137-
addLabels(metricBuilder, data.getLabels());
143+
addLabels(metricBuilder, data.getLabels(), scheme);
138144
metricBuilder.setGauge(gaugeBuilder);
139145
setScrapeTimestamp(metricBuilder, data);
140146
return metricBuilder;
141147
}
142148

143-
private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnapshot data) {
149+
private Metrics.Metric.Builder convert(
150+
HistogramSnapshot.HistogramDataPointSnapshot data, EscapingScheme scheme) {
144151
Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder();
145152
Metrics.Histogram.Builder histogramBuilder = Metrics.Histogram.newBuilder();
146153
if (data.hasNativeHistogramData()) {
@@ -158,7 +165,7 @@ private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnaps
158165
Metrics.Bucket.newBuilder()
159166
.setCumulativeCount(getNativeCount(data))
160167
.setUpperBound(Double.POSITIVE_INFINITY);
161-
bucketBuilder.setExemplar(convert(exemplar));
168+
bucketBuilder.setExemplar(convert(exemplar, scheme));
162169
histogramBuilder.addBucket(bucketBuilder);
163170
}
164171
}
@@ -177,13 +184,13 @@ private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnaps
177184
.setUpperBound(upperBound);
178185
Exemplar exemplar = data.getExemplars().get(lowerBound, upperBound);
179186
if (exemplar != null) {
180-
bucketBuilder.setExemplar(convert(exemplar));
187+
bucketBuilder.setExemplar(convert(exemplar, scheme));
181188
}
182189
histogramBuilder.addBucket(bucketBuilder);
183190
lowerBound = upperBound;
184191
}
185192
}
186-
addLabels(metricBuilder, data.getLabels());
193+
addLabels(metricBuilder, data.getLabels(), scheme);
187194
setScrapeTimestamp(metricBuilder, data);
188195
if (data.hasCount()) {
189196
histogramBuilder.setSampleCount(data.getCount());
@@ -195,7 +202,7 @@ private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnaps
195202
return metricBuilder;
196203
}
197204

198-
private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot data) {
205+
private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot data, EscapingScheme scheme) {
199206
Metrics.Summary.Builder summaryBuilder = Metrics.Summary.newBuilder();
200207
if (data.hasCount()) {
201208
summaryBuilder.setSampleCount(data.getCount());
@@ -212,27 +219,27 @@ private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot
212219
.build());
213220
}
214221
Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder();
215-
addLabels(metricBuilder, data.getLabels());
222+
addLabels(metricBuilder, data.getLabels(), scheme);
216223
metricBuilder.setSummary(summaryBuilder.build());
217224
setScrapeTimestamp(metricBuilder, data);
218225
return metricBuilder;
219226
}
220227

221-
private Metrics.Metric.Builder convert(InfoSnapshot.InfoDataPointSnapshot data) {
228+
private Metrics.Metric.Builder convert(InfoSnapshot.InfoDataPointSnapshot data, EscapingScheme scheme) {
222229
Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder();
223230
Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder();
224231
gaugeBuilder.setValue(1);
225-
addLabels(metricBuilder, data.getLabels());
232+
addLabels(metricBuilder, data.getLabels(), scheme);
226233
metricBuilder.setGauge(gaugeBuilder);
227234
setScrapeTimestamp(metricBuilder, data);
228235
return metricBuilder;
229236
}
230237

231238
private Metrics.Metric.Builder convert(
232-
StateSetSnapshot.StateSetDataPointSnapshot data, String name, int i) {
239+
StateSetSnapshot.StateSetDataPointSnapshot data, String name, int i, EscapingScheme scheme) {
233240
Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder();
234241
Metrics.Gauge.Builder gaugeBuilder = Metrics.Gauge.newBuilder();
235-
addLabels(metricBuilder, data.getLabels());
242+
addLabels(metricBuilder, data.getLabels(), scheme);
236243
metricBuilder.addLabel(
237244
Metrics.LabelPair.newBuilder().setName(name).setValue(data.getName(i)).build());
238245
if (data.isTrue(i)) {
@@ -245,19 +252,20 @@ private Metrics.Metric.Builder convert(
245252
return metricBuilder;
246253
}
247254

248-
private Metrics.Metric.Builder convert(UnknownSnapshot.UnknownDataPointSnapshot data) {
255+
private Metrics.Metric.Builder convert(
256+
UnknownSnapshot.UnknownDataPointSnapshot data, EscapingScheme scheme) {
249257
Metrics.Metric.Builder metricBuilder = Metrics.Metric.newBuilder();
250258
Metrics.Untyped.Builder untypedBuilder = Metrics.Untyped.newBuilder();
251259
untypedBuilder.setValue(data.getValue());
252-
addLabels(metricBuilder, data.getLabels());
260+
addLabels(metricBuilder, data.getLabels(), scheme);
253261
metricBuilder.setUntyped(untypedBuilder);
254262
return metricBuilder;
255263
}
256264

257-
private Metrics.Exemplar.Builder convert(Exemplar exemplar) {
265+
private Metrics.Exemplar.Builder convert(Exemplar exemplar, EscapingScheme scheme) {
258266
Metrics.Exemplar.Builder builder = Metrics.Exemplar.newBuilder();
259267
builder.setValue(exemplar.getValue());
260-
addLabels(builder, exemplar.getLabels());
268+
addLabels(builder, exemplar.getLabels(), scheme);
261269
if (exemplar.hasTimestamp()) {
262270
builder.setTimestamp(timestampFromMillis(exemplar.getTimestampMillis()));
263271
}
@@ -268,14 +276,15 @@ private void setMetadataUnlessEmpty(
268276
Metrics.MetricFamily.Builder builder,
269277
MetricMetadata metadata,
270278
String nameSuffix,
271-
Metrics.MetricType type) {
279+
Metrics.MetricType type,
280+
EscapingScheme scheme) {
272281
if (builder.getMetricCount() == 0) {
273282
return;
274283
}
275284
if (nameSuffix == null) {
276-
builder.setName(metadata.getName());
285+
builder.setName(SnapshotEscaper.getMetadataName(metadata, scheme));
277286
} else {
278-
builder.setName(metadata.getName() + nameSuffix);
287+
builder.setName(SnapshotEscaper.getMetadataName(metadata, scheme) + nameSuffix);
279288
}
280289
if (metadata.getHelp() != null) {
281290
builder.setHelp(metadata.getHelp());
@@ -348,21 +357,23 @@ private void addBuckets(
348357
}
349358
}
350359

351-
private void addLabels(Metrics.Metric.Builder metricBuilder, Labels labels) {
360+
private void addLabels(
361+
Metrics.Metric.Builder metricBuilder, Labels labels, EscapingScheme scheme) {
352362
for (int i = 0; i < labels.size(); i++) {
353363
metricBuilder.addLabel(
354364
Metrics.LabelPair.newBuilder()
355-
.setName(labels.getName(i))
365+
.setName(getSnapshotLabelName(labels, i, scheme))
356366
.setValue(labels.getValue(i))
357367
.build());
358368
}
359369
}
360370

361-
private void addLabels(Metrics.Exemplar.Builder metricBuilder, Labels labels) {
371+
private void addLabels(
372+
Metrics.Exemplar.Builder metricBuilder, Labels labels, EscapingScheme scheme) {
362373
for (int i = 0; i < labels.size(); i++) {
363374
metricBuilder.addLabel(
364375
Metrics.LabelPair.newBuilder()
365-
.setName(labels.getName(i))
376+
.setName(getSnapshotLabelName(labels, i, scheme))
366377
.setValue(labels.getValue(i))
367378
.build());
368379
}

0 commit comments

Comments
 (0)