diff options
author | Yang Song <songy23@users.noreply.github.com> | 2017-08-29 14:30:27 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-29 14:30:27 -0700 |
commit | 8e60e9cb2f3338a77c2dbb495d1525cacdb5f1e2 (patch) | |
tree | b9f912fa8eb7e2917789c23a7774c391a2ab594d | |
parent | b58a599882ddb0727d72bcc02c50f87d10b25ea3 (diff) | |
download | opencensus-java-8e60e9cb2f3338a77c2dbb495d1525cacdb5f1e2.tar.gz |
Add Duration.toMillis() method and tests. (#535)
3 files changed, 24 insertions, 0 deletions
diff --git a/core/src/main/java/io/opencensus/stats/View.java b/core/src/main/java/io/opencensus/stats/View.java index 9dbebf53..d5ad4b09 100644 --- a/core/src/main/java/io/opencensus/stats/View.java +++ b/core/src/main/java/io/opencensus/stats/View.java @@ -206,6 +206,9 @@ public abstract class View { /** * Constructs an interval {@code Window} that has a finite explicit {@code Duration}. * + * <p>The {@code Duration} should be able to round to milliseconds. Currently interval window + * cannot have smaller {@code Duration} such as microseconds or nanoseconds. + * * @return an interval {@code Window}. */ public static Interval create(Duration duration) { diff --git a/core_impl/src/main/java/io/opencensus/implcore/stats/MutableViewData.java b/core_impl/src/main/java/io/opencensus/implcore/stats/MutableViewData.java index aeefd498..86db9b3a 100644 --- a/core_impl/src/main/java/io/opencensus/implcore/stats/MutableViewData.java +++ b/core_impl/src/main/java/io/opencensus/implcore/stats/MutableViewData.java @@ -20,6 +20,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import io.opencensus.common.Clock; +import io.opencensus.common.Duration; import io.opencensus.common.Function; import io.opencensus.common.Functions; import io.opencensus.common.Timestamp; @@ -68,6 +69,9 @@ import javax.annotation.Nullable; */ final class MutableViewData { + private static final long MILLIS_PER_SECOND = 1000L; + private static final long NANOS_PER_MILLI = 1000 * 1000; + private static final Function<TagString, TagValue> GET_STRING_TAG_VALUE = new Function<TagString, TagValue>() { @Override @@ -224,6 +228,11 @@ final class MutableViewData { return tagValues; } + // Returns the milliseconds representation of a Duration. + static long toMillis(Duration duration) { + return duration.getSeconds() * MILLIS_PER_SECOND + duration.getNanos() / NANOS_PER_MILLI; + } + /** * Create an empty {@link MutableAggregation} based on the given {@link Aggregation}. * diff --git a/core_impl/src/test/java/io/opencensus/implcore/stats/MutableViewDataTest.java b/core_impl/src/test/java/io/opencensus/implcore/stats/MutableViewDataTest.java index d4259ccd..ba7a8b39 100644 --- a/core_impl/src/test/java/io/opencensus/implcore/stats/MutableViewDataTest.java +++ b/core_impl/src/test/java/io/opencensus/implcore/stats/MutableViewDataTest.java @@ -17,8 +17,10 @@ package io.opencensus.implcore.stats; import static com.google.common.truth.Truth.assertThat; +import static io.opencensus.implcore.stats.MutableViewData.toMillis; import com.google.common.collect.ImmutableMap; +import io.opencensus.common.Duration; import io.opencensus.implcore.stats.MutableAggregation.MutableCount; import io.opencensus.implcore.stats.MutableAggregation.MutableHistogram; import io.opencensus.implcore.stats.MutableAggregation.MutableMean; @@ -130,4 +132,14 @@ public class MutableViewDataTest { StdDevData.create(0)) .inOrder(); } + + @Test + public void testDurationToMillis() { + assertThat(toMillis(Duration.create(0, 0))).isEqualTo(0); + assertThat(toMillis(Duration.create(0, 987000000))).isEqualTo(987); + assertThat(toMillis(Duration.create(3, 456000000))).isEqualTo(3456); + assertThat(toMillis(Duration.create(0, -1000000))).isEqualTo(-1); + assertThat(toMillis(Duration.create(-1, 0))).isEqualTo(-1000); + assertThat(toMillis(Duration.create(-3, -456000000))).isEqualTo(-3456); + } } |