From 5c12927f30a51de9b26326584b1e1ca8d62113ce Mon Sep 17 00:00:00 2001 From: Matt Jacobs Date: Tue, 10 Feb 2015 10:52:59 -0800 Subject: [PATCH] Added a rolling max counter for command execution --- .../metrics/eventstream/HystrixMetricsPoller.java | 4 ++-- .../contrib/rxnetty/metricsstream/JsonMappers.java | 1 + .../java/com/netflix/hystrix/AbstractCommand.java | 2 +- .../com/netflix/hystrix/HystrixCommandMetrics.java | 13 +++++++------ .../hystrix/util/HystrixRollingNumberEvent.java | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/hystrix-contrib/hystrix-metrics-event-stream/src/main/java/com/netflix/hystrix/contrib/metrics/eventstream/HystrixMetricsPoller.java b/hystrix-contrib/hystrix-metrics-event-stream/src/main/java/com/netflix/hystrix/contrib/metrics/eventstream/HystrixMetricsPoller.java index 40a414516..1ae2d05d0 100644 --- a/hystrix-contrib/hystrix-metrics-event-stream/src/main/java/com/netflix/hystrix/contrib/metrics/eventstream/HystrixMetricsPoller.java +++ b/hystrix-contrib/hystrix-metrics-event-stream/src/main/java/com/netflix/hystrix/contrib/metrics/eventstream/HystrixMetricsPoller.java @@ -70,8 +70,7 @@ public class HystrixMetricsPoller { *

* Use pause to temporarily stop polling that can be restarted again with start. * - * @param MetricsAsJsonPollerListener - * for callbacks + * @param listener for callbacks * @param delay */ public HystrixMetricsPoller(MetricsAsJsonPollerListener listener, int delay) { @@ -221,6 +220,7 @@ private String getCommandJson(HystrixCommandMetrics commandMetrics) throws IOExc json.writeNumberField("rollingCountTimeout", commandMetrics.getRollingCount(HystrixRollingNumberEvent.TIMEOUT)); json.writeNumberField("currentConcurrentExecutionCount", commandMetrics.getCurrentConcurrentExecutionCount()); + json.writeNumberField("rollingMaxConcurrentExecutionCount", commandMetrics.getRollingMaxConcurrentExecutions()); // latency percentiles json.writeNumberField("latencyExecute_mean", commandMetrics.getExecutionTimeMean()); diff --git a/hystrix-contrib/hystrix-rx-netty-metrics-stream/src/main/java/com/netflix/hystrix/contrib/rxnetty/metricsstream/JsonMappers.java b/hystrix-contrib/hystrix-rx-netty-metrics-stream/src/main/java/com/netflix/hystrix/contrib/rxnetty/metricsstream/JsonMappers.java index 947b8c20f..7eddb574a 100644 --- a/hystrix-contrib/hystrix-rx-netty-metrics-stream/src/main/java/com/netflix/hystrix/contrib/rxnetty/metricsstream/JsonMappers.java +++ b/hystrix-contrib/hystrix-rx-netty-metrics-stream/src/main/java/com/netflix/hystrix/contrib/rxnetty/metricsstream/JsonMappers.java @@ -84,6 +84,7 @@ static String toJson(HystrixCommandMetrics commandMetrics) throws IOException { json.writeNumberField("rollingCountTimeout", commandMetrics.getRollingCount(HystrixRollingNumberEvent.TIMEOUT)); json.writeNumberField("currentConcurrentExecutionCount", commandMetrics.getCurrentConcurrentExecutionCount()); + json.writeNumberField("rollingMaxConcurrentExecutionCount", commandMetrics.getRollingMaxConcurrentExecutions()); // latency percentiles json.writeNumberField("latencyExecute_mean", commandMetrics.getExecutionTimeMean()); diff --git a/hystrix-core/src/main/java/com/netflix/hystrix/AbstractCommand.java b/hystrix-core/src/main/java/com/netflix/hystrix/AbstractCommand.java index de4f8cca8..8de109fa2 100644 --- a/hystrix-core/src/main/java/com/netflix/hystrix/AbstractCommand.java +++ b/hystrix-core/src/main/java/com/netflix/hystrix/AbstractCommand.java @@ -496,7 +496,7 @@ public void call() { */ private Observable getRunObservableDecoratedForMetricsAndErrorHandling() { final AbstractCommand _self = this; - // allow tracking how many concurrent threads are executing + // allow tracking how many concurrent commands are executing metrics.incrementConcurrentExecutionCount(); final HystrixRequestContext currentRequestContext = HystrixRequestContext.getContextForCurrentThread(); diff --git a/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommandMetrics.java b/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommandMetrics.java index caddc270d..aca69f56b 100644 --- a/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommandMetrics.java +++ b/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommandMetrics.java @@ -288,22 +288,23 @@ public int getCurrentConcurrentExecutionCount() { /** * Increment concurrent requests counter. - * - * @param numberOfPermitsUsed */ /* package */void incrementConcurrentExecutionCount() { - concurrentExecutionCount.incrementAndGet(); + int numConcurrent = concurrentExecutionCount.incrementAndGet(); + counter.updateRollingMax(HystrixRollingNumberEvent.COMMAND_MAX_ACTIVE, (long) numConcurrent); } /** - * Increment concurrent requests counter. - * - * @param numberOfPermitsUsed + * Decrement concurrent requests counter. */ /* package */void decrementConcurrentExecutionCount() { concurrentExecutionCount.decrementAndGet(); } + public long getRollingMaxConcurrentExecutions() { + return counter.getRollingMaxValue(HystrixRollingNumberEvent.COMMAND_MAX_ACTIVE); + } + /** * When a {@link HystrixCommand} returns a Fallback successfully. */ diff --git a/hystrix-core/src/main/java/com/netflix/hystrix/util/HystrixRollingNumberEvent.java b/hystrix-core/src/main/java/com/netflix/hystrix/util/HystrixRollingNumberEvent.java index 4f713bea7..1da134e7e 100644 --- a/hystrix-core/src/main/java/com/netflix/hystrix/util/HystrixRollingNumberEvent.java +++ b/hystrix-core/src/main/java/com/netflix/hystrix/util/HystrixRollingNumberEvent.java @@ -30,7 +30,7 @@ */ public enum HystrixRollingNumberEvent { SUCCESS(1), FAILURE(1), TIMEOUT(1), SHORT_CIRCUITED(1), THREAD_POOL_REJECTED(1), SEMAPHORE_REJECTED(1), BAD_REQUEST(1), - FALLBACK_SUCCESS(1), FALLBACK_FAILURE(1), FALLBACK_REJECTION(1), EXCEPTION_THROWN(1), + FALLBACK_SUCCESS(1), FALLBACK_FAILURE(1), FALLBACK_REJECTION(1), EXCEPTION_THROWN(1), COMMAND_MAX_ACTIVE(2), THREAD_EXECUTION(1), THREAD_MAX_ACTIVE(2), COLLAPSED(1), RESPONSE_FROM_CACHE(1), COLLAPSER_REQUEST_BATCHED(1), COLLAPSER_BATCH(1);