mirror of https://github.com/hyperledger/besu
Support arbitrary MetricCategories (#1550)
* Make MetricCategory an interface so it isn't locked into the pantheon specific categories. * Split categories into StandardMetricCategory and PanteonMetricCategory to separate the common and Pantheon specific categories. Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>pull/2/head
parent
f2a2ffc008
commit
9b509d1163
@ -0,0 +1,22 @@ |
||||
/* |
||||
* Copyright 2019 ConsenSys AG. |
||||
* |
||||
* 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 tech.pegasys.pantheon.metrics; |
||||
|
||||
import java.util.Optional; |
||||
|
||||
public interface MetricCategory { |
||||
|
||||
String getName(); |
||||
|
||||
Optional<String> getAppliationPrefix(); |
||||
} |
@ -0,0 +1,36 @@ |
||||
/* |
||||
* Copyright 2019 ConsenSys AG. |
||||
* |
||||
* 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 tech.pegasys.pantheon.metrics; |
||||
|
||||
import java.util.Optional; |
||||
|
||||
public enum StandardMetricCategory implements MetricCategory { |
||||
JVM("jvm"), |
||||
PROCESS("process"); |
||||
|
||||
private final String name; |
||||
|
||||
StandardMetricCategory(final String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
@Override |
||||
public String getName() { |
||||
return name; |
||||
} |
||||
|
||||
@Override |
||||
public Optional<String> getAppliationPrefix() { |
||||
return Optional.empty(); |
||||
} |
||||
} |
@ -0,0 +1,40 @@ |
||||
/* |
||||
* Copyright 2019 ConsenSys AG. |
||||
* |
||||
* 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 tech.pegasys.pantheon.cli.converter; |
||||
|
||||
import tech.pegasys.pantheon.metrics.MetricCategory; |
||||
|
||||
import java.util.EnumSet; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import picocli.CommandLine; |
||||
|
||||
public class MetricCategoryConverter implements CommandLine.ITypeConverter<MetricCategory> { |
||||
|
||||
private final Map<String, MetricCategory> metricCategories = new HashMap<>(); |
||||
|
||||
@Override |
||||
public MetricCategory convert(final String value) { |
||||
final MetricCategory category = metricCategories.get(value); |
||||
if (category == null) { |
||||
throw new IllegalArgumentException("Unknown category: " + value); |
||||
} |
||||
return category; |
||||
} |
||||
|
||||
public <T extends Enum<T> & MetricCategory> void addCategories(final Class<T> categoryEnum) { |
||||
EnumSet.allOf(categoryEnum) |
||||
.forEach(category -> metricCategories.put(category.name(), category)); |
||||
} |
||||
} |
Loading…
Reference in new issue