diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-11-17 14:14:20 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-11-17 14:16:47 +0100 |
commit | 5e7454179d37b2d639fd3374bb9d916e15f6885c (patch) | |
tree | f7a77f12729534f8e667d9709d96a4200d188c97 /jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java | |
parent | eeb4a602f9b50cf7e58a547bf48c06502d46b5b9 (diff) |
Add metrics for request filtering
Diffstat (limited to 'jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java index badb0e736ae..6590b9791d4 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java @@ -1,11 +1,13 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.jdisc.http.server.jetty; +import com.yahoo.jdisc.Metric; import com.yahoo.jdisc.http.filter.RequestFilter; import com.yahoo.jdisc.http.filter.ResponseFilter; import javax.servlet.http.HttpServletRequest; import java.net.URI; +import java.util.Map; import java.util.Optional; import static com.yahoo.jdisc.http.server.jetty.JDiscHttpServlet.getConnector; @@ -18,18 +20,37 @@ import static com.yahoo.jdisc.http.server.jetty.JDiscHttpServlet.getConnector; class FilterResolver { private final FilterBindings bindings; + private final Metric metric; - FilterResolver(FilterBindings bindings) { + FilterResolver(FilterBindings bindings, Metric metric) { this.bindings = bindings; + this.metric = metric; } Optional<RequestFilter> resolveRequestFilter(HttpServletRequest servletRequest, URI jdiscUri) { - return bindings.resolveRequestFilter(jdiscUri, getConnector(servletRequest).listenPort()) - .map(bindings::getRequestFilter); + Optional<String> maybeFilterId = bindings.resolveRequestFilter(jdiscUri, getConnector(servletRequest).listenPort()); + if (maybeFilterId.isPresent()) { + metric.add(MetricDefinitions.FILTERING_REQUEST_HANDLED, 1L, createMetricContext(servletRequest, maybeFilterId.get())); + } else { + metric.add(MetricDefinitions.FILTERING_REQUEST_UNHANDLED, 1L, createMetricContext(servletRequest, null)); + } + return maybeFilterId.map(bindings::getRequestFilter); } Optional<ResponseFilter> resolveResponseFilter(HttpServletRequest servletRequest, URI jdiscUri) { - return bindings.resolveResponseFilter(jdiscUri, getConnector(servletRequest).listenPort()) - .map(bindings::getResponseFilter); + Optional<String> maybeFilterId = bindings.resolveResponseFilter(jdiscUri, getConnector(servletRequest).listenPort()); + if (maybeFilterId.isPresent()) { + metric.add(MetricDefinitions.FILTERING_RESPONSE_HANDLED, 1L, createMetricContext(servletRequest, maybeFilterId.get())); + } else { + metric.add(MetricDefinitions.FILTERING_RESPONSE_UNHANDLED, 1L, createMetricContext(servletRequest, null)); + } + return maybeFilterId.map(bindings::getResponseFilter); + } + + private Metric.Context createMetricContext(HttpServletRequest request, String filterId) { + Map<String, String> extraDimensions = filterId != null + ? Map.of(MetricDefinitions.FILTER_CHAIN_ID_DIMENSION, filterId) + : Map.of(); + return JDiscHttpServlet.getConnector(request).createRequestMetricContext(request, extraDimensions); } } |