Skip to content

Commit 8aac7b3

Browse files
author
Saraj Rahmani
committed
Include created timestamp in protobuf output format
1 parent 1b4d99d commit 8aac7b3

File tree

3 files changed

+298
-24
lines changed

3 files changed

+298
-24
lines changed

prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/ExpositionFormats.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public static ExpositionFormats init() {
2424

2525
public static ExpositionFormats init(ExporterProperties properties) {
2626
return new ExpositionFormats(
27-
new PrometheusProtobufWriter(),
27+
new PrometheusProtobufWriter(properties.getIncludeCreatedTimestamps()),
2828
new PrometheusTextFormatWriter(properties.getIncludeCreatedTimestamps()),
2929
new OpenMetricsTextFormatWriter(
3030
properties.getIncludeCreatedTimestamps(), properties.getExemplarsOnAllMetricTypes()));

prometheus-metrics-exposition-formats/src/main/java/io/prometheus/metrics/expositionformats/PrometheusProtobufWriter.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static io.prometheus.metrics.expositionformats.ProtobufUtil.timestampFromMillis;
44

55
import com.google.protobuf.TextFormat;
6+
import com.google.protobuf.Timestamp;
67
import io.prometheus.metrics.expositionformats.generated.com_google_protobuf_4_28_2.Metrics;
78
import io.prometheus.metrics.model.snapshots.ClassicHistogramBuckets;
89
import io.prometheus.metrics.model.snapshots.CounterSnapshot;
@@ -35,6 +36,16 @@ public class PrometheusProtobufWriter implements ExpositionFormatWriter {
3536
public static final String CONTENT_TYPE =
3637
"application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited";
3738

39+
private final boolean writeCreatedTimestamps;
40+
41+
public PrometheusProtobufWriter() {
42+
this(false);
43+
}
44+
45+
public PrometheusProtobufWriter(boolean writeCreatedTimestamps) {
46+
this.writeCreatedTimestamps = writeCreatedTimestamps;
47+
}
48+
3849
@Override
3950
public boolean accepts(String acceptHeader) {
4051
if (acceptHeader == null) {
@@ -149,6 +160,9 @@ private Metrics.Metric.Builder convert(CounterDataPointSnapshot data) {
149160
counterBuilder.setExemplar(convert(data.getExemplar()));
150161
}
151162
addLabels(metricBuilder, data.getLabels());
163+
if (writeCreatedTimestamps) {
164+
counterBuilder.setCreatedTimestamp(createTimestamp(data));
165+
}
152166
metricBuilder.setCounter(counterBuilder.build());
153167
setScrapeTimestamp(metricBuilder, data);
154168
return metricBuilder;
@@ -209,12 +223,16 @@ private Metrics.Metric.Builder convert(HistogramSnapshot.HistogramDataPointSnaps
209223
}
210224
addLabels(metricBuilder, data.getLabels());
211225
setScrapeTimestamp(metricBuilder, data);
226+
212227
if (data.hasCount()) {
213228
histogramBuilder.setSampleCount(data.getCount());
214229
}
215230
if (data.hasSum()) {
216231
histogramBuilder.setSampleSum(data.getSum());
217232
}
233+
if (writeCreatedTimestamps) {
234+
histogramBuilder.setCreatedTimestamp(createTimestamp(data));
235+
}
218236
metricBuilder.setHistogram(histogramBuilder.build());
219237
return metricBuilder;
220238
}
@@ -302,6 +320,9 @@ private Metrics.Metric.Builder convert(SummarySnapshot.SummaryDataPointSnapshot
302320
.build());
303321
}
304322
addLabels(metricBuilder, data.getLabels());
323+
if (writeCreatedTimestamps) {
324+
summaryBuilder.setCreatedTimestamp(createTimestamp(data));
325+
}
305326
metricBuilder.setSummary(summaryBuilder.build());
306327
setScrapeTimestamp(metricBuilder, data);
307328
return metricBuilder;
@@ -378,4 +399,11 @@ private void setScrapeTimestamp(Metrics.Metric.Builder metricBuilder, DataPointS
378399
metricBuilder.setTimestampMs(data.getScrapeTimestampMillis());
379400
}
380401
}
402+
403+
private Timestamp createTimestamp(DataPointSnapshot data) {
404+
final long createdTimestamp = data.getCreatedTimestampMillis();
405+
final long seconds = createdTimestamp / 1000;
406+
final int nanos = (int) (createdTimestamp % 1000 * 1000000);
407+
return Timestamp.newBuilder().setSeconds(seconds).setNanos(nanos).build();
408+
}
381409
}

0 commit comments

Comments
 (0)