io.opencensus.metrics.MetricOptions Maven / Gradle / Ivy
/*
* Copyright 2019, OpenCensus Authors
*
* 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.metrics;
import com.google.auto.value.AutoValue;
import io.opencensus.internal.Utils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.concurrent.Immutable;
/**
* Options for every metric added to the {@link MetricRegistry}.
*
* @since 0.20
*/
@Immutable
@AutoValue
public abstract class MetricOptions {
/**
* Returns the description of the Metric.
*
* Default value is {@code ""}.
*
* @return the description of the Metric.
* @since 0.20
*/
public abstract String getDescription();
/**
* Returns the unit of the Metric.
*
*
Default value is {@code "1"}.
*
* @return the unit of the Metric.
* @since 0.20
*/
public abstract String getUnit();
/**
* Returns the list of label keys for the Metric.
*
*
Default value is {@link Collections#emptyList()}.
*
* @return the list of label keys for the Metric.
* @since 0.20
*/
public abstract List getLabelKeys();
/**
* Returns the map of constant labels (they will be added to all the TimeSeries) for the Metric.
*
* Default value is {@link Collections#emptyMap()}.
*
* @return the map of constant labels for the Metric.
* @since 0.21
*/
public abstract Map getConstantLabels();
/**
* Returns a new {@link Builder} with default options.
*
* @return a new {@code Builder} with default options.
* @since 0.20.0
*/
public static Builder builder() {
return new AutoValue_MetricOptions.Builder()
.setDescription("")
.setUnit("1")
.setLabelKeys(Collections.emptyList())
.setConstantLabels(Collections.emptyMap());
}
/**
* Builder for {@link MetricOptions}.
*
* @since 0.20
*/
@AutoValue.Builder
public abstract static class Builder {
/**
* Sets the description of the Metric.
*
* @param description the description of the Metric.
* @return this.
* @since 0.20
*/
public abstract Builder setDescription(String description);
/**
* Sets the unit of the Metric.
*
* @param unit the unit of the Metric.
* @return this.
* @since 0.20
*/
public abstract Builder setUnit(String unit);
/**
* Sets the list of label keys for the Metric.
*
* @param labelKeys the list of label keys for the Metric.
* @return this.
* @since 0.20
*/
public abstract Builder setLabelKeys(List labelKeys);
/**
* Sets the map of constant labels (they will be added to all the TimeSeries) for the Metric.
*
* @param constantLabels the map of constant labels for the Metric.
* @return this.
* @since 0.21
*/
public abstract Builder setConstantLabels(Map constantLabels);
abstract Map getConstantLabels();
abstract List getLabelKeys();
abstract MetricOptions autoBuild();
/**
* Builds and returns a {@code MetricOptions} with the desired options.
*
* @return a {@code MetricOptions} with the desired options.
* @since 0.20
* @throws NullPointerException if {@code description}, OR {@code unit} is null, OR {@code
* labelKeys} is null OR any element of {@code labelKeys} is null, OR OR {@code
* constantLabels} is null OR any element of {@code constantLabels} is null.
* @throws IllegalArgumentException if any {@code LabelKey} from the {@code labelKeys} is in the
* {@code constantLabels}.
*/
public MetricOptions build() {
setLabelKeys(Collections.unmodifiableList(new ArrayList(getLabelKeys())));
setConstantLabels(
Collections.unmodifiableMap(
new LinkedHashMap(getConstantLabels())));
MetricOptions options = autoBuild();
Utils.checkListElementNotNull(options.getLabelKeys(), "labelKeys elements");
Utils.checkMapElementNotNull(options.getConstantLabels(), "constantLabels elements");
HashSet labelKeyNamesMap = new HashSet();
for (LabelKey labelKey : options.getLabelKeys()) {
if (labelKeyNamesMap.contains(labelKey.getKey())) {
throw new IllegalArgumentException("Invalid LabelKey in labelKeys");
}
labelKeyNamesMap.add(labelKey.getKey());
}
for (Map.Entry constantLabel : options.getConstantLabels().entrySet()) {
if (labelKeyNamesMap.contains(constantLabel.getKey().getKey())) {
throw new IllegalArgumentException("Invalid LabelKey in constantLabels");
}
labelKeyNamesMap.add(constantLabel.getKey().getKey());
}
return options;
}
Builder() {}
}
MetricOptions() {}
}