66import io .prometheus .metrics .expositionformats .ExpositionFormats ;
77import io .prometheus .metrics .model .registry .MetricNameFilter ;
88import io .prometheus .metrics .model .registry .PrometheusRegistry ;
9+ import io .prometheus .metrics .model .snapshots .EscapingScheme ;
910import io .prometheus .metrics .model .snapshots .MetricSnapshots ;
1011import java .io .ByteArrayOutputStream ;
1112import java .io .IOException ;
@@ -54,10 +55,11 @@ public void handleRequest(PrometheusHttpExchange exchange) throws IOException {
5455 try {
5556 PrometheusHttpRequest request = exchange .getRequest ();
5657 MetricSnapshots snapshots = scrape (request );
57- if (writeDebugResponse (snapshots , exchange )) {
58+ String acceptHeader = request .getHeader ("Accept" );
59+ EscapingScheme escapingScheme = EscapingScheme .fromAcceptHeader (acceptHeader );
60+ if (writeDebugResponse (snapshots , escapingScheme , exchange )) {
5861 return ;
5962 }
60- String acceptHeader = request .getHeader ("Accept" );
6163 ExpositionFormatWriter writer = expositionFormats .findWriter (acceptHeader );
6264 PrometheusHttpResponse response = exchange .getResponse ();
6365 response .setHeader ("Content-Type" , writer .getContentType ());
@@ -66,12 +68,12 @@ public void handleRequest(PrometheusHttpExchange exchange) throws IOException {
6668 response .setHeader ("Content-Encoding" , "gzip" );
6769 try (GZIPOutputStream gzipOutputStream =
6870 new GZIPOutputStream (response .sendHeadersAndGetBody (200 , 0 ))) {
69- writer .write (gzipOutputStream , snapshots );
71+ writer .write (gzipOutputStream , snapshots , escapingScheme );
7072 }
7173 } else {
7274 ByteArrayOutputStream responseBuffer =
7375 new ByteArrayOutputStream (lastResponseSize .get () + 1024 );
74- writer .write (responseBuffer , snapshots );
76+ writer .write (responseBuffer , snapshots , escapingScheme );
7577 lastResponseSize .set (responseBuffer .size ());
7678 int contentLength = responseBuffer .size ();
7779 if (contentLength > 0 ) {
@@ -136,7 +138,8 @@ private MetricSnapshots scrape(PrometheusHttpRequest request) {
136138 }
137139 }
138140
139- private boolean writeDebugResponse (MetricSnapshots snapshots , PrometheusHttpExchange exchange )
141+ private boolean writeDebugResponse (
142+ MetricSnapshots snapshots , EscapingScheme escapingScheme , PrometheusHttpExchange exchange )
140143 throws IOException {
141144 String debugParam = exchange .getRequest ().getParameter ("debug" );
142145 PrometheusHttpResponse response = exchange .getResponse ();
@@ -148,14 +151,16 @@ private boolean writeDebugResponse(MetricSnapshots snapshots, PrometheusHttpExch
148151 OutputStream body = response .sendHeadersAndGetBody (responseStatus , 0 );
149152 switch (debugParam ) {
150153 case "openmetrics" :
151- expositionFormats .getOpenMetricsTextFormatWriter ().write (body , snapshots );
154+ expositionFormats .getOpenMetricsTextFormatWriter ().write (body , snapshots , escapingScheme );
152155 break ;
153156 case "text" :
154- expositionFormats .getPrometheusTextFormatWriter ().write (body , snapshots );
157+ expositionFormats .getPrometheusTextFormatWriter ().write (body , snapshots , escapingScheme );
155158 break ;
156159 case "prometheus-protobuf" :
157160 String debugString =
158- expositionFormats .getPrometheusProtobufWriter ().toDebugString (snapshots );
161+ expositionFormats
162+ .getPrometheusProtobufWriter ()
163+ .toDebugString (snapshots , escapingScheme );
159164 body .write (debugString .getBytes (StandardCharsets .UTF_8 ));
160165 break ;
161166 default :
0 commit comments