aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Song <songy23@users.noreply.github.com>2017-08-29 14:30:27 -0700
committerGitHub <noreply@github.com>2017-08-29 14:30:27 -0700
commit8e60e9cb2f3338a77c2dbb495d1525cacdb5f1e2 (patch)
treeb9f912fa8eb7e2917789c23a7774c391a2ab594d
parentb58a599882ddb0727d72bcc02c50f87d10b25ea3 (diff)
downloadopencensus-java-8e60e9cb2f3338a77c2dbb495d1525cacdb5f1e2.tar.gz
Add Duration.toMillis() method and tests. (#535)
-rw-r--r--core/src/main/java/io/opencensus/stats/View.java3
-rw-r--r--core_impl/src/main/java/io/opencensus/implcore/stats/MutableViewData.java9
-rw-r--r--core_impl/src/test/java/io/opencensus/implcore/stats/MutableViewDataTest.java12
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);
+ }
}