blob: 8cf30a97f6a4f3f3cdc062fcee40f3c732e3d1b6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.ratis.metrics;
import org.apache.ratis.util.JavaUtils;
import org.apache.ratis.util.MemoizedSupplier;
import java.util.Objects;
import java.util.function.Supplier;
/**
* This class holds the name, description and JMX related context names for such group of metrics.
* <p>
* This class is immutable.
*/
public class MetricRegistryInfo {
private final String prefix;
private final String metricsDescription;
private final String metricsComponentName;
private final String applicationName;
private final Supplier<Integer> hash = MemoizedSupplier.valueOf(this::computeHash);
/**
* @param prefix className or component name this metric registry collects metric for
* @param applicationName application Name needs to be in small case as it is used for hadoop2metrics
* @param metricsComponentName component name needs to be in small case as it is used for hadoop2metrics
* @param metricsDescription description of the metrics collected by this registry
*
*/
public MetricRegistryInfo(String prefix, String applicationName, String metricsComponentName,
String metricsDescription) {
this.prefix = prefix;
this.applicationName = applicationName;
this.metricsComponentName = metricsComponentName;
this.metricsDescription = metricsDescription;
}
public String getApplicationName() {
return this.applicationName;
}
/**
*
* @return component name for which Metric is getting collected
*/
public String getMetricsComponentName() {
return metricsComponentName;
}
/**
* Get the description of what this metric registry exposes.
*/
public String getMetricsDescription() {
return metricsDescription;
}
/**
* Get the unique prefix for metrics that are being exported by this registry.
*/
public String getPrefix() {
return prefix;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (!(obj instanceof MetricRegistryInfo)) {
return false;
}
final MetricRegistryInfo that = (MetricRegistryInfo) obj;
return Objects.equals(prefix, that.prefix)
&& Objects.equals(metricsDescription, that.metricsDescription)
&& Objects.equals(metricsComponentName, that.metricsComponentName)
&& Objects.equals(applicationName, that.applicationName);
}
@Override
public int hashCode() {
return hash.get();
}
private Integer computeHash() {
return Objects.hash(prefix, metricsDescription, metricsComponentName);
}
@Override
public String toString() {
return JavaUtils.getClassSimpleName(getClass())
+ ": applicationName=" + getApplicationName()
+ ", metricsComponentName=" + getMetricsComponentName()
+ ", prefix=" + getPrefix()
+ ", metricsDescription=" + getMetricsDescription();
}
}