From bd87768511bc29a7e34d8348155782a4b55944d3 Mon Sep 17 00:00:00 2001 From: Robin Karlsson Date: Sun, 13 Jan 2019 10:30:31 +0100 Subject: [PATCH] Set thread names in HTTPServer Name threads in the HTTPServer thread pool to make them easily identifiable in e.g. thread dumps. Before: pool-1-thread-3 After: prometheus-http-1-3 Signed-off-by: Robin Karlsson --- .../prometheus/client/exporter/HTTPServer.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java b/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java index 60022f0dd..ab92450cb 100644 --- a/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java +++ b/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java @@ -17,6 +17,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.GZIPOutputStream; import com.sun.net.httpserver.HttpHandler; @@ -112,11 +113,15 @@ protected static Set parseQuery(String query) throws IOException { } - static class DaemonThreadFactory implements ThreadFactory { - private ThreadFactory delegate; + static class NamedDaemonThreadFactory implements ThreadFactory { + private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1); + + private final int poolNumber = POOL_NUMBER.getAndIncrement(); + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final ThreadFactory delegate; private final boolean daemon; - DaemonThreadFactory(ThreadFactory delegate, boolean daemon) { + NamedDaemonThreadFactory(ThreadFactory delegate, boolean daemon) { this.delegate = delegate; this.daemon = daemon; } @@ -124,12 +129,13 @@ static class DaemonThreadFactory implements ThreadFactory { @Override public Thread newThread(Runnable r) { Thread t = delegate.newThread(r); + t.setName(String.format("prometheus-http-%d-%d", poolNumber, threadNumber.getAndIncrement())); t.setDaemon(daemon); return t; } static ThreadFactory defaultThreadFactory(boolean daemon) { - return new DaemonThreadFactory(Executors.defaultThreadFactory(), daemon); + return new NamedDaemonThreadFactory(Executors.defaultThreadFactory(), daemon); } } @@ -146,7 +152,7 @@ public HTTPServer(InetSocketAddress addr, CollectorRegistry registry, boolean da HttpHandler mHandler = new HTTPMetricHandler(registry); server.createContext("/", mHandler); server.createContext("/metrics", mHandler); - executorService = Executors.newFixedThreadPool(5, DaemonThreadFactory.defaultThreadFactory(daemon)); + executorService = Executors.newFixedThreadPool(5, NamedDaemonThreadFactory.defaultThreadFactory(daemon)); server.setExecutor(executorService); start(daemon); } @@ -199,7 +205,7 @@ public void run() { server.start(); } }, null); - DaemonThreadFactory.defaultThreadFactory(daemon).newThread(startTask).start(); + NamedDaemonThreadFactory.defaultThreadFactory(daemon).newThread(startTask).start(); try { startTask.get(); } catch (ExecutionException e) {