in geronimo-metrics/src/main/java/org/apache/geronimo/microprofile/metrics/cdi/MeteredInterceptor.java [75:105]
private Meter findMeter(final Executable executable) {
if (meters == null) {
synchronized (this) {
if (meters == null) {
meters = new ConcurrentHashMap<>();
}
}
}
Meter meter = meters.get(executable);
if (meter == null) {
final AnnotatedType<?> type = beanManager.createAnnotatedType(bean.getBeanClass());
final Metered metered = Stream.concat(type.getMethods().stream(), type.getConstructors().stream())
.filter(it -> it.getJavaMember().equals(executable))
.findFirst()
.map(m -> m.getAnnotation(Metered.class))
.orElse(null);
final String name = Names.findName(
Modifier.isAbstract(executable.getDeclaringClass().getModifiers()) ? type.getJavaClass() : executable.getDeclaringClass(),
executable, metered == null ? null : metered.name(),
metered != null && metered.absolute(),
ofNullable(extension.getAnnotation(type, Metered.class)).map(Metered::name).orElse(""));
meter = registry.getMeter(
new MetricID(name, extension.createTags(metered == null ? new String[0] : metered.tags())));
if (meter == null) {
throw new IllegalStateException("No meter with name [" + name + "] found in registry [" + registry + "]");
}
meters.putIfAbsent(executable, meter);
}
return meter;
}