in geronimo-metrics/src/main/java/org/apache/geronimo/microprofile/metrics/cdi/MetricsExtension.java [239:291]
void afterBeanDiscovery(@Observes final AfterBeanDiscovery afterBeanDiscovery) {
addBean(afterBeanDiscovery, MetricRegistry.Type.APPLICATION.name(), MetricRegistry.class, new RegistryTypeImpl(MetricRegistry.Type.APPLICATION), applicationRegistry, true);
addBean(afterBeanDiscovery, MetricRegistry.Type.BASE.name(), MetricRegistry.class, new RegistryTypeImpl(MetricRegistry.Type.BASE), baseRegistry, false);
addBean(afterBeanDiscovery, MetricRegistry.Type.VENDOR.name(), MetricRegistry.class, new RegistryTypeImpl(MetricRegistry.Type.VENDOR), vendorRegistry, false);
// metrics
registrations.forEach((id, metadata) -> {
final String idSuffix = id.getName() + "#" + id.getTagsAsString();
switch (metadata.getTypeRaw()) {
case GAUGE:
addBean(afterBeanDiscovery, idSuffix, Gauge.class, new MetricImpl(metadata, id), new Gauge<Object>() {
private final AtomicReference<Gauge<?>> ref = new AtomicReference<>();
@Override
public Object getValue() {
Gauge<?> gauge = ref.get();
if (gauge == null) { // getGauges() is expensive in current form, avoid it
gauge = applicationRegistry.getGauges().get(id);
ref.compareAndSet(null, gauge);
}
return gauge.getValue();
}
}, true);
break;
case TIMER:
addBean(afterBeanDiscovery, idSuffix, Timer.class, new MetricImpl(metadata, id),
applicationRegistry.timer(metadata, id.getTagsAsList().toArray(NO_TAG)), true);
break;
case SIMPLE_TIMER:
addBean(afterBeanDiscovery, idSuffix, SimpleTimer.class, new MetricImpl(metadata, id),
applicationRegistry.simpleTimer(metadata, id.getTagsAsList().toArray(NO_TAG)), true);
break;
case COUNTER:
addBean(afterBeanDiscovery, idSuffix, Counter.class, new MetricImpl(metadata, id),
applicationRegistry.counter(metadata, id.getTagsAsList().toArray(NO_TAG)), true);
break;
case CONCURRENT_GAUGE:
addBean(afterBeanDiscovery, idSuffix, org.eclipse.microprofile.metrics.ConcurrentGauge.class,
new MetricImpl(metadata, id),
applicationRegistry.concurrentGauge(metadata, id.getTagsAsList().toArray(NO_TAG)), true);
break;
case METERED:
addBean(afterBeanDiscovery, idSuffix, Meter.class, new MetricImpl(metadata, id),
applicationRegistry.meter(metadata, id.getTagsAsList().toArray(NO_TAG)), true);
break;
case HISTOGRAM:
addBean(afterBeanDiscovery, idSuffix, Histogram.class, new MetricImpl(metadata, id),
applicationRegistry.histogram(metadata, id.getTagsAsList().toArray(NO_TAG)), true);
break;
default:
}
});
}