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(
013      PrometheusProtobufWriter prometheusProtobufWriter,
014      PrometheusTextFormatWriter prometheusTextFormatWriter,
015      OpenMetricsTextFormatWriter openMetricsTextFormatWriter) {
016    this.prometheusProtobufWriter = prometheusProtobufWriter;
017    this.prometheusTextFormatWriter = prometheusTextFormatWriter;
018    this.openMetricsTextFormatWriter = openMetricsTextFormatWriter;
019  }
020
021  public static ExpositionFormats init() {
022    return init(PrometheusProperties.get().getExporterProperties());
023  }
024
025  @SuppressWarnings("deprecation")
026  public static ExpositionFormats init(ExporterProperties properties) {
027    return new ExpositionFormats(
028        new PrometheusProtobufWriter(),
029        PrometheusTextFormatWriter.builder()
030            .setIncludeCreatedTimestamps(properties.getIncludeCreatedTimestamps())
031            .setTimestampsInMs(properties.getPrometheusTimestampsInMs())
032            .build(),
033        OpenMetricsTextFormatWriter.builder()
034            .setCreatedTimestampsEnabled(properties.getIncludeCreatedTimestamps())
035            .setExemplarsOnAllMetricTypesEnabled(properties.getExemplarsOnAllMetricTypes())
036            .build());
037  }
038
039  public ExpositionFormatWriter findWriter(String acceptHeader) {
040    if (prometheusProtobufWriter.accepts(acceptHeader)) {
041      return prometheusProtobufWriter;
042    }
043    if (openMetricsTextFormatWriter.accepts(acceptHeader)) {
044      return openMetricsTextFormatWriter;
045    }
046    return prometheusTextFormatWriter;
047  }
048
049  public PrometheusProtobufWriter getPrometheusProtobufWriter() {
050    return prometheusProtobufWriter;
051  }
052
053  public PrometheusTextFormatWriter getPrometheusTextFormatWriter() {
054    return prometheusTextFormatWriter;
055  }
056
057  public OpenMetricsTextFormatWriter getOpenMetricsTextFormatWriter() {
058    return openMetricsTextFormatWriter;
059  }
060}