Move view builders to top level (#4202)
This commit is contained in:
parent
f4be86124a
commit
d868eff3e1
|
|
@ -13,7 +13,9 @@ import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
|
||||||
import io.opentelemetry.sdk.metrics.common.InstrumentType;
|
import io.opentelemetry.sdk.metrics.common.InstrumentType;
|
||||||
import io.opentelemetry.sdk.metrics.view.Aggregation;
|
import io.opentelemetry.sdk.metrics.view.Aggregation;
|
||||||
import io.opentelemetry.sdk.metrics.view.InstrumentSelector;
|
import io.opentelemetry.sdk.metrics.view.InstrumentSelector;
|
||||||
|
import io.opentelemetry.sdk.metrics.view.InstrumentSelectorBuilder;
|
||||||
import io.opentelemetry.sdk.metrics.view.MeterSelector;
|
import io.opentelemetry.sdk.metrics.view.MeterSelector;
|
||||||
|
import io.opentelemetry.sdk.metrics.view.MeterSelectorBuilder;
|
||||||
import io.opentelemetry.sdk.metrics.view.View;
|
import io.opentelemetry.sdk.metrics.view.View;
|
||||||
import io.opentelemetry.sdk.metrics.view.ViewBuilder;
|
import io.opentelemetry.sdk.metrics.view.ViewBuilder;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
@ -198,7 +200,7 @@ public final class ViewConfig {
|
||||||
|
|
||||||
// Visible for testing
|
// Visible for testing
|
||||||
static InstrumentSelector toInstrumentSelector(SelectorSpecification selectorSpec) {
|
static InstrumentSelector toInstrumentSelector(SelectorSpecification selectorSpec) {
|
||||||
InstrumentSelector.Builder builder = InstrumentSelector.builder();
|
InstrumentSelectorBuilder builder = InstrumentSelector.builder();
|
||||||
String instrumentName = selectorSpec.getInstrumentName();
|
String instrumentName = selectorSpec.getInstrumentName();
|
||||||
if (instrumentName != null) {
|
if (instrumentName != null) {
|
||||||
builder.setInstrumentName(instrumentName);
|
builder.setInstrumentName(instrumentName);
|
||||||
|
|
@ -208,7 +210,7 @@ public final class ViewConfig {
|
||||||
builder.setInstrumentType(instrumentType);
|
builder.setInstrumentType(instrumentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
MeterSelector.Builder meterBuilder = MeterSelector.builder();
|
MeterSelectorBuilder meterBuilder = MeterSelector.builder();
|
||||||
String meterName = selectorSpec.getMeterName();
|
String meterName = selectorSpec.getMeterName();
|
||||||
if (meterName != null) {
|
if (meterName != null) {
|
||||||
meterBuilder.setName(meterName);
|
meterBuilder.setName(meterName);
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,7 @@ package io.opentelemetry.sdk.metrics.view;
|
||||||
|
|
||||||
import com.google.auto.value.AutoValue;
|
import com.google.auto.value.AutoValue;
|
||||||
import io.opentelemetry.sdk.metrics.common.InstrumentType;
|
import io.opentelemetry.sdk.metrics.common.InstrumentType;
|
||||||
import io.opentelemetry.sdk.metrics.internal.view.StringPredicates;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
||||||
|
|
@ -22,15 +19,16 @@ import javax.annotation.concurrent.Immutable;
|
||||||
@Immutable
|
@Immutable
|
||||||
public abstract class InstrumentSelector {
|
public abstract class InstrumentSelector {
|
||||||
|
|
||||||
/**
|
/** Returns a new {@link InstrumentSelectorBuilder} for {@link InstrumentSelector}. */
|
||||||
* Returns a new {@link Builder} for {@link InstrumentSelector}.
|
public static InstrumentSelectorBuilder builder() {
|
||||||
*
|
return new InstrumentSelectorBuilder();
|
||||||
* @return a new {@link Builder} for {@link InstrumentSelector}.
|
}
|
||||||
*/
|
|
||||||
public static Builder builder() {
|
static InstrumentSelector create(
|
||||||
return new AutoValue_InstrumentSelector.Builder()
|
@Nullable InstrumentType instrumentType,
|
||||||
.setInstrumentNameFilter(StringPredicates.ALL)
|
Predicate<String> instrumentNameFilter,
|
||||||
.setMeterSelector(MeterSelector.builder().build());
|
MeterSelector meterSelector) {
|
||||||
|
return new AutoValue_InstrumentSelector(instrumentType, instrumentNameFilter, meterSelector);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -47,62 +45,4 @@ public abstract class InstrumentSelector {
|
||||||
|
|
||||||
/** Returns the selections criteria for {@link io.opentelemetry.api.metrics.Meter}s. */
|
/** Returns the selections criteria for {@link io.opentelemetry.api.metrics.Meter}s. */
|
||||||
public abstract MeterSelector getMeterSelector();
|
public abstract MeterSelector getMeterSelector();
|
||||||
|
|
||||||
/** Builder for {@link InstrumentSelector} instances. */
|
|
||||||
@AutoValue.Builder
|
|
||||||
public abstract static class Builder {
|
|
||||||
/** Sets a specifier for {@link InstrumentType}. */
|
|
||||||
public abstract Builder setInstrumentType(InstrumentType instrumentType);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Pattern} for instrument names that will be selected.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
|
||||||
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
|
||||||
* used.
|
|
||||||
*/
|
|
||||||
public abstract Builder setInstrumentNameFilter(Predicate<String> instrumentNameFilter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Pattern} for instrument names that will be selected.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
|
||||||
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
|
||||||
* used.
|
|
||||||
*/
|
|
||||||
public final Builder setInstrumentNamePattern(Pattern instrumentNamePattern) {
|
|
||||||
return setInstrumentNameFilter(StringPredicates.regex(instrumentNamePattern));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the exact instrument name that will be selected.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
|
||||||
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
|
||||||
* used.
|
|
||||||
*/
|
|
||||||
public final Builder setInstrumentName(String instrumentName) {
|
|
||||||
return setInstrumentNameFilter(StringPredicates.exact(instrumentName));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a specifier for selecting Instruments by name.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
|
||||||
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
|
||||||
* used.
|
|
||||||
*/
|
|
||||||
public final Builder setInstrumentNameRegex(String regex) {
|
|
||||||
return setInstrumentNamePattern(Pattern.compile(Objects.requireNonNull(regex, "regex")));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link MeterSelector} for which {@link io.opentelemetry.api.metrics.Meter}s will be
|
|
||||||
* included.
|
|
||||||
*/
|
|
||||||
public abstract Builder setMeterSelector(MeterSelector meterSelector);
|
|
||||||
|
|
||||||
/** Returns an InstrumentSelector instance with the content of this builder. */
|
|
||||||
public abstract InstrumentSelector build();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.sdk.metrics.view;
|
||||||
|
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
|
import io.opentelemetry.sdk.metrics.common.InstrumentType;
|
||||||
|
import io.opentelemetry.sdk.metrics.internal.view.StringPredicates;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
/** Builder for {@link InstrumentSelector}. */
|
||||||
|
public final class InstrumentSelectorBuilder {
|
||||||
|
|
||||||
|
@Nullable private InstrumentType instrumentType;
|
||||||
|
private Predicate<String> instrumentNameFilter = StringPredicates.ALL;
|
||||||
|
private MeterSelector meterSelector = MeterSelector.builder().build();
|
||||||
|
|
||||||
|
/** Sets a specifier for {@link InstrumentType}. */
|
||||||
|
public InstrumentSelectorBuilder setInstrumentType(InstrumentType instrumentType) {
|
||||||
|
requireNonNull(instrumentType, "instrumentType");
|
||||||
|
this.instrumentType = instrumentType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Pattern} for instrument names that will be selected.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
||||||
|
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
public InstrumentSelectorBuilder setInstrumentNameFilter(Predicate<String> instrumentNameFilter) {
|
||||||
|
requireNonNull(instrumentNameFilter, "instrumentNameFilter");
|
||||||
|
this.instrumentNameFilter = instrumentNameFilter;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Pattern} for instrument names that will be selected.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
||||||
|
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
public InstrumentSelectorBuilder setInstrumentNamePattern(Pattern instrumentNamePattern) {
|
||||||
|
requireNonNull(instrumentNamePattern, "instrumentNamePattern");
|
||||||
|
return setInstrumentNameFilter(StringPredicates.regex(instrumentNamePattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the exact instrument name that will be selected.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
||||||
|
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
public InstrumentSelectorBuilder setInstrumentName(String instrumentName) {
|
||||||
|
requireNonNull(instrumentName, "instrumentName");
|
||||||
|
return setInstrumentNameFilter(StringPredicates.exact(instrumentName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a specifier for selecting Instruments by name.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setInstrumentNameFilter}, {@link
|
||||||
|
* #setInstrumentNamePattern} {@link #setInstrumentNameRegex} and {@link #setInstrumentName} is
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
public InstrumentSelectorBuilder setInstrumentNameRegex(String instrumentNameRegex) {
|
||||||
|
requireNonNull(instrumentNameRegex, "instrumentNameRegex");
|
||||||
|
return setInstrumentNamePattern(Pattern.compile(instrumentNameRegex));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link MeterSelector} for which {@link io.opentelemetry.api.metrics.Meter}s will be
|
||||||
|
* included.
|
||||||
|
*/
|
||||||
|
public InstrumentSelectorBuilder setMeterSelector(MeterSelector meterSelector) {
|
||||||
|
requireNonNull(meterSelector, "meterSelector");
|
||||||
|
this.meterSelector = meterSelector;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns an InstrumentSelector instance with the content of this builder. */
|
||||||
|
public InstrumentSelector build() {
|
||||||
|
return InstrumentSelector.create(instrumentType, instrumentNameFilter, meterSelector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
package io.opentelemetry.sdk.metrics.view;
|
package io.opentelemetry.sdk.metrics.view;
|
||||||
|
|
||||||
import com.google.auto.value.AutoValue;
|
import com.google.auto.value.AutoValue;
|
||||||
import io.opentelemetry.sdk.metrics.internal.view.StringPredicates;
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
@ -19,125 +18,33 @@ import javax.annotation.concurrent.Immutable;
|
||||||
@Immutable
|
@Immutable
|
||||||
public abstract class MeterSelector {
|
public abstract class MeterSelector {
|
||||||
|
|
||||||
/**
|
/** Returns a new {@link MeterSelectorBuilder} for {@link InstrumentSelector}. */
|
||||||
* Returns a new {@link Builder} for {@link InstrumentSelector}.
|
public static MeterSelectorBuilder builder() {
|
||||||
*
|
return new MeterSelectorBuilder();
|
||||||
* @return a new {@link Builder} for {@link InstrumentSelector}.
|
}
|
||||||
*/
|
|
||||||
public static Builder builder() {
|
static MeterSelector create(
|
||||||
return new AutoValue_MeterSelector.Builder()
|
Predicate<String> nameFilter,
|
||||||
.setNameFilter(StringPredicates.ALL)
|
Predicate<String> versionFilter,
|
||||||
.setVersionFilter(StringPredicates.ALL)
|
Predicate<String> schemaUrlFilter) {
|
||||||
.setSchemaUrlFilter(StringPredicates.ALL);
|
return new AutoValue_MeterSelector(nameFilter, versionFilter, schemaUrlFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link Pattern} generated by the provided {@code regex} in the {@link Builder}, or
|
* Returns the {@link Pattern} generated by the provided {@code regex} in the {@link
|
||||||
* {@code Pattern.compile(".*")} if none was specified.
|
* MeterSelectorBuilder}, or {@code Pattern.compile(".*")} if none was specified.
|
||||||
*/
|
*/
|
||||||
public abstract Predicate<String> getNameFilter();
|
public abstract Predicate<String> getNameFilter();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link Pattern} generated by the provided {@code regex} in the {@link Builder}, or
|
* Returns the {@link Pattern} generated by the provided {@code regex} in the {@link
|
||||||
* {@code Pattern.compile(".*")} if none was specified.
|
* MeterSelectorBuilder}, or {@code Pattern.compile(".*")} if none was specified.
|
||||||
*/
|
*/
|
||||||
public abstract Predicate<String> getVersionFilter();
|
public abstract Predicate<String> getVersionFilter();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link Pattern} generated by the provided {@code regex} in the {@link Builder}, or
|
* Returns the {@link Pattern} generated by the provided {@code regex} in the {@link
|
||||||
* {@code Pattern.compile(".*")} if none was specified.
|
* MeterSelectorBuilder}, or {@code Pattern.compile(".*")} if none was specified.
|
||||||
*/
|
*/
|
||||||
public abstract Predicate<String> getSchemaUrlFilter();
|
public abstract Predicate<String> getSchemaUrlFilter();
|
||||||
|
|
||||||
/** Builder for {@link InstrumentSelector} instances. */
|
|
||||||
@AutoValue.Builder
|
|
||||||
public abstract static class Builder {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Predicate} for matching name.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setNameFilter}, {@link #setNamePattern} and {@link
|
|
||||||
* #setName} is used.
|
|
||||||
*/
|
|
||||||
public abstract Builder setNameFilter(Predicate<String> filter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Pattern} for matching name.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setNameFilter}, {@link #setNamePattern} and {@link
|
|
||||||
* #setName} is used.
|
|
||||||
*/
|
|
||||||
public final Builder setNamePattern(Pattern pattern) {
|
|
||||||
return setNameFilter(StringPredicates.regex(pattern));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a specifier for selecting Instruments by name.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setNameFilter}, {@link #setNamePattern} and {@link
|
|
||||||
* #setName} is used.
|
|
||||||
*/
|
|
||||||
public final Builder setName(String name) {
|
|
||||||
return setNameFilter(StringPredicates.exact(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Predicate} for matching versions.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setVersionFilter}, {@link #setVersionPattern} and
|
|
||||||
* {@link #setVersion} is used.
|
|
||||||
*/
|
|
||||||
public abstract Builder setVersionFilter(Predicate<String> filter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Pattern} for matching versions.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setVersionFilter}, {@link #setVersionPattern} and
|
|
||||||
* {@link #setVersion} is used.
|
|
||||||
*/
|
|
||||||
public final Builder setVersionPattern(Pattern pattern) {
|
|
||||||
return setVersionFilter(StringPredicates.regex(pattern));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a specifier for selecting Meters by version.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setVersionFilter}, {@link #setVersionPattern} and
|
|
||||||
* {@link #setVersion} is used.
|
|
||||||
*/
|
|
||||||
public final Builder setVersion(String version) {
|
|
||||||
return setVersionFilter(StringPredicates.exact(version));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Predicate} for matching schema urls.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setSchemaUrlFilter}, {@link #setSchemaUrlPattern} and
|
|
||||||
* {@link #setSchemaUrl} is used.
|
|
||||||
*/
|
|
||||||
abstract Builder setSchemaUrlFilter(Predicate<String> filter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link Pattern} for matching schema urls.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setSchemaUrlFilter}, {@link #setSchemaUrlPattern} and
|
|
||||||
* {@link #setSchemaUrl} is used.
|
|
||||||
*/
|
|
||||||
public final Builder setSchemaUrlPattern(Pattern pattern) {
|
|
||||||
return setSchemaUrlFilter(StringPredicates.regex(pattern));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the schema url to match.
|
|
||||||
*
|
|
||||||
* <p>Note: The last provided of {@link #setSchemaUrlFilter}, {@link #setSchemaUrlPattern} and
|
|
||||||
* {@link #setSchemaUrl} is used.
|
|
||||||
*/
|
|
||||||
public final Builder setSchemaUrl(String url) {
|
|
||||||
return setSchemaUrlFilter(StringPredicates.exact(url));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns an InstrumentSelector instance with the content of this builder. */
|
|
||||||
public abstract MeterSelector build();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.sdk.metrics.view;
|
||||||
|
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
|
import io.opentelemetry.sdk.metrics.internal.view.StringPredicates;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** Builder for {@link MeterSelector}. */
|
||||||
|
public final class MeterSelectorBuilder {
|
||||||
|
|
||||||
|
private Predicate<String> nameFilter = StringPredicates.ALL;
|
||||||
|
private Predicate<String> versionFilter = StringPredicates.ALL;
|
||||||
|
private Predicate<String> schemaUrlFilter = StringPredicates.ALL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Predicate} for matching name.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setNameFilter}, {@link #setNamePattern} and {@link
|
||||||
|
* #setName} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setNameFilter(Predicate<String> nameFilter) {
|
||||||
|
requireNonNull(nameFilter, "nameFilter");
|
||||||
|
this.nameFilter = nameFilter;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Pattern} for matching name.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setNameFilter}, {@link #setNamePattern} and {@link
|
||||||
|
* #setName} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setNamePattern(Pattern pattern) {
|
||||||
|
requireNonNull(pattern, "pattern");
|
||||||
|
return setNameFilter(StringPredicates.regex(pattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a specifier for selecting Instruments by name.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setNameFilter}, {@link #setNamePattern} and {@link
|
||||||
|
* #setName} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setName(String name) {
|
||||||
|
requireNonNull(name, "name");
|
||||||
|
return setNameFilter(StringPredicates.exact(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Predicate} for matching versions.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setVersionFilter}, {@link #setVersionPattern} and {@link
|
||||||
|
* #setVersion} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setVersionFilter(Predicate<String> versionFilter) {
|
||||||
|
requireNonNull(versionFilter, "versionFilter");
|
||||||
|
this.versionFilter = versionFilter;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Pattern} for matching versions.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setVersionFilter}, {@link #setVersionPattern} and {@link
|
||||||
|
* #setVersion} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setVersionPattern(Pattern pattern) {
|
||||||
|
requireNonNull(pattern, "pattern");
|
||||||
|
return setVersionFilter(StringPredicates.regex(pattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a specifier for selecting Meters by version.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setVersionFilter}, {@link #setVersionPattern} and {@link
|
||||||
|
* #setVersion} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setVersion(String version) {
|
||||||
|
requireNonNull(version, "version");
|
||||||
|
return setVersionFilter(StringPredicates.exact(version));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Predicate} for matching schema urls.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setSchemaUrlFilter}, {@link #setSchemaUrlPattern} and
|
||||||
|
* {@link #setSchemaUrl} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setSchemaUrlFilter(Predicate<String> schemaUrlFilter) {
|
||||||
|
requireNonNull(schemaUrlFilter, "schemaUrlFilter");
|
||||||
|
this.schemaUrlFilter = schemaUrlFilter;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link Pattern} for matching schema urls.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setSchemaUrlFilter}, {@link #setSchemaUrlPattern} and
|
||||||
|
* {@link #setSchemaUrl} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setSchemaUrlPattern(Pattern pattern) {
|
||||||
|
requireNonNull(pattern, "pattern");
|
||||||
|
return setSchemaUrlFilter(StringPredicates.regex(pattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the schema url to match.
|
||||||
|
*
|
||||||
|
* <p>Note: The last provided of {@link #setSchemaUrlFilter}, {@link #setSchemaUrlPattern} and
|
||||||
|
* {@link #setSchemaUrl} is used.
|
||||||
|
*/
|
||||||
|
public MeterSelectorBuilder setSchemaUrl(String schemaUrl) {
|
||||||
|
requireNonNull(schemaUrl, "schemaUrl");
|
||||||
|
return setSchemaUrlFilter(StringPredicates.exact(schemaUrl));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns an InstrumentSelector instance with the content of this builder. */
|
||||||
|
public MeterSelector build() {
|
||||||
|
return MeterSelector.create(nameFilter, versionFilter, schemaUrlFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.sdk.metrics.view;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class InstrumentSelectorTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void invalidArgs() {
|
||||||
|
assertThatThrownBy(() -> InstrumentSelector.builder().setInstrumentType(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("instrumentType");
|
||||||
|
assertThatThrownBy(() -> InstrumentSelector.builder().setInstrumentNameFilter(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("instrumentNameFilter");
|
||||||
|
assertThatThrownBy(() -> InstrumentSelector.builder().setInstrumentNamePattern(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("instrumentNamePattern");
|
||||||
|
assertThatThrownBy(() -> InstrumentSelector.builder().setInstrumentName(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("instrumentName");
|
||||||
|
assertThatThrownBy(() -> InstrumentSelector.builder().setInstrumentNameRegex(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("instrumentNameRegex");
|
||||||
|
assertThatThrownBy(() -> InstrumentSelector.builder().setMeterSelector(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("meterSelector");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
package io.opentelemetry.sdk.metrics.view;
|
package io.opentelemetry.sdk.metrics.view;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
@ -106,4 +107,35 @@ public class MeterSelectorTest {
|
||||||
assertThat(schemaUrl.getSchemaUrlFilter().test("1.0")).isFalse();
|
assertThat(schemaUrl.getSchemaUrlFilter().test("1.0")).isFalse();
|
||||||
assertThat(schemaUrl.getSchemaUrlFilter().test("1.2")).isFalse();
|
assertThat(schemaUrl.getSchemaUrlFilter().test("1.2")).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void invalidArgs() {
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setNameFilter(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("nameFilter");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setNamePattern(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("pattern");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setName(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("name");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setVersionFilter(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("versionFilter");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setVersionPattern(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("pattern");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setVersion(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("version");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setSchemaUrlFilter(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("schemaUrlFilter");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setSchemaUrlPattern(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("pattern");
|
||||||
|
assertThatThrownBy(() -> MeterSelector.builder().setSchemaUrl(null))
|
||||||
|
.isInstanceOf(NullPointerException.class)
|
||||||
|
.hasMessage("schemaUrl");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue