|
37 | 37 | */ |
38 | 38 | public class OpenMetricsTextFormatWriter implements ExpositionFormatWriter { |
39 | 39 |
|
| 40 | + public static class Builder { |
| 41 | + CreatedTimestampStyle createdTimestampStyle; |
| 42 | + boolean exemplarsOnAllMetricTypesEnabled; |
| 43 | + |
| 44 | + private Builder() { |
| 45 | + } |
| 46 | + |
| 47 | + /** |
| 48 | + * @param createdTimestampsEnabled whether to include the _created timestamp in the output |
| 49 | + */ |
| 50 | + public void setCreatedTimestampsEnabled(boolean createdTimestampsEnabled) { |
| 51 | + this.createdTimestampStyle = CreatedTimestampStyle.fromEnabled(createdTimestampsEnabled); |
| 52 | + } |
| 53 | + |
| 54 | + /** |
| 55 | + * @param exemplarsOnAllMetricTypesEnabled whether to include exemplars in the output for all metric types |
| 56 | + */ |
| 57 | + public void setExemplarsOnAllMetricTypesEnabled(boolean exemplarsOnAllMetricTypesEnabled) { |
| 58 | + this.exemplarsOnAllMetricTypesEnabled = exemplarsOnAllMetricTypesEnabled; |
| 59 | + } |
| 60 | + } |
| 61 | + |
| 62 | + private enum CreatedTimestampStyle { |
| 63 | + DISABLED, |
| 64 | + DEPRECATED, |
| 65 | + MILLISECONDS; |
| 66 | + |
| 67 | + private static CreatedTimestampStyle fromDeprecated(boolean createdTimestampsEnabled) { |
| 68 | + return createdTimestampsEnabled ? DEPRECATED : DISABLED; |
| 69 | + } |
| 70 | + |
| 71 | + private static CreatedTimestampStyle fromEnabled(boolean createdTimestampsEnabled) { |
| 72 | + return createdTimestampsEnabled ? MILLISECONDS : DISABLED; |
| 73 | + } |
| 74 | + } |
| 75 | + |
40 | 76 | public static final String CONTENT_TYPE = |
41 | 77 | "application/openmetrics-text; version=1.0.0; charset=utf-8"; |
42 | | - private final boolean createdTimestampsEnabled; |
| 78 | + private final CreatedTimestampStyle createdTimestampStyle; |
43 | 79 | private final boolean exemplarsOnAllMetricTypesEnabled; |
44 | 80 |
|
45 | 81 | /** |
46 | | - * @param createdTimestampsEnabled defines if {@code _created} timestamps should be included in |
47 | | - * the output or not. |
| 82 | + * @param createdTimestampsEnabled whether to include the _created timestamp in the output - This will produce an invalid OpenMetrics output, but is kept for backwards compatibility. |
| 83 | + * @deprecated this constructor is deprecated and will be removed in the next major version. Use |
48 | 84 | */ |
| 85 | + @Deprecated |
49 | 86 | public OpenMetricsTextFormatWriter( |
50 | 87 | boolean createdTimestampsEnabled, boolean exemplarsOnAllMetricTypesEnabled) { |
51 | | - this.createdTimestampsEnabled = createdTimestampsEnabled; |
| 88 | + this(CreatedTimestampStyle.fromDeprecated(createdTimestampsEnabled), exemplarsOnAllMetricTypesEnabled); |
| 89 | + } |
| 90 | + |
| 91 | + // some new ctor that produces milliceconds timestamps as required by the OpenMetrics spec |
| 92 | + // https://prometheus.io/docs/instrumenting/exposition_formats/#comments-help-text-and-type-information |
| 93 | + private OpenMetricsTextFormatWriter( |
| 94 | + CreatedTimestampStyle createdTimestampStyle, boolean exemplarsOnAllMetricTypesEnabled) { |
| 95 | + this.createdTimestampStyle = createdTimestampStyle; |
52 | 96 | this.exemplarsOnAllMetricTypesEnabled = exemplarsOnAllMetricTypesEnabled; |
53 | 97 | } |
54 | 98 |
|
| 99 | + public static Builder builder() { |
| 100 | + return new Builder(); |
| 101 | + } |
| 102 | + |
55 | 103 | @Override |
56 | 104 | public boolean accepts(String acceptHeader) { |
57 | 105 | if (acceptHeader == null) { |
@@ -297,7 +345,7 @@ private void writeCountAndSum( |
297 | 345 |
|
298 | 346 | private void writeCreated(Writer writer, MetricMetadata metadata, DataPointSnapshot data) |
299 | 347 | throws IOException { |
300 | | - if (createdTimestampsEnabled && data.hasCreatedTimestamp()) { |
| 348 | + if (createdTimestampStyle != CreatedTimestampStyle.DISABLED && data.hasCreatedTimestamp()) { |
301 | 349 | writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels()); |
302 | 350 | writeTimestamp(writer, data.getCreatedTimestampMillis()); |
303 | 351 | if (data.hasScrapeTimestamp()) { |
|
0 commit comments