11package io .prometheus .metrics .expositionformats .internal ;
22
33import static io .prometheus .metrics .expositionformats .internal .ProtobufUtil .timestampFromMillis ;
4+ import static io .prometheus .metrics .model .snapshots .SnapshotEscaper .getSnapshotLabelName ;
45
56import com .google .protobuf .TextFormat ;
67import io .prometheus .metrics .expositionformats .ExpositionFormatWriter ;
1920import io .prometheus .metrics .model .snapshots .MetricSnapshot ;
2021import io .prometheus .metrics .model .snapshots .MetricSnapshots ;
2122import io .prometheus .metrics .model .snapshots .NativeHistogramBuckets ;
22- import io .prometheus .metrics .model .snapshots .PrometheusNaming ;
2323import io .prometheus .metrics .model .snapshots .Quantiles ;
2424import io .prometheus .metrics .model .snapshots .SnapshotEscaper ;
2525import 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