aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--api/src/main/java/io/opencensus/trace/AttributeValue.java107
-rw-r--r--api/src/test/java/io/opencensus/trace/AttributeValueTest.java82
-rw-r--r--contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java1
-rw-r--r--exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java1
-rw-r--r--exporters/trace/jaeger/src/main/java/io/opencensus/exporter/trace/jaeger/JaegerExporterHandler.java12
-rw-r--r--exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java12
-rw-r--r--exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java6
8 files changed, 218 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38ff5e79..463abda5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,6 @@
## Unreleased
+- Add `AttributeValueDouble` to `AttributeValue`.
+
## 0.16.0 - 2018-09-14
- Add APIs to register gRPC client and server views separately.
diff --git a/api/src/main/java/io/opencensus/trace/AttributeValue.java b/api/src/main/java/io/opencensus/trace/AttributeValue.java
index a8d4e1e3..efa9d1df 100644
--- a/api/src/main/java/io/opencensus/trace/AttributeValue.java
+++ b/api/src/main/java/io/opencensus/trace/AttributeValue.java
@@ -63,6 +63,17 @@ public abstract class AttributeValue {
return AttributeValueLong.create(longValue);
}
+ /**
+ * Returns an {@code AttributeValue} with a double value.
+ *
+ * @param doubleValue The new value.
+ * @return an {@code AttributeValue} with a double value.
+ * @since 0.17
+ */
+ public static AttributeValue doubleAttributeValue(double doubleValue) {
+ return AttributeValueDouble.create(doubleValue);
+ }
+
AttributeValue() {}
/**
@@ -78,13 +89,38 @@ public abstract class AttributeValue {
* io.opencensus.common.Functions} for some common functions for handling unknown types.
* @return the result of the function applied to the underlying value.
* @since 0.5
+ * @deprecated in favor of {@link #match(Function, Function, Function, Function, Function)}.
*/
+ @Deprecated
public abstract <T> T match(
Function<? super String, T> stringFunction,
Function<? super Boolean, T> booleanFunction,
Function<? super Long, T> longFunction,
Function<Object, T> defaultFunction);
+ /**
+ * Applies a function to the underlying value. The function that is called depends on the value's
+ * type, which can be {@code String}, {@code Long}, or {@code Boolean}.
+ *
+ * @param stringFunction the function that should be applied if the value has type {@code String}.
+ * @param longFunction the function that should be applied if the value has type {@code Long}.
+ * @param booleanFunction the function that should be applied if the value has type {@code
+ * Boolean}.
+ * @param doubleFunction the function that should be applied if the value has type {@code Double}.
+ * @param defaultFunction the function that should be applied if the value has a type that was
+ * added after this {@code match} method was added to the API. See {@link
+ * io.opencensus.common.Functions} for some common functions for handling unknown types.
+ * @return the result of the function applied to the underlying value.
+ * @since 0.17
+ */
+ @SuppressWarnings("InconsistentOverloads")
+ public abstract <T> T match(
+ Function<? super String, T> stringFunction,
+ Function<? super Boolean, T> booleanFunction,
+ Function<? super Long, T> longFunction,
+ Function<? super Double, T> doubleFunction,
+ Function<Object, T> defaultFunction);
+
@Immutable
@AutoValue
abstract static class AttributeValueString extends AttributeValue {
@@ -105,6 +141,16 @@ public abstract class AttributeValue {
return stringFunction.apply(getStringValue());
}
+ @Override
+ public final <T> T match(
+ Function<? super String, T> stringFunction,
+ Function<? super Boolean, T> booleanFunction,
+ Function<? super Long, T> longFunction,
+ Function<? super Double, T> doubleFunction,
+ Function<Object, T> defaultFunction) {
+ return stringFunction.apply(getStringValue());
+ }
+
abstract String getStringValue();
}
@@ -114,9 +160,9 @@ public abstract class AttributeValue {
AttributeValueBoolean() {}
- static AttributeValue create(Boolean stringValue) {
+ static AttributeValue create(Boolean booleanValue) {
return new AutoValue_AttributeValue_AttributeValueBoolean(
- Utils.checkNotNull(stringValue, "stringValue"));
+ Utils.checkNotNull(booleanValue, "booleanValue"));
}
@Override
@@ -128,6 +174,16 @@ public abstract class AttributeValue {
return booleanFunction.apply(getBooleanValue());
}
+ @Override
+ public final <T> T match(
+ Function<? super String, T> stringFunction,
+ Function<? super Boolean, T> booleanFunction,
+ Function<? super Long, T> longFunction,
+ Function<? super Double, T> doubleFunction,
+ Function<Object, T> defaultFunction) {
+ return booleanFunction.apply(getBooleanValue());
+ }
+
abstract Boolean getBooleanValue();
}
@@ -137,9 +193,9 @@ public abstract class AttributeValue {
AttributeValueLong() {}
- static AttributeValue create(Long stringValue) {
+ static AttributeValue create(Long longValue) {
return new AutoValue_AttributeValue_AttributeValueLong(
- Utils.checkNotNull(stringValue, "stringValue"));
+ Utils.checkNotNull(longValue, "longValue"));
}
@Override
@@ -151,6 +207,49 @@ public abstract class AttributeValue {
return longFunction.apply(getLongValue());
}
+ @Override
+ public final <T> T match(
+ Function<? super String, T> stringFunction,
+ Function<? super Boolean, T> booleanFunction,
+ Function<? super Long, T> longFunction,
+ Function<? super Double, T> doubleFunction,
+ Function<Object, T> defaultFunction) {
+ return longFunction.apply(getLongValue());
+ }
+
abstract Long getLongValue();
}
+
+ @Immutable
+ @AutoValue
+ abstract static class AttributeValueDouble extends AttributeValue {
+
+ AttributeValueDouble() {}
+
+ static AttributeValue create(Double doubleValue) {
+ return new AutoValue_AttributeValue_AttributeValueDouble(
+ Utils.checkNotNull(doubleValue, "doubleValue"));
+ }
+
+ @Override
+ public final <T> T match(
+ Function<? super String, T> stringFunction,
+ Function<? super Boolean, T> booleanFunction,
+ Function<? super Long, T> longFunction,
+ Function<Object, T> defaultFunction) {
+ return defaultFunction.apply(getDoubleValue());
+ }
+
+ @Override
+ public final <T> T match(
+ Function<? super String, T> stringFunction,
+ Function<? super Boolean, T> booleanFunction,
+ Function<? super Long, T> longFunction,
+ Function<? super Double, T> doubleFunction,
+ Function<Object, T> defaultFunction) {
+ return doubleFunction.apply(getDoubleValue());
+ }
+
+ abstract Double getDoubleValue();
+ }
}
diff --git a/api/src/test/java/io/opencensus/trace/AttributeValueTest.java b/api/src/test/java/io/opencensus/trace/AttributeValueTest.java
index e505c59b..05ef43c0 100644
--- a/api/src/test/java/io/opencensus/trace/AttributeValueTest.java
+++ b/api/src/test/java/io/opencensus/trace/AttributeValueTest.java
@@ -124,6 +124,83 @@ public class AttributeValueTest {
}
@Test
+ public void doubleAttributeValue() {
+ AttributeValue attribute = AttributeValue.doubleAttributeValue(1.23456);
+ attribute.match(
+ new Function<String, Object>() {
+ @Override
+ @Nullable
+ public Object apply(String stringValue) {
+ fail("Expected a Double");
+ return null;
+ }
+ },
+ new Function<Boolean, Object>() {
+ @Override
+ @Nullable
+ public Object apply(Boolean booleanValue) {
+ fail("Expected a Double");
+ return null;
+ }
+ },
+ new Function<Long, Object>() {
+ @Override
+ @Nullable
+ public Object apply(Long longValue) {
+ fail("Expected a Double");
+ return null;
+ }
+ },
+ new Function<Double, Object>() {
+ @Override
+ @Nullable
+ public Object apply(Double doubleValue) {
+ assertThat(doubleValue).isEqualTo(1.23456);
+ return null;
+ }
+ },
+ Functions.throwIllegalArgumentException());
+ }
+
+ @Test
+ public void doubleAttributeValue_DeprecatedMatchFunction() {
+ AttributeValue attribute = AttributeValue.doubleAttributeValue(1.23456);
+ attribute.match(
+ new Function<String, Object>() {
+ @Override
+ @Nullable
+ public Object apply(String stringValue) {
+ fail("Expected a Double");
+ return null;
+ }
+ },
+ new Function<Boolean, Object>() {
+ @Override
+ @Nullable
+ public Object apply(Boolean booleanValue) {
+ fail("Expected a Double");
+ return null;
+ }
+ },
+ new Function<Long, Object>() {
+ @Override
+ @Nullable
+ public Object apply(Long longValue) {
+ fail("Expected a Double");
+ return null;
+ }
+ },
+ new Function<Object, Object>() {
+ @Override
+ @Nullable
+ public Object apply(Object value) {
+ assertThat(value).isEqualTo(1.23456);
+ return null;
+ }
+ });
+ }
+
+ @Test
public void attributeValue_EqualsAndHashCode() {
EqualsTester tester = new EqualsTester();
tester.addEqualityGroup(
@@ -136,6 +213,9 @@ public class AttributeValueTest {
tester.addEqualityGroup(
AttributeValue.longAttributeValue(123456L), AttributeValue.longAttributeValue(123456L));
tester.addEqualityGroup(AttributeValue.longAttributeValue(1234567L));
+ tester.addEqualityGroup(
+ AttributeValue.doubleAttributeValue(1.23456), AttributeValue.doubleAttributeValue(1.23456));
+ tester.addEqualityGroup(AttributeValue.doubleAttributeValue(1.234567));
tester.testEquals();
}
@@ -147,5 +227,7 @@ public class AttributeValueTest {
assertThat(attribute.toString()).contains("true");
attribute = AttributeValue.longAttributeValue(123456L);
assertThat(attribute.toString()).contains("123456");
+ attribute = AttributeValue.doubleAttributeValue(1.23456);
+ assertThat(attribute.toString()).contains("1.23456");
}
}
diff --git a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java
index a5092416..0da29d73 100644
--- a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java
+++ b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java
@@ -667,6 +667,7 @@ final class TracezZPageHandler extends ZPageHandler {
returnToString,
returnToString,
returnToString,
+ returnToString,
Functions.</*@Nullable*/ String>returnNull());
}
diff --git a/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java b/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java
index fd329c4a..1bbb665a 100644
--- a/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java
+++ b/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java
@@ -127,6 +127,7 @@ final class InstanaExporterHandler extends SpanExporter.Handler {
returnToString,
returnToString,
returnToString,
+ returnToString,
Functions.</*@Nullable*/ String>returnNull());
}
diff --git a/exporters/trace/jaeger/src/main/java/io/opencensus/exporter/trace/jaeger/JaegerExporterHandler.java b/exporters/trace/jaeger/src/main/java/io/opencensus/exporter/trace/jaeger/JaegerExporterHandler.java
index 9ee7fab2..e0a16296 100644
--- a/exporters/trace/jaeger/src/main/java/io/opencensus/exporter/trace/jaeger/JaegerExporterHandler.java
+++ b/exporters/trace/jaeger/src/main/java/io/opencensus/exporter/trace/jaeger/JaegerExporterHandler.java
@@ -97,6 +97,17 @@ final class JaegerExporterHandler extends SpanExporter.Handler {
}
};
+ private static final Function<? super Double, Tag> doubleAttributeConverter =
+ new Function<Double, Tag>() {
+ @Override
+ public Tag apply(final Double value) {
+ final Tag tag = new Tag();
+ tag.setVType(TagType.DOUBLE);
+ tag.setVDouble(value);
+ return tag;
+ }
+ };
+
private static final Function<? super Long, Tag> longAttributeConverter =
new Function<Long, Tag>() {
@Override
@@ -281,6 +292,7 @@ final class JaegerExporterHandler extends SpanExporter.Handler {
stringAttributeConverter,
booleanAttributeConverter,
longAttributeConverter,
+ doubleAttributeConverter,
defaultAttributeConverter);
tag.setKey(entry.getKey());
tags.add(tag);
diff --git a/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java b/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java
index 16a880c2..9237ded5 100644
--- a/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java
+++ b/exporters/trace/stackdriver/src/main/java/io/opencensus/exporter/trace/stackdriver/StackdriverV2ExporterHandler.java
@@ -133,6 +133,17 @@ final class StackdriverV2ExporterHandler extends SpanExporter.Handler {
return attributeValueBuilder.build();
}
};
+ private static final Function<Double, /*@Nullable*/ AttributeValue> doubleAttributeValueFunction =
+ new Function<Double, /*@Nullable*/ AttributeValue>() {
+ @Override
+ public AttributeValue apply(Double doubleValue) {
+ Builder attributeValueBuilder = AttributeValue.newBuilder();
+ // TODO: set double value if Stackdriver Trace support it in the future.
+ attributeValueBuilder.setStringValue(
+ toTruncatableStringProto(String.valueOf(doubleValue)));
+ return attributeValueBuilder.build();
+ }
+ };
private final String projectId;
private final TraceServiceClient traceServiceClient;
@@ -426,6 +437,7 @@ final class StackdriverV2ExporterHandler extends SpanExporter.Handler {
stringAttributeValueFunction,
booleanAttributeValueFunction,
longAttributeValueFunction,
+ doubleAttributeValueFunction,
Functions.</*@Nullable*/ AttributeValue>returnNull());
}
diff --git a/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java b/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java
index 5a655f1e..711dcaa9 100644
--- a/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java
+++ b/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java
@@ -182,7 +182,11 @@ final class ZipkinExporterHandler extends SpanExporter.Handler {
private static String attributeValueToString(AttributeValue attributeValue) {
return attributeValue.match(
- returnToString, returnToString, returnToString, Functions.<String>returnConstant(""));
+ returnToString,
+ returnToString,
+ returnToString,
+ returnToString,
+ Functions.<String>returnConstant(""));
}
@Override