mirror of
https://github.com/google/nomulus.git
synced 2025-05-13 07:57:13 +02:00
Change to metrics to keep track of when the metric value was first set
This CL also adds IncrementableMetric#reset() methods to allow resetting the value and start timestamp of IncrementableMetrics. This is necessary because some backends, like Stackdriver, use non-monotonic changes in cumulative metric values to detect timeseries restarts. Tracking and re-setting the start timestamp allows users to track mostly monotonic metrics which may have non-monotonic discontinuities. See https://cloud.google.com/monitoring/api/ref_v3/rest/v3/TimeSeries#Point for more details. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=130795229
This commit is contained in:
parent
b6eaba08eb
commit
91f8b6da38
7 changed files with 192 additions and 26 deletions
|
@ -46,6 +46,7 @@ import java.util.logging.Logger;
|
|||
import javax.annotation.concurrent.NotThreadSafe;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import org.joda.time.Interval;
|
||||
import org.joda.time.format.DateTimeFormatter;
|
||||
import org.joda.time.format.ISODateTimeFormat;
|
||||
|
||||
|
@ -251,6 +252,12 @@ public class StackdriverWriter implements MetricWriter {
|
|||
return descriptor;
|
||||
}
|
||||
|
||||
private static TimeInterval encodeTimeInterval(Interval nativeInterval) {
|
||||
return new TimeInterval()
|
||||
.setEndTime(DATETIME_FORMATTER.print(nativeInterval.getEnd()))
|
||||
.setStartTime(DATETIME_FORMATTER.print(nativeInterval.getStart()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes a {@link MetricPoint} into a Stackdriver {@link TimeSeries}.
|
||||
*
|
||||
|
@ -298,9 +305,7 @@ public class StackdriverWriter implements MetricWriter {
|
|||
}
|
||||
|
||||
Point encodedPoint =
|
||||
new Point()
|
||||
.setInterval(new TimeInterval().setEndTime(DATETIME_FORMATTER.print(point.timestamp())))
|
||||
.setValue(encodedValue);
|
||||
new Point().setInterval(encodeTimeInterval(point.interval())).setValue(encodedValue);
|
||||
|
||||
List<LabelDescriptor> encodedLabels = descriptor.getLabels();
|
||||
// The MetricDescriptors returned by the GCM API have null fields rather than empty lists
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue