Skip to content

Commit e2e2be4

Browse files
committed
fix timestamp style
Signed-off-by: Gregor Zeitlinger <[email protected]>
1 parent 43c4c39 commit e2e2be4

File tree

1 file changed

+53
-5
lines changed

1 file changed

+53
-5
lines changed

prometheus-metrics-exposition-textformats/src/main/java/io/prometheus/metrics/expositionformats/OpenMetricsTextFormatWriter.java

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,69 @@
3737
*/
3838
public class OpenMetricsTextFormatWriter implements ExpositionFormatWriter {
3939

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+
4076
public static final String CONTENT_TYPE =
4177
"application/openmetrics-text; version=1.0.0; charset=utf-8";
42-
private final boolean createdTimestampsEnabled;
78+
private final CreatedTimestampStyle createdTimestampStyle;
4379
private final boolean exemplarsOnAllMetricTypesEnabled;
4480

4581
/**
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
4884
*/
85+
@Deprecated
4986
public OpenMetricsTextFormatWriter(
5087
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;
5296
this.exemplarsOnAllMetricTypesEnabled = exemplarsOnAllMetricTypesEnabled;
5397
}
5498

99+
public static Builder builder() {
100+
return new Builder();
101+
}
102+
55103
@Override
56104
public boolean accepts(String acceptHeader) {
57105
if (acceptHeader == null) {
@@ -297,7 +345,7 @@ private void writeCountAndSum(
297345

298346
private void writeCreated(Writer writer, MetricMetadata metadata, DataPointSnapshot data)
299347
throws IOException {
300-
if (createdTimestampsEnabled && data.hasCreatedTimestamp()) {
348+
if (createdTimestampStyle != CreatedTimestampStyle.DISABLED && data.hasCreatedTimestamp()) {
301349
writeNameAndLabels(writer, metadata.getPrometheusName(), "_created", data.getLabels());
302350
writeTimestamp(writer, data.getCreatedTimestampMillis());
303351
if (data.hasScrapeTimestamp()) {

0 commit comments

Comments
 (0)