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.view.Aggregation;
 | 
			
		||||
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.MeterSelectorBuilder;
 | 
			
		||||
import io.opentelemetry.sdk.metrics.view.View;
 | 
			
		||||
import io.opentelemetry.sdk.metrics.view.ViewBuilder;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +200,7 @@ public final class ViewConfig {
 | 
			
		|||
 | 
			
		||||
  // Visible for testing
 | 
			
		||||
  static InstrumentSelector toInstrumentSelector(SelectorSpecification selectorSpec) {
 | 
			
		||||
    InstrumentSelector.Builder builder = InstrumentSelector.builder();
 | 
			
		||||
    InstrumentSelectorBuilder builder = InstrumentSelector.builder();
 | 
			
		||||
    String instrumentName = selectorSpec.getInstrumentName();
 | 
			
		||||
    if (instrumentName != null) {
 | 
			
		||||
      builder.setInstrumentName(instrumentName);
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +210,7 @@ public final class ViewConfig {
 | 
			
		|||
      builder.setInstrumentType(instrumentType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    MeterSelector.Builder meterBuilder = MeterSelector.builder();
 | 
			
		||||
    MeterSelectorBuilder meterBuilder = MeterSelector.builder();
 | 
			
		||||
    String meterName = selectorSpec.getMeterName();
 | 
			
		||||
    if (meterName != null) {
 | 
			
		||||
      meterBuilder.setName(meterName);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,10 +7,7 @@ package io.opentelemetry.sdk.metrics.view;
 | 
			
		|||
 | 
			
		||||
import com.google.auto.value.AutoValue;
 | 
			
		||||
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.regex.Pattern;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
import javax.annotation.concurrent.Immutable;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -22,15 +19,16 @@ import javax.annotation.concurrent.Immutable;
 | 
			
		|||
@Immutable
 | 
			
		||||
public abstract class InstrumentSelector {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns a new {@link Builder} for {@link InstrumentSelector}.
 | 
			
		||||
   *
 | 
			
		||||
   * @return a new {@link Builder} for {@link InstrumentSelector}.
 | 
			
		||||
   */
 | 
			
		||||
  public static Builder builder() {
 | 
			
		||||
    return new AutoValue_InstrumentSelector.Builder()
 | 
			
		||||
        .setInstrumentNameFilter(StringPredicates.ALL)
 | 
			
		||||
        .setMeterSelector(MeterSelector.builder().build());
 | 
			
		||||
  /** Returns a new {@link InstrumentSelectorBuilder} for {@link InstrumentSelector}. */
 | 
			
		||||
  public static InstrumentSelectorBuilder builder() {
 | 
			
		||||
    return new InstrumentSelectorBuilder();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static InstrumentSelector create(
 | 
			
		||||
      @Nullable InstrumentType instrumentType,
 | 
			
		||||
      Predicate<String> instrumentNameFilter,
 | 
			
		||||
      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. */
 | 
			
		||||
  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;
 | 
			
		||||
 | 
			
		||||
import com.google.auto.value.AutoValue;
 | 
			
		||||
import io.opentelemetry.sdk.metrics.internal.view.StringPredicates;
 | 
			
		||||
import java.util.function.Predicate;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
import javax.annotation.concurrent.Immutable;
 | 
			
		||||
| 
						 | 
				
			
			@ -19,125 +18,33 @@ import javax.annotation.concurrent.Immutable;
 | 
			
		|||
@Immutable
 | 
			
		||||
public abstract class MeterSelector {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns a new {@link Builder} for {@link InstrumentSelector}.
 | 
			
		||||
   *
 | 
			
		||||
   * @return a new {@link Builder} for {@link InstrumentSelector}.
 | 
			
		||||
   */
 | 
			
		||||
  public static Builder builder() {
 | 
			
		||||
    return new AutoValue_MeterSelector.Builder()
 | 
			
		||||
        .setNameFilter(StringPredicates.ALL)
 | 
			
		||||
        .setVersionFilter(StringPredicates.ALL)
 | 
			
		||||
        .setSchemaUrlFilter(StringPredicates.ALL);
 | 
			
		||||
  /** Returns a new {@link MeterSelectorBuilder} for {@link InstrumentSelector}. */
 | 
			
		||||
  public static MeterSelectorBuilder builder() {
 | 
			
		||||
    return new MeterSelectorBuilder();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static MeterSelector create(
 | 
			
		||||
      Predicate<String> nameFilter,
 | 
			
		||||
      Predicate<String> versionFilter,
 | 
			
		||||
      Predicate<String> schemaUrlFilter) {
 | 
			
		||||
    return new AutoValue_MeterSelector(nameFilter, versionFilter, schemaUrlFilter);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns the {@link Pattern} generated by the provided {@code regex} in the {@link Builder}, or
 | 
			
		||||
   * {@code Pattern.compile(".*")} if none was specified.
 | 
			
		||||
   * Returns the {@link Pattern} generated by the provided {@code regex} in the {@link
 | 
			
		||||
   * MeterSelectorBuilder}, or {@code Pattern.compile(".*")} if none was specified.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract Predicate<String> getNameFilter();
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns the {@link Pattern} generated by the provided {@code regex} in the {@link Builder}, or
 | 
			
		||||
   * {@code Pattern.compile(".*")} if none was specified.
 | 
			
		||||
   * Returns the {@link Pattern} generated by the provided {@code regex} in the {@link
 | 
			
		||||
   * MeterSelectorBuilder}, or {@code Pattern.compile(".*")} if none was specified.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract Predicate<String> getVersionFilter();
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns the {@link Pattern} generated by the provided {@code regex} in the {@link Builder}, or
 | 
			
		||||
   * {@code Pattern.compile(".*")} if none was specified.
 | 
			
		||||
   * Returns the {@link Pattern} generated by the provided {@code regex} in the {@link
 | 
			
		||||
   * MeterSelectorBuilder}, or {@code Pattern.compile(".*")} if none was specified.
 | 
			
		||||
   */
 | 
			
		||||
  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;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
 | 
			
		||||
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
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.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