void afterBeanDiscovery()

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:
            }
        });
    }