aboutsummaryrefslogtreecommitdiffstats
path: root/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-17 14:14:20 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-17 14:16:47 +0100
commit5e7454179d37b2d639fd3374bb9d916e15f6885c (patch)
treef7a77f12729534f8e667d9709d96a4200d188c97 /jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/FilterResolver.java
parenteeb4a602f9b50cf7e58a547bf48c06502d46b5b9 (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.java31
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);
}
}