001package io.prometheus.metrics.expositionformats;
002
003import io.prometheus.metrics.config.ExporterProperties;
004import io.prometheus.metrics.config.PrometheusProperties;
005
006public class ExpositionFormats {
007
008    private final PrometheusProtobufWriter prometheusProtobufWriter;
009    private final PrometheusTextFormatWriter prometheusTextFormatWriter;
010    private final OpenMetricsTextFormatWriter openMetricsTextFormatWriter;
011
012    private ExpositionFormats(PrometheusProtobufWriter prometheusProtobufWriter,
013                              PrometheusTextFormatWriter prometheusTextFormatWriter,
014                              OpenMetricsTextFormatWriter openMetricsTextFormatWriter) {
015        this.prometheusProtobufWriter = prometheusProtobufWriter;
016        this.prometheusTextFormatWriter = prometheusTextFormatWriter;
017        this.openMetricsTextFormatWriter = openMetricsTextFormatWriter;
018    }
019
020    public static ExpositionFormats init() {
021        return init(PrometheusProperties.get().getExporterProperties());
022    }
023
024    public static ExpositionFormats init(ExporterProperties properties) {
025        return new ExpositionFormats(
026                new PrometheusProtobufWriter(),
027                new PrometheusTextFormatWriter(properties.getIncludeCreatedTimestamps()),
028                new OpenMetricsTextFormatWriter(properties.getIncludeCreatedTimestamps(), properties.getExemplarsOnAllMetricTypes())
029        );
030    }
031
032    public ExpositionFormatWriter findWriter(String acceptHeader) {
033        if (prometheusProtobufWriter.accepts(acceptHeader)) {
034            return prometheusProtobufWriter;
035        }
036        if (openMetricsTextFormatWriter.accepts(acceptHeader)) {
037            return openMetricsTextFormatWriter;
038        }
039        return prometheusTextFormatWriter;
040    }
041
042    public PrometheusProtobufWriter getPrometheusProtobufWriter() {
043        return prometheusProtobufWriter;
044    }
045
046    public PrometheusTextFormatWriter getPrometheusTextFormatWriter() {
047        return prometheusTextFormatWriter;
048    }
049
050    public OpenMetricsTextFormatWriter getOpenMetricsTextFormatWriter() {
051        return openMetricsTextFormatWriter;
052    }
053}