Fix broken content negotiation for Prometheus with OpenMetrics

Update Prometheus `TextOutputFormat` so that OpenMetrics is used in
preference to text output when an appropriate accept header is found.

If the accept header contains `*/*` or is missing then the text format
will be used.

See gh-28130
This commit is contained in:
Andy Wilkinson
2021-10-04 20:10:46 +01:00
parent d8141e6a8d
commit 437a1601ef
2 changed files with 25 additions and 12 deletions

View File

@@ -35,18 +35,6 @@ import org.springframework.util.MimeTypeUtils;
*/
public enum TextOutputFormat implements Producible<TextOutputFormat> {
/**
* OpenMetrics text version 1.0.0.
*/
CONTENT_TYPE_OPENMETRICS_100(TextFormat.CONTENT_TYPE_OPENMETRICS_100) {
@Override
void write(Writer writer, Enumeration<MetricFamilySamples> samples) throws IOException {
TextFormat.writeOpenMetrics100(writer, samples);
}
},
/**
* Prometheus text version 0.0.4.
*/
@@ -57,6 +45,23 @@ public enum TextOutputFormat implements Producible<TextOutputFormat> {
TextFormat.write004(writer, samples);
}
@Override
public boolean isDefault() {
return true;
}
},
/**
* OpenMetrics text version 1.0.0.
*/
CONTENT_TYPE_OPENMETRICS_100(TextFormat.CONTENT_TYPE_OPENMETRICS_100) {
@Override
void write(Writer writer, Enumeration<MetricFamilySamples> samples) throws IOException {
TextFormat.writeOpenMetrics100(writer, samples);
}
};
private final MimeType mimeType;