|
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