public void start()

in geronimo-metrics-extensions/geronimo-metrics-tomcat/src/main/java/org/apache/geronimo/microprofile/metrics/extension/tomcat/TomcatRegistrar.java [54:104]


    public void start() {
        final Collection<Integer> ports = new HashSet<>();
        Stream.concat(
                findServers(),
                StreamSupport.stream(ServiceLoader.load(ServerRegistration.class).spliterator(), false)
                    .map(Supplier::get))
            .filter(Objects::nonNull)
            .distinct()
            .map(Server::findServices)
            .flatMap(Stream::of)
            .map(Service::findConnectors)
            .flatMap(Stream::of)
            .map(Connector::getProtocolHandler)
            .filter(AbstractProtocol.class::isInstance)
            .map(AbstractProtocol.class::cast)
            .forEach(protocol -> {
                final Executor executor = protocol.getExecutor();
                final int port = protocol.getPort();
                if (!ports.add(port)) {
                    return;
                }
                final String prefix = "server.executor.port_" + port + ".";
                if (java.util.concurrent.ThreadPoolExecutor.class.isInstance(executor)) {
                    final java.util.concurrent.ThreadPoolExecutor pool =
                            java.util.concurrent.ThreadPoolExecutor.class.cast(executor);
                    addGauge(prefix + "queue.size", "Connector Queue Size", () -> pool.getQueue().size());
                    addGauge(prefix + "active", "Connector Active Count", pool::getActiveCount);
                    addGauge(prefix + "tasks.completed", "Connector Completed Tasks", pool::getCompletedTaskCount);
                    addGauge(prefix + "tasks.count", "Connector Tasks Count", pool::getTaskCount);
                }
                if (ThreadPoolExecutor.class.isInstance(executor)) {
                    final ThreadPoolExecutor pool = ThreadPoolExecutor.class.cast(executor);
                    addGauge(prefix + "submitted", "Connector Submitted Tasks", pool::getSubmittedCount);
                }
            });

        // plain tomcat, test on jmx, not as rich as from the instance (this is why we have a SPI)
        final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        try {
            server.queryMBeans(new ObjectName("*:type=ThreadPool,*"), null).stream()
                  .map(ObjectInstance::getObjectName)
                  .filter(it -> ports.add(getPort(it)))
                  .forEach(name -> {
                      final String prefix = "server.executor.port_" + getPort(name) + ".";
                      addGauge(prefix + "thread.count", "Connector Thread Count", () -> Number.class.cast(server.getAttribute(name, "currentThreadCount")));
                      addGauge(prefix + "active", "Connector Thread Busy", () -> Number.class.cast(server.getAttribute(name, "currentThreadsBusy")));
                  });
        } catch (final Exception e) {
            // no-op
        }
    }