diff --git a/metrics-jetty10/src/main/java/io/dropwizard/metrics/jetty10/InstrumentedHandler.java b/metrics-jetty10/src/main/java/io/dropwizard/metrics/jetty10/InstrumentedHandler.java index 1d455535da..bb849e0fd8 100644 --- a/metrics-jetty10/src/main/java/io/dropwizard/metrics/jetty10/InstrumentedHandler.java +++ b/metrics-jetty10/src/main/java/io/dropwizard/metrics/jetty10/InstrumentedHandler.java @@ -169,14 +169,6 @@ protected void doStart() throws Exception { this.asyncTimeouts = metricRegistry.meter(name(prefix, NAME_ASYNC_TIMEOUTS)); this.responseCodeMeters = DETAILED_METER_LEVELS.contains(responseMeteredLevel) ? new ConcurrentHashMap<>() : Collections.emptyMap(); - this.responses = COARSE_METER_LEVELS.contains(responseMeteredLevel) ? - Collections.unmodifiableList(Arrays.asList( - metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx - metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx - metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx - metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx - metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx - )) : Collections.emptyList(); this.getRequests = metricRegistry.timer(name(prefix, NAME_GET_REQUESTS)); this.postRequests = metricRegistry.timer(name(prefix, NAME_POST_REQUESTS)); @@ -189,53 +181,65 @@ protected void doStart() throws Exception { this.moveRequests = metricRegistry.timer(name(prefix, NAME_MOVE_REQUESTS)); this.otherRequests = metricRegistry.timer(name(prefix, NAME_OTHER_REQUESTS)); - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { - @Override - public Ratio getRatio() { - return Ratio.of(responses.get(4).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); + if (COARSE_METER_LEVELS.contains(responseMeteredLevel)) { + this.responses = Collections.unmodifiableList(Arrays.asList( + metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx + metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx + metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx + metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx + metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx + )); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { + @Override + public Ratio getRatio() { + return Ratio.of(responses.get(4).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + } else { + this.responses = Collections.emptyList(); + } this.listener = new AsyncAttachingListener(); diff --git a/metrics-jetty10/src/test/java/io/dropwizard/metrics/jetty10/InstrumentedHandlerTest.java b/metrics-jetty10/src/test/java/io/dropwizard/metrics/jetty10/InstrumentedHandlerTest.java index 273564e633..248bf6e45c 100644 --- a/metrics-jetty10/src/test/java/io/dropwizard/metrics/jetty10/InstrumentedHandlerTest.java +++ b/metrics-jetty10/src/test/java/io/dropwizard/metrics/jetty10/InstrumentedHandlerTest.java @@ -23,6 +23,8 @@ import java.util.concurrent.TimeUnit; import static com.codahale.metrics.annotation.ResponseMeteredLevel.ALL; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.COARSE; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.DETAILED; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; @@ -120,6 +122,24 @@ public void doStopDoesNotThrowNPE() throws Exception { assertThatCode(handler::doStop).doesNotThrowAnyException(); } + @Test + public void gaugesAreRegisteredWithResponseMeteredLevelCoarse() throws Exception { + InstrumentedHandler handler = new InstrumentedHandler(registry, "coarse", COARSE); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).containsKey("coarse.handler.percent-4xx-1m"); + } + + @Test + public void gaugesAreNotRegisteredWithResponseMeteredLevelDetailed() throws Exception { + InstrumentedHandler handler = new InstrumentedHandler(registry, "detailed", DETAILED); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).doesNotContainKey("coarse.handler.percent-4xx-1m"); + } + @Test @Ignore("flaky on virtual machines") public void responseTimesAreRecordedForAsyncResponses() throws Exception { diff --git a/metrics-jetty11/src/main/java/io/dropwizard/metrics/jetty11/InstrumentedHandler.java b/metrics-jetty11/src/main/java/io/dropwizard/metrics/jetty11/InstrumentedHandler.java index 499cd97e4d..7914166f7a 100644 --- a/metrics-jetty11/src/main/java/io/dropwizard/metrics/jetty11/InstrumentedHandler.java +++ b/metrics-jetty11/src/main/java/io/dropwizard/metrics/jetty11/InstrumentedHandler.java @@ -169,14 +169,6 @@ protected void doStart() throws Exception { this.asyncTimeouts = metricRegistry.meter(name(prefix, NAME_ASYNC_TIMEOUTS)); this.responseCodeMeters = DETAILED_METER_LEVELS.contains(responseMeteredLevel) ? new ConcurrentHashMap<>() : Collections.emptyMap(); - this.responses = COARSE_METER_LEVELS.contains(responseMeteredLevel) ? - Collections.unmodifiableList(Arrays.asList( - metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx - metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx - metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx - metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx - metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx - )) : Collections.emptyList(); this.getRequests = metricRegistry.timer(name(prefix, NAME_GET_REQUESTS)); this.postRequests = metricRegistry.timer(name(prefix, NAME_POST_REQUESTS)); @@ -189,53 +181,64 @@ protected void doStart() throws Exception { this.moveRequests = metricRegistry.timer(name(prefix, NAME_MOVE_REQUESTS)); this.otherRequests = metricRegistry.timer(name(prefix, NAME_OTHER_REQUESTS)); - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { - @Override - public Ratio getRatio() { - return Ratio.of(responses.get(4).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); + if (COARSE_METER_LEVELS.contains(responseMeteredLevel)) { + this.responses = Collections.unmodifiableList(Arrays.asList( + metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx + metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx + metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx + metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx + metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx + )); + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { + @Override + public Ratio getRatio() { + return Ratio.of(responses.get(4).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + } else { + this.responses = Collections.emptyList(); + } this.listener = new AsyncAttachingListener(); diff --git a/metrics-jetty11/src/test/java/io/dropwizard/metrics/jetty11/InstrumentedHandlerTest.java b/metrics-jetty11/src/test/java/io/dropwizard/metrics/jetty11/InstrumentedHandlerTest.java index 1d2b0d42d3..ca18793d22 100644 --- a/metrics-jetty11/src/test/java/io/dropwizard/metrics/jetty11/InstrumentedHandlerTest.java +++ b/metrics-jetty11/src/test/java/io/dropwizard/metrics/jetty11/InstrumentedHandlerTest.java @@ -23,6 +23,8 @@ import java.util.concurrent.TimeUnit; import static com.codahale.metrics.annotation.ResponseMeteredLevel.ALL; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.COARSE; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.DETAILED; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; @@ -120,6 +122,24 @@ public void doStopDoesNotThrowNPE() throws Exception { assertThatCode(handler::doStop).doesNotThrowAnyException(); } + @Test + public void gaugesAreRegisteredWithResponseMeteredLevelCoarse() throws Exception { + InstrumentedHandler handler = new InstrumentedHandler(registry, "coarse", COARSE); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).containsKey("coarse.handler.percent-4xx-1m"); + } + + @Test + public void gaugesAreNotRegisteredWithResponseMeteredLevelDetailed() throws Exception { + InstrumentedHandler handler = new InstrumentedHandler(registry, "detailed", DETAILED); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).doesNotContainKey("coarse.handler.percent-4xx-1m"); + } + @Test @Ignore("flaky on virtual machines") public void responseTimesAreRecordedForAsyncResponses() throws Exception { diff --git a/metrics-jetty12-ee10/src/test/java/io/dropwizard/metrics/jetty12/ee10/InstrumentedEE10HandlerTest.java b/metrics-jetty12-ee10/src/test/java/io/dropwizard/metrics/jetty12/ee10/InstrumentedEE10HandlerTest.java index bad19b506c..e2c56ac42a 100644 --- a/metrics-jetty12-ee10/src/test/java/io/dropwizard/metrics/jetty12/ee10/InstrumentedEE10HandlerTest.java +++ b/metrics-jetty12-ee10/src/test/java/io/dropwizard/metrics/jetty12/ee10/InstrumentedEE10HandlerTest.java @@ -27,6 +27,8 @@ import java.util.concurrent.TimeUnit; import static com.codahale.metrics.annotation.ResponseMeteredLevel.ALL; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.COARSE; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.DETAILED; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; @@ -137,6 +139,24 @@ public void doStopDoesNotThrowNPE() throws Exception { assertThatCode(handler::doStop).doesNotThrowAnyException(); } + @Test + public void gaugesAreRegisteredWithResponseMeteredLevelCoarse() throws Exception { + InstrumentedEE10Handler handler = new InstrumentedEE10Handler(registry, "coarse", COARSE); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).containsKey("coarse.handler.percent-4xx-1m"); + } + + @Test + public void gaugesAreNotRegisteredWithResponseMeteredLevelDetailed() throws Exception { + InstrumentedEE10Handler handler = new InstrumentedEE10Handler(registry, "detailed", DETAILED); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).doesNotContainKey("coarse.handler.percent-4xx-1m"); + } + @Test @Ignore("flaky on virtual machines") public void responseTimesAreRecordedForAsyncResponses() throws Exception { diff --git a/metrics-jetty12/src/main/java/io/dropwizard/metrics/jetty12/AbstractInstrumentedHandler.java b/metrics-jetty12/src/main/java/io/dropwizard/metrics/jetty12/AbstractInstrumentedHandler.java index 9cbaeac725..d2a7899623 100644 --- a/metrics-jetty12/src/main/java/io/dropwizard/metrics/jetty12/AbstractInstrumentedHandler.java +++ b/metrics-jetty12/src/main/java/io/dropwizard/metrics/jetty12/AbstractInstrumentedHandler.java @@ -159,14 +159,6 @@ protected void doStart() throws Exception { this.asyncTimeouts = metricRegistry.meter(name(prefix, NAME_ASYNC_TIMEOUTS)); this.responseCodeMeters = DETAILED_METER_LEVELS.contains(responseMeteredLevel) ? new ConcurrentHashMap<>() : Collections.emptyMap(); - this.responses = COARSE_METER_LEVELS.contains(responseMeteredLevel) ? - Collections.unmodifiableList(Arrays.asList( - metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx - metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx - metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx - metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx - metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx - )) : Collections.emptyList(); this.getRequests = metricRegistry.timer(name(prefix, NAME_GET_REQUESTS)); this.postRequests = metricRegistry.timer(name(prefix, NAME_POST_REQUESTS)); @@ -179,53 +171,65 @@ protected void doStart() throws Exception { this.moveRequests = metricRegistry.timer(name(prefix, NAME_MOVE_REQUESTS)); this.otherRequests = metricRegistry.timer(name(prefix, NAME_OTHER_REQUESTS)); - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { - @Override - public Ratio getRatio() { - return Ratio.of(responses.get(4).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); + if (COARSE_METER_LEVELS.contains(responseMeteredLevel)) { + this.responses = Collections.unmodifiableList(Arrays.asList( + metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx + metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx + metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx + metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx + metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx + )); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { + @Override + public Ratio getRatio() { + return Ratio.of(responses.get(4).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + } else { + this.responses = Collections.emptyList(); + } } @Override diff --git a/metrics-jetty9/src/main/java/com/codahale/metrics/jetty9/InstrumentedHandler.java b/metrics-jetty9/src/main/java/com/codahale/metrics/jetty9/InstrumentedHandler.java index 1b8b952fd4..244716198c 100644 --- a/metrics-jetty9/src/main/java/com/codahale/metrics/jetty9/InstrumentedHandler.java +++ b/metrics-jetty9/src/main/java/com/codahale/metrics/jetty9/InstrumentedHandler.java @@ -177,14 +177,6 @@ protected void doStart() throws Exception { this.asyncTimeouts = metricRegistry.meter(name(prefix, NAME_ASYNC_TIMEOUTS)); this.responseCodeMeters = DETAILED_METER_LEVELS.contains(responseMeteredLevel) ? new ConcurrentHashMap<>() : Collections.emptyMap(); - this.responses = COARSE_METER_LEVELS.contains(responseMeteredLevel) ? - Collections.unmodifiableList(Arrays.asList( - metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx - metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx - metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx - metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx - metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx - )) : Collections.emptyList(); this.getRequests = metricRegistry.timer(name(prefix, NAME_GET_REQUESTS)); this.postRequests = metricRegistry.timer(name(prefix, NAME_POST_REQUESTS)); @@ -197,53 +189,65 @@ protected void doStart() throws Exception { this.moveRequests = metricRegistry.timer(name(prefix, NAME_MOVE_REQUESTS)); this.otherRequests = metricRegistry.timer(name(prefix, NAME_OTHER_REQUESTS)); - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(3).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getOneMinuteRate(), - requests.getOneMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { - @Override - protected Ratio getRatio() { - return Ratio.of(responses.get(4).getFiveMinuteRate(), - requests.getFiveMinuteRate()); - } - }); - - metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { - @Override - public Ratio getRatio() { - return Ratio.of(responses.get(4).getFifteenMinuteRate(), - requests.getFifteenMinuteRate()); - } - }); + if (COARSE_METER_LEVELS.contains(responseMeteredLevel)) { + this.responses = Collections.unmodifiableList(Arrays.asList( + metricRegistry.meter(name(prefix, NAME_1XX_RESPONSES)), // 1xx + metricRegistry.meter(name(prefix, NAME_2XX_RESPONSES)), // 2xx + metricRegistry.meter(name(prefix, NAME_3XX_RESPONSES)), // 3xx + metricRegistry.meter(name(prefix, NAME_4XX_RESPONSES)), // 4xx + metricRegistry.meter(name(prefix, NAME_5XX_RESPONSES)) // 5xx + )); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_4XX_15M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(3).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_1M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getOneMinuteRate(), + requests.getOneMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_5M), new RatioGauge() { + @Override + protected Ratio getRatio() { + return Ratio.of(responses.get(4).getFiveMinuteRate(), + requests.getFiveMinuteRate()); + } + }); + + metricRegistry.register(name(prefix, NAME_PERCENT_5XX_15M), new RatioGauge() { + @Override + public Ratio getRatio() { + return Ratio.of(responses.get(4).getFifteenMinuteRate(), + requests.getFifteenMinuteRate()); + } + }); + } else { + this.responses = Collections.emptyList(); + } this.listener = new AsyncAttachingListener(); diff --git a/metrics-jetty9/src/test/java/com/codahale/metrics/jetty9/InstrumentedHandlerTest.java b/metrics-jetty9/src/test/java/com/codahale/metrics/jetty9/InstrumentedHandlerTest.java index 9825b64bff..12dd977073 100644 --- a/metrics-jetty9/src/test/java/com/codahale/metrics/jetty9/InstrumentedHandlerTest.java +++ b/metrics-jetty9/src/test/java/com/codahale/metrics/jetty9/InstrumentedHandlerTest.java @@ -23,6 +23,8 @@ import java.util.concurrent.TimeUnit; import static com.codahale.metrics.annotation.ResponseMeteredLevel.ALL; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.COARSE; +import static com.codahale.metrics.annotation.ResponseMeteredLevel.DETAILED; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; @@ -120,6 +122,24 @@ public void doStopDoesNotThrowNPE() throws Exception { assertThatCode(handler::doStop).doesNotThrowAnyException(); } + @Test + public void gaugesAreRegisteredWithResponseMeteredLevelCoarse() throws Exception { + InstrumentedHandler handler = new InstrumentedHandler(registry, "coarse", COARSE); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).containsKey("coarse.handler.percent-4xx-1m"); + } + + @Test + public void gaugesAreNotRegisteredWithResponseMeteredLevelDetailed() throws Exception { + InstrumentedHandler handler = new InstrumentedHandler(registry, "detailed", DETAILED); + handler.setHandler(new TestHandler()); + handler.setName("handler"); + handler.doStart(); + assertThat(registry.getGauges()).doesNotContainKey("coarse.handler.percent-4xx-1m"); + } + @Test @Ignore("flaky on virtual machines") public void responseTimesAreRecordedForAsyncResponses() throws Exception {