in exporters/metrics/src/main/java/com/google/cloud/opentelemetry/metric/MetricTranslator.java [124:143]
static TimeInterval mapInterval(
io.opentelemetry.sdk.metrics.data.PointData point, MetricData metric) {
Timestamp startTime = mapTimestamp(point.getStartEpochNanos());
Timestamp endTime = mapTimestamp(point.getEpochNanos());
if (isGauge(metric)) {
// The start time must be equal to the end time for the gauge metric
startTime = endTime;
} else if (TimeUnit.SECONDS.toNanos(startTime.getSeconds()) + startTime.getNanos()
== TimeUnit.SECONDS.toNanos(endTime.getSeconds()) + endTime.getNanos()) {
// The end time of a new interval must be at least a millisecond after the end time of the
// previous interval, for all non-gauge types.
// https://cloud.google.com/monitoring/api/ref_v3/rpc/google.monitoring.v3#timeinterval
endTime =
Timestamp.newBuilder()
.setSeconds(endTime.getSeconds())
.setNanos(endTime.getNanos() + MIN_TIMESTAMP_INTERVAL_NANOS)
.build();
}
return TimeInterval.newBuilder().setStartTime(startTime).setEndTime(endTime).build();
}