aboutsummaryrefslogtreecommitdiff
path: root/common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2018-05-30 16:50:36 +0100
committerLuck <git@lucko.me>2018-05-30 16:50:36 +0100
commit8b5071cdc5bd2609ee4f3805e3a54ced7f3d4df8 (patch)
tree9eca57156ed1c1f01df35c4927ffc071ec018c4a /common/src/main/java/me/lucko/spark/profiler/ThreadGrouper.java
parent645b2b34542c63c5416ada762c04efcacc3ca17f (diff)
downloadspark-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.java52
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)";
+ }
+ }
+
+}