diff options
| author | Yang Song <songy23@users.noreply.github.com> | 2017-06-30 15:40:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-06-30 15:40:06 -0700 |
| commit | 39ac27f3005d647c7825714ea5c5b5c0a5a84fda (patch) | |
| tree | b2900b6cc2536a6d8b3da8f2511d16dd59cb6646 | |
| parent | 344a5720df7ebc1a2075e68a74a7ef6fbfbf123b (diff) | |
| download | platform_external_opencensus-java-39ac27f3005d647c7825714ea5c5b5c0a5a84fda.tar.gz platform_external_opencensus-java-39ac27f3005d647c7825714ea5c5b5c0a5a84fda.tar.bz2 platform_external_opencensus-java-39ac27f3005d647c7825714ea5c5b5c0a5a84fda.zip | |
Refactor MeasurementDescriptor. (#396)
* Refactor MeasurementDescriptor.
* Remove Measure.Name class for now.
16 files changed, 439 insertions, 542 deletions
diff --git a/core/src/main/java/io/opencensus/stats/Measure.java b/core/src/main/java/io/opencensus/stats/Measure.java new file mode 100644 index 00000000..3f637c95 --- /dev/null +++ b/core/src/main/java/io/opencensus/stats/Measure.java @@ -0,0 +1,119 @@ +/* + * Copyright 2016, Google Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opencensus.stats; + +import com.google.auto.value.AutoValue; +import io.opencensus.common.Function; +import javax.annotation.concurrent.Immutable; + +/** + * Measure. + */ +@Immutable +public abstract class Measure { + + /** + * Applies the given match function to the underlying data type. + */ + public abstract <T> T match(Function<DoubleMeasure, T> p0, Function<LongMeasure, T> p1); + + /** + * Name of measure, as a {@code String}. + */ + public abstract String getName(); + + /** + * Detailed description of the measure, used in documentation. + */ + public abstract String getDescription(); + + /** + * The units in which {@link Measure} values are measured. + * + * <p>The grammar for a unit is as follows: + * Expression = Component { "." Component } { "/" Component } ; + * Component = [ PREFIX ] UNIT [ Annotation ] | Annotation | "1" ; + * Annotation = "{" NAME "}" ; + * For example, string “MBy{transmitted}/ms” stands for megabytes per milliseconds, and the + * annotation transmitted inside {} is just a comment of the unit. + */ + public abstract String getUnit(); + + // Prevents this class from being subclassed anywhere else. + private Measure() { + } + + @Immutable + @AutoValue + public abstract static class DoubleMeasure extends Measure { + + DoubleMeasure() { + } + + /** + * Constructs a new {@link DoubleMeasure}. + */ + public static DoubleMeasure create(String name, String description, String unit) { + // TODO(dpo): ensure that measure names are unique, and consider if there should be any + // restricitons on name (e.g. size, characters). + return new AutoValue_Measure_DoubleMeasure(name, description, unit); + } + + @Override + public <T> T match(Function<DoubleMeasure, T> p0, Function<LongMeasure, T> p1) { + return p0.apply(this); + } + + @Override + public abstract String getName(); + + @Override + public abstract String getDescription(); + + @Override + public abstract String getUnit(); + } + + @Immutable + @AutoValue + // TODO: determine whether we want to support LongMeasure in V0.1 + public abstract static class LongMeasure extends Measure { + + LongMeasure() { + } + + /** + * Constructs a new {@link LongMeasure}. + */ + public static LongMeasure create(String name, String description, String unit) { + // TODO(dpo): ensure that measure names are unique, and consider if there should be any + // restricitons on name (e.g. size, characters). + return new AutoValue_Measure_LongMeasure(name, description, unit); + } + + @Override + public <T> T match(Function<DoubleMeasure, T> p0, Function<LongMeasure, T> p1) { + return p1.apply(this); + } + + @Override + public abstract String getName(); + + @Override + public abstract String getDescription(); + + @Override + public abstract String getUnit(); + } +} diff --git a/core/src/main/java/io/opencensus/stats/MeasurementDescriptor.java b/core/src/main/java/io/opencensus/stats/MeasurementDescriptor.java deleted file mode 100644 index 99668697..00000000 --- a/core/src/main/java/io/opencensus/stats/MeasurementDescriptor.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright 2016, Google Inc. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.opencensus.stats; - -import com.google.auto.value.AutoValue; -import io.opencensus.internal.StringUtil; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.annotation.concurrent.Immutable; - -/** - * MeasurementDescriptor. - * - * <p>Note: MeasurementDescriptor names are {@link String}s with enforced restrictions. - */ -@Immutable -@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 create(Name.create(name), description, unit); - } - - /** - * Constructs a new {@link MeasurementDescriptor}. - */ - public static MeasurementDescriptor create( - Name name, String description, MeasurementUnit unit) { - return new AutoValue_MeasurementDescriptor(name, description, unit); - } - - /** - * Name of measurement, e.g. rpc_latency, cpu. Must be unique. - */ - public abstract MeasurementDescriptor.Name getMeasurementDescriptorName(); - - /** - * Name of measurement, as a {@code String}. - */ - public final String getName() { - return getMeasurementDescriptorName().asString(); - } - - /** - * Detailed description of the measurement, used in documentation. - */ - public abstract String getDescription(); - - /** - * The units in which {@link MeasurementDescriptor} values are measured. - */ - public abstract MeasurementUnit getUnit(); - - /** - * Fundamental units of measurement. - */ - public enum BasicUnit { - SCALAR, - BITS, - BYTES, - SECONDS, - CORES; - } - - /** - * The name of a {@code MeasurementDescriptor}. - */ - // This type should be used as the key when associating data with MeasurementDescriptors. - @Immutable - @AutoValue - public abstract static class Name { - - Name() {} - - /** - * Returns the name as a {@code String}. - * - * @return the name as a {@code String}. - */ - public abstract String asString(); - - /** - * Creates a {@code MeasurementDescriptor.Name} from a {@code String}. - * - * @param name the name {@code String}. - * @return a {@code MeasurementDescriptor.Name} with the given name {@code String}. - */ - public static Name create(String name) { - return new AutoValue_MeasurementDescriptor_Name(StringUtil.sanitize(name)); - } - } - - /** - * MeasurementUnit lets you build compound units of the form - * 10^n * (A * B * ...) / (X * Y * ...), - * where the elements in the numerator and denominator are all BasicUnits. A - * MeasurementUnit must have at least one BasicUnit in its numerator. - * - * <p>To specify multiplication in the numerator or denominator, simply specify - * multiple numerator or denominator fields. For example: - * - * <p>- byte-seconds (i.e. bytes * seconds): - * numerator: BYTES - * numerator: SECS - * - * <p>- events/sec^2 (i.e. rate of change of events/sec): - * numerator: SCALAR - * denominator: SECS - * denominator: SECS - * - * <p>To specify multiples (in power of 10) of units, specify a non-zero power10 - * value, for example: - * - * <p>- MB/s (i.e. megabytes / s): - * power10: 6 - * numerator: BYTES - * denominator: SECS - * - * <p>- nanoseconds - * power10: -9 - * numerator: SECS - */ - @Immutable - @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 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 AutoValue_MeasurementDescriptor_MeasurementUnit( - power10, numerators, Collections.<BasicUnit>emptyList()); - } - - /** - * Unit multiplier (i.e. 10^power10). - */ - public abstract int getPower10(); - - /** - * Unit Numerators. - * - * <p>Note: The returned list is unmodifiable and attempts to update it will throw an - * UnsupportedOperationException. - */ - public abstract List<BasicUnit> getNumerators(); - - /** - * Unit Denominators. - * - * <p>Note: The returned list is unmodifiable and attempts to update it will throw an - * UnsupportedOperationException. - */ - public abstract List<BasicUnit> getDenominators(); - } -} diff --git a/core/src/main/java/io/opencensus/stats/MeasurementMap.java b/core/src/main/java/io/opencensus/stats/MeasurementMap.java index a961bf17..6694a933 100644 --- a/core/src/main/java/io/opencensus/stats/MeasurementMap.java +++ b/core/src/main/java/io/opencensus/stats/MeasurementMap.java @@ -18,34 +18,34 @@ import java.util.Iterator; import java.util.NoSuchElementException; /** - * A map from {@link MeasurementDescriptor}'s to measured values. + * A map from {@link Measure}'s to measured values. */ public final class MeasurementMap implements Iterable<MeasurementValue> { /** - * Constructs a {@link MeasurementMap} from the given {@link MeasurementDescriptor} + * Constructs a {@link MeasurementMap} from the given {@link Measure} * and associated value. */ - public static MeasurementMap of(MeasurementDescriptor measurement, double value) { - return builder().put(measurement, value).build(); + public static MeasurementMap of(Measure measure, double value) { + return builder().put(measure, value).build(); } /** - * Constructs a {@link MeasurementMap} from the given {@link MeasurementDescriptor}'s + * Constructs a {@link MeasurementMap} from the given {@link Measure}'s * and associated values. */ - public static MeasurementMap of(MeasurementDescriptor measurement1, double value1, - MeasurementDescriptor measurement2, double value2) { - return builder().put(measurement1, value1).put(measurement2, value2).build(); + public static MeasurementMap of(Measure measure1, double value1, + Measure measure2, double value2) { + return builder().put(measure1, value1).put(measure2, value2).build(); } /** - * Constructs a {@link MeasurementMap} from the given {@link MeasurementDescriptor}'s + * Constructs a {@link MeasurementMap} from the given {@link Measure}'s * and associated values. */ - public static MeasurementMap of(MeasurementDescriptor measurement1, double value1, - MeasurementDescriptor measurement2, double value2, - MeasurementDescriptor measurement3, double value3) { - return builder().put(measurement1, value1).put(measurement2, value2).put(measurement3, value3) + public static MeasurementMap of(Measure measure1, double value1, + Measure measure2, double value2, + Measure measure3, double value3) { + return builder().put(measure1, value1).put(measure2, value2).put(measure3, value3) .build(); } @@ -57,14 +57,14 @@ public final class MeasurementMap implements Iterable<MeasurementValue> { } /** - * Returns the number of measurements in this {@link MeasurementMap}. + * Returns the number of measures in this {@link MeasurementMap}. */ public int size() { - return measurements.size(); + return measures.size(); } /** - * Returns an {@link Iterator} over the measurement/value mappings in this {@link MeasurementMap}. + * Returns an {@link Iterator} over the measure/value mappings in this {@link MeasurementMap}. * The {@code Iterator} does not support {@link Iterator#remove()}. */ @Override @@ -72,10 +72,10 @@ public final class MeasurementMap implements Iterable<MeasurementValue> { return new MeasurementMapIterator(); } - private final ArrayList<MeasurementValue> measurements; + private final ArrayList<MeasurementValue> measures; - private MeasurementMap(ArrayList<MeasurementValue> measurements) { - this.measurements = measurements; + private MeasurementMap(ArrayList<MeasurementValue> measures) { + this.measures = measures; } /** @@ -83,45 +83,45 @@ public final class MeasurementMap implements Iterable<MeasurementValue> { */ public static class Builder { /** - * Associates the {@link MeasurementDescriptor} with the given value. Subsequent updates to the - * same {@link MeasurementDescriptor} are ignored. + * Associates the {@link Measure} with the given value. Subsequent updates to the + * same {@link Measure} are ignored. * - * @param measurement the {@link MeasurementDescriptor} - * @param value the value to be associated with {@code measurement} + * @param measure the {@link Measure} + * @param value the value to be associated with {@code measure} * @return this */ - public Builder put(MeasurementDescriptor measurement, double value) { - measurements.add(MeasurementValue.create(measurement, value)); + public Builder put(Measure measure, double value) { + measures.add(MeasurementValue.create(measure, value)); return this; } /** - * Constructs a {@link MeasurementMap} from the current measurements. + * Constructs a {@link MeasurementMap} from the current measures. */ public MeasurementMap build() { - // Note: this makes adding measurements quadratic but is fastest for the sizes of + // Note: this makes adding measures quadratic but is fastest for the sizes of // MeasurementMaps that we should see. We may want to go to a strategy of sort/eliminate // for larger MeasurementMaps. - for (int i = 0; i < measurements.size(); i++) { - MeasurementDescriptor.Name current = - measurements.get(i).getMeasurement().getMeasurementDescriptorName(); - for (int j = i + 1; j < measurements.size(); j++) { - if (current.equals(measurements.get(j).getMeasurement().getMeasurementDescriptorName())) { - measurements.remove(j); + for (int i = 0; i < measures.size(); i++) { + String current = + measures.get(i).getMeasurement().getName(); + for (int j = i + 1; j < measures.size(); j++) { + if (current.equals(measures.get(j).getMeasurement().getName())) { + measures.remove(j); j--; } } } - return new MeasurementMap(measurements); + return new MeasurementMap(measures); } - private final ArrayList<MeasurementValue> measurements = new ArrayList<MeasurementValue>(); + private final ArrayList<MeasurementValue> measures = new ArrayList<MeasurementValue>(); private Builder() { } } - // Provides an unmodifiable Iterator over this instance's measurements. + // Provides an unmodifiable Iterator over this instance's measures. private final class MeasurementMapIterator implements Iterator<MeasurementValue> { @Override public boolean hasNext() { @@ -130,10 +130,10 @@ public final class MeasurementMap implements Iterable<MeasurementValue> { @Override public MeasurementValue next() { - if (position >= measurements.size()) { + if (position >= measures.size()) { throw new NoSuchElementException(); } - return measurements.get(position++); + return measures.get(position++); } @Override @@ -141,7 +141,7 @@ public final class MeasurementMap implements Iterable<MeasurementValue> { throw new UnsupportedOperationException(); } - private final int length = measurements.size(); + private final int length = measures.size(); private int position = 0; } } diff --git a/core/src/main/java/io/opencensus/stats/MeasurementValue.java b/core/src/main/java/io/opencensus/stats/MeasurementValue.java index 6c9cc3a6..efee6f39 100644 --- a/core/src/main/java/io/opencensus/stats/MeasurementValue.java +++ b/core/src/main/java/io/opencensus/stats/MeasurementValue.java @@ -21,14 +21,14 @@ public class MeasurementValue { /** * Constructs a measured value. */ - public static MeasurementValue create(MeasurementDescriptor name, double value) { + public static MeasurementValue create(Measure name, double value) { return new MeasurementValue(name, value); } /** - * Extracts the measured {@link MeasurementDescriptor}. + * Extracts the measured {@link Measure}. */ - public MeasurementDescriptor getMeasurement() { + public Measure getMeasurement() { return name; } @@ -39,10 +39,10 @@ public class MeasurementValue { return value; } - private final MeasurementDescriptor name; + private final Measure name; private final double value; - private MeasurementValue(MeasurementDescriptor name, double value) { + private MeasurementValue(Measure name, double value) { this.name = name; this.value = value; } diff --git a/core/src/main/java/io/opencensus/stats/RpcMeasurementConstants.java b/core/src/main/java/io/opencensus/stats/RpcMeasurementConstants.java index c015e17c..415529a1 100644 --- a/core/src/main/java/io/opencensus/stats/RpcMeasurementConstants.java +++ b/core/src/main/java/io/opencensus/stats/RpcMeasurementConstants.java @@ -13,14 +13,10 @@ package io.opencensus.stats; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; -import java.util.Arrays; -import java.util.List; - /** * Constants for collecting rpc stats. */ +// TODO(songya): change *_COUNT constants to LongMeasure if it's supported in v0.1. public final class RpcMeasurementConstants { // Rpc tag keys. @@ -28,125 +24,125 @@ public final class RpcMeasurementConstants { public static final TagKey RPC_CLIENT_METHOD = TagKey.create("method"); public static final TagKey RPC_SERVER_METHOD = TagKey.create("method"); - // Constants used to define the following MeasurementDescriptors. - private static final List<BasicUnit> bytes = Arrays.asList(BasicUnit.BYTES); - private static final List<BasicUnit> scalar = Arrays.asList(BasicUnit.SCALAR); - private static final List<BasicUnit> seconds = Arrays.asList(BasicUnit.SECONDS); + // Constants used to define the following Measures. + private static final String BYTE = "By"; + private static final String COUNT = "1"; + private static final String MILLISECOND = "ms"; - // RPC client {@link MeasurementDescriptor}s. - public static final MeasurementDescriptor RPC_CLIENT_ERROR_COUNT = - MeasurementDescriptor.create( + // RPC client Measures. + public static final Measure RPC_CLIENT_ERROR_COUNT = + Measure.DoubleMeasure.create( "grpc.io/client/error_count", "RPC Errors", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_CLIENT_REQUEST_BYTES = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_CLIENT_REQUEST_BYTES = + Measure.DoubleMeasure.create( "grpc.io/client/request_bytes", "Request bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_CLIENT_RESPONSE_BYTES = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_CLIENT_RESPONSE_BYTES = + Measure.DoubleMeasure.create( "grpc.io/client/response_bytes", "Response bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_CLIENT_ROUNDTRIP_LATENCY = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_CLIENT_ROUNDTRIP_LATENCY = + Measure.DoubleMeasure.create( "grpc.io/client/roundtrip_latency", "RPC roundtrip latency msec", - MeasurementUnit.create(-3, seconds)); - public static final MeasurementDescriptor RPC_CLIENT_SERVER_ELAPSED_TIME = - MeasurementDescriptor.create( + MILLISECOND); + public static final Measure RPC_CLIENT_SERVER_ELAPSED_TIME = + Measure.DoubleMeasure.create( "grpc.io/client/server_elapsed_time", "Server elapsed time in msecs", - MeasurementUnit.create(-3, seconds)); - public static final MeasurementDescriptor RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES = - MeasurementDescriptor.create( + MILLISECOND); + public static final Measure RPC_CLIENT_UNCOMPRESSED_REQUEST_BYTES = + Measure.DoubleMeasure.create( "grpc.io/client/uncompressed_request_bytes", "Uncompressed Request bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_CLIENT_UNCOMPRESSED_RESPONSE_BYTES = + Measure.DoubleMeasure.create( "grpc.io/client/uncompressed_response_bytes", "Uncompressed Response bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_CLIENT_STARTED_COUNT = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_CLIENT_STARTED_COUNT = + Measure.DoubleMeasure.create( "grpc.io/client/started_count", "Number of client RPCs (streams) started", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_CLIENT_FINISHED_COUNT = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_CLIENT_FINISHED_COUNT = + Measure.DoubleMeasure.create( "grpc.io/client/finished_count", "Number of client RPCs (streams) finished", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_CLIENT_REQUEST_COUNT = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_CLIENT_REQUEST_COUNT = + Measure.DoubleMeasure.create( "grpc.io/client/request_count", "Number of client RPC request messages", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_CLIENT_RESPONSE_COUNT = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_CLIENT_RESPONSE_COUNT = + Measure.DoubleMeasure.create( "grpc.io/client/response_count", "Number of client RPC response messages", - MeasurementUnit.create(0, scalar)); + COUNT); - // RPC server {@link MeasurementDescriptor}s. - public static final MeasurementDescriptor RPC_SERVER_ERROR_COUNT = - MeasurementDescriptor.create( + // RPC server Measures. + public static final Measure RPC_SERVER_ERROR_COUNT = + Measure.DoubleMeasure.create( "grpc.io/server/error_count", "RPC Errors", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_SERVER_REQUEST_BYTES = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_SERVER_REQUEST_BYTES = + Measure.DoubleMeasure.create( "grpc.io/server/request_bytes", "Request bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_SERVER_RESPONSE_BYTES = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_SERVER_RESPONSE_BYTES = + Measure.DoubleMeasure.create( "grpc.io/server/response_bytes", "Response bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_SERVER_SERVER_ELAPSED_TIME = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_SERVER_SERVER_ELAPSED_TIME = + Measure.DoubleMeasure.create( "grpc.io/server/server_elapsed_time", "Server elapsed time in msecs", - MeasurementUnit.create(-3, seconds)); - public static final MeasurementDescriptor RPC_SERVER_SERVER_LATENCY = - MeasurementDescriptor.create( + MILLISECOND); + public static final Measure RPC_SERVER_SERVER_LATENCY = + Measure.DoubleMeasure.create( "grpc.io/server/server_latency", "Latency in msecs", - MeasurementUnit.create(-3, seconds)); - public static final MeasurementDescriptor RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES = - MeasurementDescriptor.create( + MILLISECOND); + public static final Measure RPC_SERVER_UNCOMPRESSED_REQUEST_BYTES = + Measure.DoubleMeasure.create( "grpc.io/server/uncompressed_request_bytes", "Uncompressed Request bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_SERVER_UNCOMPRESSED_RESPONSE_BYTES = + Measure.DoubleMeasure.create( "grpc.io/server/uncompressed_response_bytes", "Uncompressed Response bytes", - MeasurementUnit.create(0, bytes)); - public static final MeasurementDescriptor RPC_SERVER_STARTED_COUNT = - MeasurementDescriptor.create( + BYTE); + public static final Measure RPC_SERVER_STARTED_COUNT = + Measure.DoubleMeasure.create( "grpc.io/server/started_count", "Number of server RPCs (streams) started", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_SERVER_FINISHED_COUNT = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_SERVER_FINISHED_COUNT = + Measure.DoubleMeasure.create( "grpc.io/server/finished_count", "Number of server RPCs (streams) finished", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_SERVER_REQUEST_COUNT = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_SERVER_REQUEST_COUNT = + Measure.DoubleMeasure.create( "grpc.io/server/request_count", "Number of server RPC request messages", - MeasurementUnit.create(0, scalar)); - public static final MeasurementDescriptor RPC_SERVER_RESPONSE_COUNT = - MeasurementDescriptor.create( + COUNT); + public static final Measure RPC_SERVER_RESPONSE_COUNT = + Measure.DoubleMeasure.create( "grpc.io/server/response_count", "Number of server RPC response messages", - MeasurementUnit.create(0, scalar)); + COUNT); // Visible for testing. RpcMeasurementConstants() { diff --git a/core/src/main/java/io/opencensus/stats/ViewDescriptor.java b/core/src/main/java/io/opencensus/stats/ViewDescriptor.java index bef15cc5..22859ce6 100644 --- a/core/src/main/java/io/opencensus/stats/ViewDescriptor.java +++ b/core/src/main/java/io/opencensus/stats/ViewDescriptor.java @@ -46,10 +46,10 @@ public abstract class ViewDescriptor { /** * Measurement type of this view. */ - public abstract MeasurementDescriptor getMeasurementDescriptor(); + public abstract Measure getMeasure(); /** - * Tag keys to match with the associated {@link MeasurementDescriptor}. If no keys are specified, + * Tag keys to match with the associated {@link Measure}. If no keys are specified, * then all stats are recorded. Keys must be unique. * * <p>Note: The returned list is unmodifiable, attempts to update it will throw an @@ -104,13 +104,13 @@ public abstract class ViewDescriptor { public static DistributionViewDescriptor create( String name, String description, - MeasurementDescriptor measurementDescriptor, + Measure measure, DistributionAggregationDescriptor distributionAggregationDescriptor, List<TagKey> tagKeys) { return create( Name.create(name), description, - measurementDescriptor, + measure, distributionAggregationDescriptor, tagKeys); } @@ -121,13 +121,13 @@ public abstract class ViewDescriptor { public static DistributionViewDescriptor create( Name name, String description, - MeasurementDescriptor measurementDescriptor, + Measure measure, DistributionAggregationDescriptor distributionAggregationDescriptor, List<TagKey> tagKeys) { return new AutoValue_ViewDescriptor_DistributionViewDescriptor( name, description, - measurementDescriptor, + measure, Collections.unmodifiableList(new ArrayList<TagKey>(tagKeys)), distributionAggregationDescriptor); } @@ -158,13 +158,13 @@ public abstract class ViewDescriptor { public static IntervalViewDescriptor create( String name, String description, - MeasurementDescriptor measurementDescriptor, + Measure measure, IntervalAggregationDescriptor intervalAggregationDescriptor, List<TagKey> tagKeys) { return create( Name.create(name), description, - measurementDescriptor, + measure, intervalAggregationDescriptor, tagKeys); } @@ -175,13 +175,13 @@ public abstract class ViewDescriptor { public static IntervalViewDescriptor create( Name name, String description, - MeasurementDescriptor measurementDescriptor, + Measure measure, IntervalAggregationDescriptor intervalAggregationDescriptor, List<TagKey> tagKeys) { return new AutoValue_ViewDescriptor_IntervalViewDescriptor( name, description, - measurementDescriptor, + measure, Collections.unmodifiableList(new ArrayList<TagKey>(tagKeys)), intervalAggregationDescriptor); } diff --git a/core/src/test/java/io/opencensus/stats/MeasureTest.java b/core/src/test/java/io/opencensus/stats/MeasureTest.java new file mode 100644 index 00000000..aff4c873 --- /dev/null +++ b/core/src/test/java/io/opencensus/stats/MeasureTest.java @@ -0,0 +1,116 @@ +/* + * Copyright 2016, Google Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opencensus.stats; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.testing.EqualsTester; +import io.opencensus.internal.StringUtil; +import java.util.Arrays; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Tests for {@link Measure} + */ +@RunWith(JUnit4.class) +public final class MeasureTest { + + @Ignore // TODO: determine whether there are any restrictions on measure names. + @Test + public void testNameMaxLength() { + char[] name = new char[StringUtil.MAX_LENGTH]; + char[] truncName = new char[StringUtil.MAX_LENGTH + 10]; + Arrays.fill(name, 'n'); + Arrays.fill(truncName, 'n'); + assertThat(makeSimpleMeasure(new String(name)).getName()) + .isEqualTo(makeSimpleMeasure(new String(truncName)).getName()); + } + + @Ignore // TODO: determine whether there are any restrictions on measure names. + @Test + public void testNameBadChar() { + assertThat(makeSimpleMeasure("\2ab\3cd").getName()) + .isEqualTo(StringUtil.UNPRINTABLE_CHAR_SUBSTITUTE + "ab" + + StringUtil.UNPRINTABLE_CHAR_SUBSTITUTE + "cd"); + } + + @Test + public void testDoubleMeasureComponents() { + Measure measurement = Measure.DoubleMeasure.create( + "Foo", + "The description of Foo", + "Mbit/s"); + assertThat(measurement.getName()).isEqualTo("Foo"); + assertThat(measurement.getDescription()).isEqualTo("The description of Foo"); + assertThat(measurement.getUnit()).isEqualTo("Mbit/s"); + } + + @Test + public void testLongMeasureComponents() { + Measure measurement = Measure.LongMeasure.create( + "Bar", + "The description of Bar", + "1"); + assertThat(measurement.getName()).isEqualTo("Bar"); + assertThat(measurement.getDescription()).isEqualTo("The description of Bar"); + assertThat(measurement.getUnit()).isEqualTo("1"); + } + + @Test + public void testDoubleMeasureEquals() { + new EqualsTester() + .addEqualityGroup( + Measure.DoubleMeasure.create( + "name", + "description", + "bit/s"), + Measure.DoubleMeasure.create( + "name", + "description", + "bit/s")) + .addEqualityGroup( + Measure.DoubleMeasure.create( + "name", + "description 2", + "bit/s")) + .testEquals(); + } + + @Test + public void testLongMeasureEquals() { + new EqualsTester() + .addEqualityGroup( + Measure.LongMeasure.create( + "name", + "description", + "bit/s"), + Measure.LongMeasure.create( + "name", + "description", + "bit/s")) + .addEqualityGroup( + Measure.LongMeasure.create( + "name", + "description 2", + "bit/s")) + .testEquals(); + } + + private static final Measure makeSimpleMeasure(String name) { + return Measure.DoubleMeasure.create(name, name + " description", "1"); + } +} diff --git a/core/src/test/java/io/opencensus/stats/MeasurementDescriptorTest.java b/core/src/test/java/io/opencensus/stats/MeasurementDescriptorTest.java deleted file mode 100644 index 47b6bc57..00000000 --- a/core/src/test/java/io/opencensus/stats/MeasurementDescriptorTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2016, Google Inc. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.opencensus.stats; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.common.testing.EqualsTester; -import io.opencensus.internal.StringUtil; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; -import java.util.Arrays; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** - * Tests for {@link MeasurementDescriptor} - */ -@RunWith(JUnit4.class) -public final class MeasurementDescriptorTest { - @Test - public void testNameMaxLength() { - char[] name = new char[MeasurementDescriptor.MAX_LENGTH]; - char[] truncName = new char[MeasurementDescriptor.MAX_LENGTH + 10]; - Arrays.fill(name, 'n'); - Arrays.fill(truncName, 'n'); - assertThat(makeSimpleDescriptor(new String(name)).getName()) - .isEqualTo(makeSimpleDescriptor(new String(truncName)).getName()); - } - - @Test - public void testNameBadChar() { - assertThat(makeSimpleDescriptor("\2ab\3cd").getName()) - .isEqualTo(StringUtil.UNPRINTABLE_CHAR_SUBSTITUTE + "ab" - + StringUtil.UNPRINTABLE_CHAR_SUBSTITUTE + "cd"); - } - - @Test - public void testComponents() { - MeasurementDescriptor measurement = MeasurementDescriptor.create( - "Foo", - "The description of Foo", - MeasurementUnit.create( - 6, Arrays.asList(BasicUnit.BITS), Arrays.asList(BasicUnit.SECONDS))); - assertThat(measurement.getName()).isEqualTo("Foo"); - assertThat(measurement.getMeasurementDescriptorName()) - .isEqualTo(MeasurementDescriptor.Name.create("Foo")); - assertThat(measurement.getDescription()).isEqualTo("The description of Foo"); - assertThat(measurement.getUnit().getPower10()).isEqualTo(6); - assertThat(measurement.getUnit().getNumerators()).hasSize(1); - assertThat(measurement.getUnit().getNumerators().get(0)).isEqualTo(BasicUnit.BITS); - assertThat(measurement.getUnit().getDenominators()).hasSize(1); - assertThat(measurement.getUnit().getDenominators().get(0)).isEqualTo(BasicUnit.SECONDS); - } - - @Test - public void testMeasurementDescriptorNameSanitization() { - assertThat(MeasurementDescriptor.Name.create("md\1").asString()) - .isEqualTo("md" + StringUtil.UNPRINTABLE_CHAR_SUBSTITUTE); - } - - @Test - public void testMeasurementDescriptorNameEquals() { - new EqualsTester() - .addEqualityGroup( - MeasurementDescriptor.Name.create("md1"), MeasurementDescriptor.Name.create("md1")) - .addEqualityGroup(MeasurementDescriptor.Name.create("md2")) - .testEquals(); - } - - @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( - MeasurementDescriptor.Name.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, - name + " description", - MeasurementUnit.create(1, Arrays.asList(BasicUnit.SCALAR))); - } -} diff --git a/core/src/test/java/io/opencensus/stats/MeasurementMapTest.java b/core/src/test/java/io/opencensus/stats/MeasurementMapTest.java index 0f9f52f1..ad5af9ba 100644 --- a/core/src/test/java/io/opencensus/stats/MeasurementMapTest.java +++ b/core/src/test/java/io/opencensus/stats/MeasurementMapTest.java @@ -16,10 +16,7 @@ package io.opencensus.stats; import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableList; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; import java.util.ArrayList; -import java.util.Arrays; import java.util.Iterator; import org.junit.Test; import org.junit.runner.RunWith; @@ -68,14 +65,14 @@ public class MeasurementMapTest { ArrayList<MeasurementValue> expected = new ArrayList<MeasurementValue>(10); MeasurementMap.Builder builder = MeasurementMap.builder(); for (int i = 1; i <= 10; i++) { - expected.add(MeasurementValue.create(makeSimpleMeasurement("m" + i), i * 11.1)); - builder.put(makeSimpleMeasurement("m" + i), i * 11.1); + expected.add(MeasurementValue.create(makeSimpleMeasure("m" + i), i * 11.1)); + builder.put(makeSimpleMeasure("m" + i), i * 11.1); assertEquals(expected, builder.build()); } } @Test - public void testDuplicateMeasurementDescriptors() { + public void testDuplicateMeasures() { assertEquals(MeasurementMap.of(M1, 1.0, M1, 1.0), MeasurementMap.of(M1, 1.0)); assertEquals(MeasurementMap.of(M1, 1.0, M1, 2.0), MeasurementMap.of(M1, 1.0)); assertEquals(MeasurementMap.of(M1, 1.0, M1, 2.0, M1, 3.0), MeasurementMap.of(M1, 1.0)); @@ -87,20 +84,18 @@ public class MeasurementMapTest { public void testSize() { MeasurementMap.Builder builder = MeasurementMap.builder(); for (int i = 1; i <= 10; i++) { - builder.put(makeSimpleMeasurement("m" + i), i * 11.1); + builder.put(makeSimpleMeasure("m" + i), i * 11.1); assertThat(builder.build()).hasSize(i); } } - private static final MeasurementUnit simpleMeasurementUnit = - MeasurementUnit.create(1, Arrays.asList(BasicUnit.SCALAR)); - private static final MeasurementDescriptor M1 = makeSimpleMeasurement("m1"); - private static final MeasurementDescriptor M2 = makeSimpleMeasurement("m2"); - private static final MeasurementDescriptor M3 = makeSimpleMeasurement("m3"); + private static final Measure M1 = makeSimpleMeasure("m1"); + private static final Measure M2 = makeSimpleMeasure("m2"); + private static final Measure M3 = makeSimpleMeasure("m3"); - private static final MeasurementDescriptor makeSimpleMeasurement(String measurement) { - return MeasurementDescriptor.create( - measurement, measurement + " description", simpleMeasurementUnit); + private static final Measure makeSimpleMeasure(String measure) { + return Measure.DoubleMeasure.create( + measure, measure + " description", "1"); } private static void assertEquals( @@ -110,8 +105,8 @@ public class MeasurementMapTest { while (e.hasNext() && a.hasNext()) { MeasurementValue expectedMeasurement = e.next(); MeasurementValue actualMeasurement = a.next(); - assertThat(expectedMeasurement.getMeasurement().getMeasurementDescriptorName()) - .isEqualTo(actualMeasurement.getMeasurement().getMeasurementDescriptorName()); + assertThat(expectedMeasurement.getMeasurement().getName()) + .isEqualTo(actualMeasurement.getMeasurement().getName()); assertThat(expectedMeasurement.getValue()) .isWithin(0.00000001).of(actualMeasurement.getValue()); } diff --git a/core/src/test/java/io/opencensus/stats/ViewDescriptorTest.java b/core/src/test/java/io/opencensus/stats/ViewDescriptorTest.java index c0ee7143..e8c5cd80 100644 --- a/core/src/test/java/io/opencensus/stats/ViewDescriptorTest.java +++ b/core/src/test/java/io/opencensus/stats/ViewDescriptorTest.java @@ -19,8 +19,6 @@ import static org.junit.Assert.assertTrue; import com.google.common.testing.EqualsTester; import io.opencensus.common.Duration; import io.opencensus.common.Function; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; import io.opencensus.stats.ViewDescriptor.DistributionViewDescriptor; import io.opencensus.stats.ViewDescriptor.IntervalViewDescriptor; import java.util.Arrays; @@ -38,13 +36,13 @@ public final class ViewDescriptorTest { public void testDistributionViewDescriptor() { DistributionAggregationDescriptor dAggrDescriptor = DistributionAggregationDescriptor.create(); final ViewDescriptor viewDescriptor = DistributionViewDescriptor.create( - name, description, measurementDescriptor, dAggrDescriptor, keys); + name, description, measure, dAggrDescriptor, keys); assertThat(viewDescriptor.getViewDescriptorName()).isEqualTo(name); assertThat(viewDescriptor.getName()).isEqualTo(name.asString()); assertThat(viewDescriptor.getDescription()).isEqualTo(description); - assertThat(viewDescriptor.getMeasurementDescriptor().getMeasurementDescriptorName()) - .isEqualTo(measurementDescriptor.getMeasurementDescriptorName()); + assertThat(viewDescriptor.getMeasure().getName()) + .isEqualTo(measure.getName()); assertThat(viewDescriptor.getTagKeys()).hasSize(2); assertThat(viewDescriptor.getTagKeys().get(0).toString()).isEqualTo("foo"); assertThat(viewDescriptor.getTagKeys().get(1).toString()).isEqualTo("bar"); @@ -66,13 +64,13 @@ public final class ViewDescriptorTest { IntervalAggregationDescriptor iAggrDescriptor = IntervalAggregationDescriptor.create( Arrays.asList(Duration.fromMillis(1), Duration.fromMillis(22), Duration.fromMillis(333))); final ViewDescriptor viewDescriptor = IntervalViewDescriptor.create( - name, description, measurementDescriptor, iAggrDescriptor, keys); + name, description, measure, iAggrDescriptor, keys); assertThat(viewDescriptor.getViewDescriptorName()).isEqualTo(name); assertThat(viewDescriptor.getName()).isEqualTo(name.asString()); assertThat(viewDescriptor.getDescription()).isEqualTo(description); - assertThat(viewDescriptor.getMeasurementDescriptor().getMeasurementDescriptorName()) - .isEqualTo(measurementDescriptor.getMeasurementDescriptorName()); + assertThat(viewDescriptor.getMeasure().getName()) + .isEqualTo(measure.getName()); assertThat(viewDescriptor.getTagKeys()).hasSize(2); assertThat(viewDescriptor.getTagKeys().get(0).toString()).isEqualTo("foo"); assertThat(viewDescriptor.getTagKeys().get(1).toString()).isEqualTo("bar"); @@ -97,20 +95,20 @@ public final class ViewDescriptorTest { new EqualsTester() .addEqualityGroup( DistributionViewDescriptor.create( - name, description, measurementDescriptor, dAggrDescriptor, keys), + name, description, measure, dAggrDescriptor, keys), DistributionViewDescriptor.create( - name, description, measurementDescriptor, dAggrDescriptor, keys)) + name, description, measure, dAggrDescriptor, keys)) .addEqualityGroup( DistributionViewDescriptor.create( - name, description + 2, measurementDescriptor, dAggrDescriptor, keys)) + name, description + 2, measure, dAggrDescriptor, keys)) .addEqualityGroup( IntervalViewDescriptor.create( - name, description, measurementDescriptor, iAggrDescriptor, keys), + name, description, measure, iAggrDescriptor, keys), IntervalViewDescriptor.create( - name, description, measurementDescriptor, iAggrDescriptor, keys)) + name, description, measure, iAggrDescriptor, keys)) .addEqualityGroup( IntervalViewDescriptor.create( - name, description + 2, measurementDescriptor, iAggrDescriptor, keys)) + name, description + 2, measure, iAggrDescriptor, keys)) .testEquals(); } @@ -119,7 +117,7 @@ public final class ViewDescriptorTest { DistributionViewDescriptor.create( (ViewDescriptor.Name) null, description, - measurementDescriptor, + measure, DistributionAggregationDescriptor.create(), keys); } @@ -129,7 +127,7 @@ public final class ViewDescriptorTest { DistributionViewDescriptor.create( (String) null, description, - measurementDescriptor, + measure, DistributionAggregationDescriptor.create(), keys); } @@ -139,7 +137,7 @@ public final class ViewDescriptorTest { IntervalViewDescriptor.create( (ViewDescriptor.Name) null, description, - measurementDescriptor, + measure, IntervalAggregationDescriptor.create(Arrays.asList(Duration.fromMillis(1))), keys); } @@ -149,7 +147,7 @@ public final class ViewDescriptorTest { IntervalViewDescriptor.create( (String) null, description, - measurementDescriptor, + measure, IntervalAggregationDescriptor.create(Arrays.asList(Duration.fromMillis(1))), keys); } @@ -175,9 +173,9 @@ public final class ViewDescriptorTest { private final ViewDescriptor.Name name = ViewDescriptor.Name.create("test-view-name"); private final String description = "test-view-name description"; - private final MeasurementDescriptor measurementDescriptor = MeasurementDescriptor.create( + private final Measure measure = Measure.DoubleMeasure.create( "measurement", "measurement description", - MeasurementUnit.create(1, Arrays.asList(BasicUnit.SCALAR))); + "1"); private final List<TagKey> keys = Arrays.asList(TagKey.create("foo"), TagKey.create("bar")); } diff --git a/core/src/test/java/io/opencensus/stats/ViewTest.java b/core/src/test/java/io/opencensus/stats/ViewTest.java index 1089af5d..6a42c01a 100644 --- a/core/src/test/java/io/opencensus/stats/ViewTest.java +++ b/core/src/test/java/io/opencensus/stats/ViewTest.java @@ -22,8 +22,6 @@ import io.opencensus.common.Function; import io.opencensus.common.Timestamp; import io.opencensus.stats.DistributionAggregation.Range; import io.opencensus.stats.IntervalAggregation.Interval; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; import io.opencensus.stats.View.DistributionView; import io.opencensus.stats.View.IntervalView; import io.opencensus.stats.ViewDescriptor.DistributionViewDescriptor; @@ -46,7 +44,7 @@ public final class ViewTest { DistributionAggregationDescriptor.create(Arrays.asList(10.0, 20.0, 30.0, 40.0)); final DistributionViewDescriptor viewDescriptor = DistributionViewDescriptor.create( - name, description, measurementDescriptor, aggregationDescriptor, tagKeys); + name, description, measure, aggregationDescriptor, tagKeys); final List<DistributionAggregation> aggregations = Arrays.asList( DistributionAggregation.create(5, 5.0, 15.0, Range.create(1.0, 5.0), tags1, Arrays.asList(1L, 1L, 1L, 1L, 1L)), @@ -80,7 +78,7 @@ public final class ViewTest { IntervalAggregationDescriptor.create(Arrays.asList(Duration.fromMillis(111))); final IntervalViewDescriptor viewDescriptor = IntervalViewDescriptor.create( - name, description, measurementDescriptor, aggregationDescriptor, tagKeys); + name, description, measure, aggregationDescriptor, tagKeys); final List<IntervalAggregation> aggregations = Arrays.asList( IntervalAggregation.create(tags1, Arrays.asList( Interval.create(Duration.fromMillis(111), 10, 100))), @@ -110,7 +108,7 @@ public final class ViewTest { DistributionViewDescriptor.create( name, description, - measurementDescriptor, + measure, DistributionAggregationDescriptor.create(Arrays.asList(10.0)), tagKeys); List<DistributionAggregation> dAggregations = @@ -121,7 +119,7 @@ public final class ViewTest { IntervalViewDescriptor.create( name, description, - measurementDescriptor, + measure, IntervalAggregationDescriptor.create(Arrays.asList(Duration.fromMillis(111))), tagKeys); List<IntervalAggregation> iAggregations = @@ -175,10 +173,10 @@ public final class ViewTest { // description private final String description = "test-view-descriptor description"; // measurement descriptor - private final MeasurementDescriptor measurementDescriptor = MeasurementDescriptor.create( + private final Measure measure = Measure.DoubleMeasure.create( "measurement-descriptor", "measurement-descriptor description", - MeasurementUnit.create(1, Arrays.asList(BasicUnit.SCALAR))); + "1"); private static final <T> boolean shallowListEquals(List<T> l1, List <T> l2) { if (l1.size() != l2.size()) { diff --git a/core_impl/src/main/java/io/opencensus/stats/MeasurementDescriptorToViewMap.java b/core_impl/src/main/java/io/opencensus/stats/MeasureToViewMap.java index 5b39ef97..128c1f52 100644 --- a/core_impl/src/main/java/io/opencensus/stats/MeasurementDescriptorToViewMap.java +++ b/core_impl/src/main/java/io/opencensus/stats/MeasureToViewMap.java @@ -28,18 +28,18 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; /** - * A class that stores a singleton map from {@link MeasurementDescriptor.Name}s to {@link + * A class that stores a singleton map from {@code MeasureName}s to {@link * MutableView}s. */ -final class MeasurementDescriptorToViewMap { +final class MeasureToViewMap { /* - * A synchronized singleton map that stores the one-to-many mapping from MeasurementDescriptors + * A synchronized singleton map that stores the one-to-many mapping from Measures * to MutableViews. */ @GuardedBy("this") - private final Multimap<MeasurementDescriptor.Name, MutableView> mutableMap = - HashMultimap.<MeasurementDescriptor.Name, MutableView>create(); + private final Multimap<String, MutableView> mutableMap = + HashMultimap.<String, MutableView>create(); @GuardedBy("this") private final Map<ViewDescriptor.Name, ViewDescriptor> registeredViews = @@ -58,7 +58,7 @@ final class MeasurementDescriptorToViewMap { return null; } Collection<MutableView> views = - mutableMap.get(viewDescriptor.getMeasurementDescriptor().getMeasurementDescriptorName()); + mutableMap.get(viewDescriptor.getMeasure().getName()); for (MutableView view : views) { if (view.getViewDescriptor().getViewDescriptorName().equals(viewName)) { return view; @@ -86,14 +86,14 @@ final class MeasurementDescriptorToViewMap { new CreateMutableDistributionViewFunction(clock), new CreateMutableIntervalViewFunction()); mutableMap.put( - viewDescriptor.getMeasurementDescriptor().getMeasurementDescriptorName(), mutableView); + viewDescriptor.getMeasure().getName(), mutableView); } // Records stats with a set of tags. synchronized void record(StatsContextImpl tags, MeasurementMap stats) { for (MeasurementValue mv : stats) { Collection<MutableView> views = - mutableMap.get(mv.getMeasurement().getMeasurementDescriptorName()); + mutableMap.get(mv.getMeasurement().getName()); for (MutableView view : views) { view.record(tags, mv.getValue()); } diff --git a/core_impl/src/main/java/io/opencensus/stats/StatsManager.java b/core_impl/src/main/java/io/opencensus/stats/StatsManager.java index 97b1c30d..7197826d 100644 --- a/core_impl/src/main/java/io/opencensus/stats/StatsManager.java +++ b/core_impl/src/main/java/io/opencensus/stats/StatsManager.java @@ -25,8 +25,8 @@ final class StatsManager { // clock used throughout the stats implementation private final Clock clock; - private final MeasurementDescriptorToViewMap measurementDescriptorToViewMap = - new MeasurementDescriptorToViewMap(); + private final MeasureToViewMap measureToViewMap = + new MeasureToViewMap(); StatsManager(EventQueue queue, Clock clock) { this.queue = queue; @@ -40,11 +40,11 @@ final class StatsManager { throw new UnsupportedOperationException( "The prototype will only support distribution views."); } - measurementDescriptorToViewMap.registerView(viewDescriptor, clock); + measureToViewMap.registerView(viewDescriptor, clock); } View getView(ViewDescriptor.Name viewName) { - View view = measurementDescriptorToViewMap.getView(viewName, clock); + View view = measureToViewMap.getView(viewName, clock); if (view == null) { throw new IllegalArgumentException( "View for view descriptor " + viewName + " not found."); @@ -71,7 +71,7 @@ final class StatsManager { @Override public void process() { - viewManager.measurementDescriptorToViewMap.record(tags, stats); + viewManager.measureToViewMap.record(tags, stats); } } } diff --git a/core_impl/src/test/java/io/opencensus/stats/MeasurementDescriptorToViewMapTest.java b/core_impl/src/test/java/io/opencensus/stats/MeasureToViewMapTest.java index 0f61803e..2d691e7f 100644 --- a/core_impl/src/test/java/io/opencensus/stats/MeasurementDescriptorToViewMapTest.java +++ b/core_impl/src/test/java/io/opencensus/stats/MeasureToViewMapTest.java @@ -18,8 +18,6 @@ import static org.junit.Assert.fail; import io.opencensus.common.Function; import io.opencensus.common.Timestamp; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; import io.opencensus.stats.View.DistributionView; import io.opencensus.stats.View.IntervalView; import io.opencensus.stats.ViewDescriptor.DistributionViewDescriptor; @@ -29,15 +27,15 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** Tests for {@link MeasurementDescriptorToViewMap}. */ +/** Tests for {@link MeasureToViewMap}. */ @RunWith(JUnit4.class) -public class MeasurementDescriptorToViewMapTest { +public class MeasureToViewMapTest { - private static final MeasurementDescriptor MEASUREMENT_DESCRIPTOR = - MeasurementDescriptor.create( + private static final Measure MEASUREMENT_DESCRIPTOR = + Measure.DoubleMeasure.create( "my measurement", "measurement description", - MeasurementUnit.create(0, Arrays.asList(BasicUnit.BYTES))); + "By"); private static final ViewDescriptor.Name VIEW_NAME = ViewDescriptor.Name.create("my view"); @@ -51,12 +49,12 @@ public class MeasurementDescriptorToViewMapTest { @Test public void testRegisterAndGetDistributionView() { - MeasurementDescriptorToViewMap measurementDescriptorToViewMap = - new MeasurementDescriptorToViewMap(); + MeasureToViewMap measureToViewMap = + new MeasureToViewMap(); TestClock clock = TestClock.create(Timestamp.create(10, 20)); - measurementDescriptorToViewMap.registerView(VIEW_DESCRIPTOR, clock); + measureToViewMap.registerView(VIEW_DESCRIPTOR, clock); clock.setTime(Timestamp.create(30, 40)); - View actual = measurementDescriptorToViewMap.getView(VIEW_NAME, clock); + View actual = measureToViewMap.getView(VIEW_NAME, clock); actual.match( new Function<View.DistributionView, Void>() { @Override diff --git a/core_impl/src/test/java/io/opencensus/stats/ViewManagerImplTest.java b/core_impl/src/test/java/io/opencensus/stats/ViewManagerImplTest.java index c4d3f98d..f784d98c 100644 --- a/core_impl/src/test/java/io/opencensus/stats/ViewManagerImplTest.java +++ b/core_impl/src/test/java/io/opencensus/stats/ViewManagerImplTest.java @@ -19,8 +19,6 @@ import static io.opencensus.stats.StatsTestUtil.createContext; import io.opencensus.common.Duration; import io.opencensus.common.Timestamp; import io.opencensus.internal.SimpleEventQueue; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; import io.opencensus.stats.View.DistributionView; import io.opencensus.stats.ViewDescriptor.DistributionViewDescriptor; import io.opencensus.stats.ViewDescriptor.IntervalViewDescriptor; @@ -45,19 +43,16 @@ public class ViewManagerImplTest { private static final TagValue VALUE = TagValue.create("VALUE"); private static final TagValue VALUE_2 = TagValue.create("VALUE_2"); - private static final MeasurementDescriptor.Name MEASUREMENT_NAME = - MeasurementDescriptor.Name.create("my measurement"); + private static final String MEASUREMENT_NAME = "my measurement"; - private static final MeasurementDescriptor.Name MEASUREMENT_NAME_2 = - MeasurementDescriptor.Name.create("my measurement 2"); + private static final String MEASUREMENT_NAME_2 = "my measurement 2"; - private static final MeasurementUnit MEASUREMENT_UNIT = - MeasurementUnit.create(-6, Arrays.asList(BasicUnit.SECONDS)); + private static final String MEASUREMENT_UNIT = "us"; private static final String MEASUREMENT_DESCRIPTION = "measurement description"; - private static final MeasurementDescriptor MEASUREMENT_DESCRIPTOR = - MeasurementDescriptor.create(MEASUREMENT_NAME, MEASUREMENT_DESCRIPTION, MEASUREMENT_UNIT); + private static final Measure MEASUREMENT_DESCRIPTOR = + Measure.DoubleMeasure.create(MEASUREMENT_NAME, MEASUREMENT_DESCRIPTION, MEASUREMENT_UNIT); private static final ViewDescriptor.Name VIEW_NAME = ViewDescriptor.Name.create("my view"); private static final ViewDescriptor.Name VIEW_NAME_2 = ViewDescriptor.Name.create("my view 2"); @@ -88,7 +83,7 @@ public class ViewManagerImplTest { private static DistributionViewDescriptor createDistributionViewDescriptor( ViewDescriptor.Name name, - MeasurementDescriptor measureDescr, + Measure measureDescr, DistributionAggregationDescriptor aggDescr, List<TagKey> keys) { return DistributionViewDescriptor.create(name, VIEW_DESCRIPTION, measureDescr, aggDescr, keys); @@ -282,11 +277,11 @@ public class ViewManagerImplTest { viewManager.registerView( createDistributionViewDescriptor( VIEW_NAME, - MeasurementDescriptor.create(MEASUREMENT_NAME, "measurement", MEASUREMENT_UNIT), + Measure.DoubleMeasure.create(MEASUREMENT_NAME, "measurement", MEASUREMENT_UNIT), DISTRIBUTION_AGGREGATION_DESCRIPTOR, Arrays.asList(KEY))); - MeasurementDescriptor measure2 = - MeasurementDescriptor.create(MEASUREMENT_NAME_2, "measurement", MEASUREMENT_UNIT); + Measure measure2 = + Measure.DoubleMeasure.create(MEASUREMENT_NAME_2, "measurement", MEASUREMENT_UNIT); statsRecorder.record(createContext(factory, KEY, VALUE), MeasurementMap.of(measure2, 10.0)); DistributionView view = (DistributionView) viewManager.getView(VIEW_NAME); assertThat(view.getDistributionAggregations()).isEmpty(); @@ -403,10 +398,10 @@ public class ViewManagerImplTest { @Test public void testMultipleViewsDifferentMeasures() { - MeasurementDescriptor measureDescr1 = - MeasurementDescriptor.create(MEASUREMENT_NAME, MEASUREMENT_DESCRIPTION, MEASUREMENT_UNIT); - MeasurementDescriptor measureDescr2 = - MeasurementDescriptor.create(MEASUREMENT_NAME_2, MEASUREMENT_DESCRIPTION, MEASUREMENT_UNIT); + Measure measureDescr1 = + Measure.DoubleMeasure.create(MEASUREMENT_NAME, MEASUREMENT_DESCRIPTION, MEASUREMENT_UNIT); + Measure measureDescr2 = + Measure.DoubleMeasure.create(MEASUREMENT_NAME_2, MEASUREMENT_DESCRIPTION, MEASUREMENT_UNIT); ViewDescriptor viewDescr1 = createDistributionViewDescriptor( VIEW_NAME, measureDescr1, DISTRIBUTION_AGGREGATION_DESCRIPTOR, Arrays.asList(KEY)); diff --git a/examples/src/main/java/io/opencensus/examples/stats/StatsRunner.java b/examples/src/main/java/io/opencensus/examples/stats/StatsRunner.java index 86a4e3dc..2595b855 100644 --- a/examples/src/main/java/io/opencensus/examples/stats/StatsRunner.java +++ b/examples/src/main/java/io/opencensus/examples/stats/StatsRunner.java @@ -14,16 +14,13 @@ package io.opencensus.examples.stats; import io.opencensus.common.NonThrowingCloseable; -import io.opencensus.stats.MeasurementDescriptor; -import io.opencensus.stats.MeasurementDescriptor.BasicUnit; -import io.opencensus.stats.MeasurementDescriptor.MeasurementUnit; +import io.opencensus.stats.Measure; import io.opencensus.stats.MeasurementMap; import io.opencensus.stats.Stats; import io.opencensus.stats.StatsContext; import io.opencensus.stats.StatsContextFactory; import io.opencensus.stats.TagKey; import io.opencensus.stats.TagValue; -import java.util.Arrays; /** Simple program that uses Stats contexts. */ public class StatsRunner { @@ -37,12 +34,11 @@ public class StatsRunner { private static final TagValue V3 = TagValue.create("v3"); private static final TagValue V4 = TagValue.create("v4"); - private static final MeasurementUnit simpleMeasurementUnit = - MeasurementUnit.create(1, Arrays.asList(BasicUnit.SCALAR)); - private static final MeasurementDescriptor M1 = - MeasurementDescriptor.create("m1", "1st test metric", simpleMeasurementUnit); - private static final MeasurementDescriptor M2 = - MeasurementDescriptor.create("m2", "2nd test metric", simpleMeasurementUnit); + private static final String UNIT = "1"; + private static final Measure M1 = + Measure.DoubleMeasure.create("m1", "1st test metric", UNIT); + private static final Measure M2 = + Measure.DoubleMeasure.create("m2", "2nd test metric", UNIT); private static final StatsContextFactory factory = Stats.getStatsContextFactory(); private static final StatsContext DEFAULT = factory.getDefault(); |
