Repository: camel
Updated Branches:
  refs/heads/master 9ab0bd5c6 -> 0a96a200a


CAMEL-8165: Async routing engine - Add insight into threads blocked waiting for 
callbacks


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0a96a200
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0a96a200
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0a96a200

Branch: refs/heads/master
Commit: 0a96a200a71cfc0bab8c51c7e66dbd615b73e8c6
Parents: 9ab0bd5
Author: Claus Ibsen <davscl...@apache.org>
Authored: Sun Dec 21 13:25:35 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Sun Dec 21 13:25:35 2014 +0100

----------------------------------------------------------------------
 .../commands/AbstractLocalCamelController.java     | 10 ++++++++++
 .../apache/camel/commands/ContextInfoCommand.java  | 17 +++++++++++++++++
 .../jolokia/DefaultJolokiaCamelController.java     | 14 +++++++++++++-
 3 files changed, 40 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/0a96a200/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
----------------------------------------------------------------------
diff --git 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index 53c3a5f..0407871 100644
--- 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -102,6 +102,16 @@ public abstract class AbstractLocalCamelController extends 
AbstractCamelControll
             answer.put("typeConverter.missCounter", 
context.getTypeConverterRegistry().getStatistics().getMissCounter());
             answer.put("typeConverter.failedCounter", 
context.getTypeConverterRegistry().getStatistics().getFailedCounter());
 
+            // add async processor await manager details
+            answer.put("asyncProcessorAwaitManager.size", 
context.getAsyncProcessorAwaitManager().size());
+            answer.put("asyncProcessorAwaitManager.statisticsEnabled", 
context.getAsyncProcessorAwaitManager().getStatistics().isStatisticsEnabled());
+            answer.put("asyncProcessorAwaitManager.threadsBlocked", 
context.getAsyncProcessorAwaitManager().getStatistics().getThreadsBlocked());
+            answer.put("asyncProcessorAwaitManager.threadsInterrupted", 
context.getAsyncProcessorAwaitManager().getStatistics().getThreadsInterrupted());
+            answer.put("asyncProcessorAwaitManager.totalDuration", 
context.getAsyncProcessorAwaitManager().getStatistics().getTotalDuration());
+            answer.put("asyncProcessorAwaitManager.minDuration", 
context.getAsyncProcessorAwaitManager().getStatistics().getMinDuration());
+            answer.put("asyncProcessorAwaitManager.maxDuration", 
context.getAsyncProcessorAwaitManager().getStatistics().getMaxDuration());
+            answer.put("asyncProcessorAwaitManager.meanDuration", 
context.getAsyncProcessorAwaitManager().getStatistics().getMeanDuration());
+
             // add stream caching details if enabled
             if (context.getStreamCachingStrategy().isEnabled()) {
                 answer.put("streamCachingEnabled", true);

http://git-wip-us.apache.org/repos/asf/camel/blob/0a96a200/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
----------------------------------------------------------------------
diff --git 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
index cd2f373..ee8ecfb 100644
--- 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
+++ 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
@@ -112,6 +112,23 @@ public class ContextInfoCommand extends 
AbstractCamelCommand {
                 out.println(stringEscape.unescapeJava(String.format("\tType 
converter usage: [noop=%s, attempts=%s, hits=%s, misses=%s, failures=%s]", 
noop, attempt, hit, miss, failed)));
             }
 
+            // add async processor await details
+            out.println(stringEscape.unescapeJava("\tNumber of blocked 
threads: " + row.get("asyncProcessorAwaitManager.size")));
+            enabled = false;
+            if (row.get("asyncProcessorAwaitManager.statisticsEnabled") != 
null) {
+                enabled = (boolean) 
row.get("asyncProcessorAwaitManager.statisticsEnabled");
+            }
+            if (enabled) {
+                long blocked = (long) 
row.get("asyncProcessorAwaitManager.threadsBlocked");
+                long interrupted = (long) 
row.get("asyncProcessorAwaitManager.threadsInterrupted");
+                long total = (long) 
row.get("asyncProcessorAwaitManager.totalDuration");
+                long min = (long) 
row.get("asyncProcessorAwaitManager.minDuration");
+                long max = (long) 
row.get("asyncProcessorAwaitManager.maxDuration");
+                long mean = (long) 
row.get("asyncProcessorAwaitManager.meanDuration");
+                
out.println(stringEscape.unescapeJava(String.format("\tAsyncProcessorAwaitManager
 usage: [blocked=%s, interrupted=%s, total=%s msec, min=%s msec, max=%s msec, 
mean=%s msec]",
+                        blocked, interrupted, total, min, max, mean)));
+            }
+
             // add stream caching details if enabled
             enabled = (boolean) row.get("streamCachingEnabled");
             if (enabled) {

http://git-wip-us.apache.org/repos/asf/camel/blob/0a96a200/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
----------------------------------------------------------------------
diff --git 
a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
 
b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
index 998418e..a9ee5c2 100644
--- 
a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
+++ 
b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
@@ -88,7 +88,7 @@ public class DefaultJolokiaCamelController extends 
AbstractCamelController imple
             throw new IllegalStateException("Need to connect to remote jolokia 
first");
         }
 
-        J4pVersionResponse vr = null;
+        J4pVersionResponse vr;
         try {
             vr = jolokia.execute(new J4pVersionRequest());
             return vr != null && vr.getValue() != null;
@@ -111,9 +111,13 @@ public class DefaultJolokiaCamelController extends 
AbstractCamelController imple
             String pattern = 
String.format("%s:context=%s,type=services,name=DefaultTypeConverter", 
found.getDomain(), found.getKeyProperty("context"));
             ObjectName tc = ObjectName.getInstance(pattern);
 
+            String pattern2 = 
String.format("%s:context=%s,type=services,name=DefaultAsyncProcessorAwaitManager",
 found.getDomain(), found.getKeyProperty("context"));
+            ObjectName am = ObjectName.getInstance(pattern2);
+
             List<J4pReadRequest> list = new ArrayList<J4pReadRequest>();
             list.add(new J4pReadRequest(found));
             list.add(new J4pReadRequest(tc));
+            list.add(new J4pReadRequest(am));
 
             List<J4pReadResponse> rr = jolokia.execute(list);
             if (rr != null && rr.size() > 0) {
@@ -130,6 +134,14 @@ public class DefaultJolokiaCamelController extends 
AbstractCamelController imple
                         answer.put("typeConverter." + asKey(key), 
second.getValue(key));
                     }
                 }
+
+                // async processor await manager attributes
+                if (rr.size() >= 3) {
+                    J4pReadResponse second = rr.get(2);
+                    for (String key : second.getAttributes()) {
+                        answer.put("asyncProcessorAwaitManager." + asKey(key), 
second.getValue(key));
+                    }
+                }
             }
 
             // would be great if there was an api in jolokia to read optional 
(eg ignore if an mbean does not exists)

Reply via email to