aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/build.gradle1
-rw-r--r--core/src/main/java/com/google/instrumentation/stats/MeasurementDescriptor.java67
-rw-r--r--core/src/test/java/com/google/instrumentation/stats/MeasurementDescriptorTest.java39
3 files changed, 64 insertions, 43 deletions
diff --git a/core/build.gradle b/core/build.gradle
index bc3849d4..9e9f4286 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -2,6 +2,7 @@ description = 'Instrumentation: Core'
dependencies {
compile project(':shared'),
+ libraries.auto_value,
libraries.grpc_context,
libraries.guava
diff --git a/core/src/main/java/com/google/instrumentation/stats/MeasurementDescriptor.java b/core/src/main/java/com/google/instrumentation/stats/MeasurementDescriptor.java
index d44c3637..19028e8e 100644
--- a/core/src/main/java/com/google/instrumentation/stats/MeasurementDescriptor.java
+++ b/core/src/main/java/com/google/instrumentation/stats/MeasurementDescriptor.java
@@ -13,6 +13,8 @@
package com.google.instrumentation.stats;
+import com.google.auto.value.AutoValue;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -22,47 +24,34 @@ import java.util.List;
*
* <p>Note: MeasurementDescriptor names are {@link String}s with enforced restrictions.
*/
-public final class MeasurementDescriptor {
+@AutoValue
+public abstract class MeasurementDescriptor {
public static final int MAX_LENGTH = StringUtil.MAX_LENGTH;
+ MeasurementDescriptor() {}
+
/**
* Constructs a new {@link MeasurementDescriptor}.
*/
public static MeasurementDescriptor create(
String name, String description, MeasurementUnit unit) {
- return new MeasurementDescriptor(name, description, unit);
+ return new AutoValue_MeasurementDescriptor(StringUtil.sanitize(name), description, unit);
}
/**
* Name of measurement, e.g. rpc_latency, cpu. Must be unique.
*/
- public String getName() {
- return name;
- }
+ public abstract String getName();
/**
* Detailed description of the measurement, used in documentation.
*/
- public String getDescription() {
- return description;
- }
+ public abstract String getDescription();
/**
* The units in which {@link MeasurementDescriptor} values are measured.
*/
- public MeasurementUnit getUnit() {
- return unit;
- }
-
- private final String name;
- private final String description;
- private final MeasurementUnit unit;
-
- private MeasurementDescriptor(String name, String description, MeasurementUnit unit) {
- this.name = StringUtil.sanitize(name);
- this.description = description;
- this.unit = unit;
- }
+ public abstract MeasurementUnit getUnit();
/**
* Fundamental units of measurement.
@@ -105,28 +94,34 @@ public final class MeasurementDescriptor {
* power10: -9
* numerator: SECS
*/
- public static final class MeasurementUnit {
+ @AutoValue
+ public abstract static class MeasurementUnit {
+
+ MeasurementUnit() {}
+
/**
* Constructs a {@link MeasurementUnit}.
*/
public static MeasurementUnit create(
int power10, List<BasicUnit> numerators, List<BasicUnit> denominators) {
- return new MeasurementUnit(power10, numerators, denominators);
+ return new AutoValue_MeasurementDescriptor_MeasurementUnit(
+ power10,
+ Collections.unmodifiableList(new ArrayList<BasicUnit>(numerators)),
+ Collections.unmodifiableList(new ArrayList<BasicUnit>(denominators)));
}
/**
* Constructs a {@link MeasurementUnit} without the optional {@code denominators}.
*/
public static MeasurementUnit create(int power10, List<BasicUnit> numerators) {
- return new MeasurementUnit(power10, numerators, new ArrayList<BasicUnit>());
+ return new AutoValue_MeasurementDescriptor_MeasurementUnit(
+ power10, numerators, Collections.<BasicUnit>emptyList());
}
/**
* Unit multiplier (i.e. 10^power10).
*/
- public int getPower10() {
- return power10;
- }
+ public abstract int getPower10();
/**
* Unit Numerators.
@@ -134,9 +129,7 @@ public final class MeasurementDescriptor {
* <p>Note: The returned list is unmodifiable and attempts to update it will throw an
* UnsupportedOperationException.
*/
- public List<BasicUnit> getNumerators() {
- return numerators;
- }
+ public abstract List<BasicUnit> getNumerators();
/**
* Unit Denominators.
@@ -144,18 +137,6 @@ public final class MeasurementDescriptor {
* <p>Note: The returned list is unmodifiable and attempts to update it will throw an
* UnsupportedOperationException.
*/
- public final List<BasicUnit> getDenominators() {
- return denominators;
- }
-
- private final int power10;
- private final List<BasicUnit> numerators;
- private final List<BasicUnit> denominators;
-
- private MeasurementUnit(int power10, List<BasicUnit> numerators, List<BasicUnit> denominators) {
- this.power10 = power10;
- this.numerators = Collections.unmodifiableList(new ArrayList<BasicUnit>(numerators));
- this.denominators = Collections.unmodifiableList(new ArrayList<BasicUnit>(denominators));
- }
+ public abstract List<BasicUnit> getDenominators();
}
}
diff --git a/core/src/test/java/com/google/instrumentation/stats/MeasurementDescriptorTest.java b/core/src/test/java/com/google/instrumentation/stats/MeasurementDescriptorTest.java
index 9fa16f37..e362b473 100644
--- a/core/src/test/java/com/google/instrumentation/stats/MeasurementDescriptorTest.java
+++ b/core/src/test/java/com/google/instrumentation/stats/MeasurementDescriptorTest.java
@@ -15,6 +15,7 @@ package com.google.instrumentation.stats;
import static com.google.common.truth.Truth.assertThat;
+import com.google.common.testing.EqualsTester;
import com.google.instrumentation.stats.MeasurementDescriptor.BasicUnit;
import com.google.instrumentation.stats.MeasurementDescriptor.MeasurementUnit;
import java.util.Arrays;
@@ -60,6 +61,44 @@ public final class MeasurementDescriptorTest {
assertThat(measurement.getUnit().getDenominators().get(0)).isEqualTo(BasicUnit.SECONDS);
}
+ @Test
+ public void testMeasurementUnitEquals() {
+ new EqualsTester()
+ .addEqualityGroup(
+ MeasurementUnit.create(
+ 1, Arrays.asList(BasicUnit.BYTES), Arrays.asList(BasicUnit.SECONDS)),
+ MeasurementUnit.create(
+ 1, Arrays.asList(BasicUnit.BYTES), Arrays.asList(BasicUnit.SECONDS)))
+ .addEqualityGroup(
+ MeasurementUnit.create(
+ 2, Arrays.asList(BasicUnit.BYTES), Arrays.asList(BasicUnit.SECONDS)))
+ .addEqualityGroup(MeasurementUnit.create(1, Arrays.asList(BasicUnit.BYTES)))
+ .testEquals();
+ }
+
+ @Test
+ public void testMeasurementDescriptorEquals() {
+ new EqualsTester()
+ .addEqualityGroup(
+ MeasurementDescriptor.create(
+ "name",
+ "description",
+ MeasurementUnit.create(
+ 1, Arrays.asList(BasicUnit.BITS), Arrays.asList(BasicUnit.SECONDS))),
+ MeasurementDescriptor.create(
+ "name",
+ "description",
+ MeasurementUnit.create(
+ 1, Arrays.asList(BasicUnit.BITS), Arrays.asList(BasicUnit.SECONDS))))
+ .addEqualityGroup(
+ MeasurementDescriptor.create(
+ "name",
+ "description 2",
+ MeasurementUnit.create(
+ 1, Arrays.asList(BasicUnit.BYTES), Arrays.asList(BasicUnit.SECONDS))))
+ .testEquals();
+ }
+
private static final MeasurementDescriptor makeSimpleDescriptor(String name) {
return MeasurementDescriptor.create(
name,