diff options
author | Luck <git@lucko.me> | 2018-05-30 16:50:36 +0100 |
---|---|---|
committer | Luck <git@lucko.me> | 2018-05-30 16:50:36 +0100 |
commit | 8b5071cdc5bd2609ee4f3805e3a54ced7f3d4df8 (patch) | |
tree | 9eca57156ed1c1f01df35c4927ffc071ec018c4a /common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java | |
parent | 645b2b34542c63c5416ada762c04efcacc3ca17f (diff) | |
download | spark-8b5071cdc5bd2609ee4f3805e3a54ced7f3d4df8.tar.gz spark-8b5071cdc5bd2609ee4f3805e3a54ced7f3d4df8.tar.bz2 spark-8b5071cdc5bd2609ee4f3805e3a54ced7f3d4df8.zip |
Add option to combine thread pool processes under the same node
Diffstat (limited to 'common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java')
-rw-r--r-- | common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java b/common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java new file mode 100644 index 0000000..56a6cc4 --- /dev/null +++ b/common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java @@ -0,0 +1,52 @@ +package me.lucko.spark.profiler; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Function for grouping threads together + */ +@FunctionalInterface +public interface ThreadGrouper { + + /** + * Gets the group for the given thread. + * + * @param threadName the name of the thread + * @return the group + */ + String getGroup(String threadName); + + /** + * Implementation of {@link ThreadGrouper} that just groups by thread name. + */ + ThreadGrouper BY_NAME = new ByName(); + + final class ByName implements ThreadGrouper { + @Override + public String getGroup(String threadName) { + return threadName; + } + } + + /** + * Implementation of {@link ThreadGrouper} that attempts to group by the name of the pool + * the thread originated from. + */ + ThreadGrouper BY_POOL = new ByPool(); + + final class ByPool implements ThreadGrouper { + private static final Pattern THREAD_POOL_PATTERN = Pattern.compile("^(.*)[-#] ?\\d+$"); + + @Override + public String getGroup(String threadName) { + Matcher matcher = THREAD_POOL_PATTERN.matcher(threadName); + if (!matcher.matches()) { + return threadName; + } + + return matcher.group(1).trim() + " (Combined)"; + } + } + +} |