summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-07-04 14:53:26 +0200
committerBjørn Christian Seime <bjorncs@oath.com>2018-07-04 14:53:26 +0200
commit7c91a519d21689b66680c20af239d0882c7ade8c (patch)
treeb6ebb63dc372d3b1495110717efb3f84b12e35f8 /jdisc_http_service
parent23452dae98b95f841ae9327b1d34df93a9085267 (diff)
Add matched binding as dimension when available
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java7
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java2
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java9
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java7
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java1
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/MetricReporter.java27
6 files changed, 36 insertions, 17 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java
index db7670b604a..a07ad08d797 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java
@@ -2,7 +2,6 @@
package com.yahoo.jdisc.http.server.jetty;
import com.yahoo.container.logging.AccessLogEntry;
-import com.yahoo.jdisc.Metric.Context;
import com.yahoo.jdisc.References;
import com.yahoo.jdisc.ResourceReference;
import com.yahoo.jdisc.Response;
@@ -22,6 +21,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -54,7 +54,7 @@ class HttpRequestDispatch {
public HttpRequestDispatch(JDiscContext jDiscContext,
AccessLogEntry accessLogEntry,
- Context metricContext,
+ Map<String, Object> requestMetricDimensions,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) throws IOException {
this.jDiscContext = jDiscContext;
@@ -62,7 +62,7 @@ class HttpRequestDispatch {
requestHandler = newRequestHandler(jDiscContext, accessLogEntry, servletRequest);
this.jettyRequest = (Request) servletRequest;
- this.metricReporter = new MetricReporter(jDiscContext.metric, metricContext, jettyRequest.getTimeStamp());
+ this.metricReporter = new MetricReporter(jDiscContext.metric, requestMetricDimensions, jettyRequest.getTimeStamp());
honourMaxKeepAliveRequests();
this.servletResponseController = new ServletResponseController(
servletRequest,
@@ -159,6 +159,7 @@ class HttpRequestDispatch {
try (ResourceReference ref = References.fromResource(jdiscRequest)) {
HttpRequestFactory.copyHeaders(jettyRequest, jdiscRequest);
requestContentChannel = requestHandler.handleRequest(jdiscRequest, servletResponseController.responseHandler);
+ metricReporter.setBindingMatch(jdiscRequest.getBindingMatch());
}
ServletInputStream servletInputStream = jettyRequest.getInputStream();
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java
index ccac5e327fc..7b4bdc3fc8d 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java
@@ -127,7 +127,7 @@ class JDiscFilterInvokerFilter implements Filter {
final AccessLogEntry accessLogEntry = null; // Not used in this context.
return new HttpRequestDispatch(jDiscContext,
accessLogEntry,
- getConnector(request).getRequestMetricContext(request),
+ getConnector(request).getRequestMetricDimensions(request),
request, response);
} catch (IOException e) {
throw throwUnchecked(e);
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java
index 2f5fe7612c8..3b81dd94e11 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java
@@ -14,6 +14,7 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -90,7 +91,7 @@ class JDiscHttpServlet extends HttpServlet {
throws ServletException, IOException {
request.setAttribute(JDiscServerConnector.REQUEST_ATTRIBUTE, getConnector(request));
- Metric.Context metricContext = getMetricContext(request);
+ Metric.Context metricContext = context.metric.createContext(getRequestMetricDimensions(request));
context.metric.add(JettyHttpServer.Metrics.NUM_REQUESTS, 1, metricContext);
context.metric.add(JettyHttpServer.Metrics.JDISC_HTTP_REQUESTS, 1, metricContext);
context.metric.add(JettyHttpServer.Metrics.MANHATTAN_NUM_REQUESTS, 1, metricContext);
@@ -113,7 +114,7 @@ class JDiscHttpServlet extends HttpServlet {
try {
switch (request.getDispatcherType()) {
case REQUEST:
- new HttpRequestDispatch(context, accessLogEntry, getMetricContext(request), request, response)
+ new HttpRequestDispatch(context, accessLogEntry, getRequestMetricDimensions(request), request, response)
.dispatch();
break;
default:
@@ -129,8 +130,8 @@ class JDiscHttpServlet extends HttpServlet {
}
}
- private static Metric.Context getMetricContext(HttpServletRequest request) {
- return JDiscServerConnector.fromRequest(request).getRequestMetricContext(request);
+ private static Map<String, Object> getRequestMetricDimensions(HttpServletRequest request) {
+ return JDiscServerConnector.fromRequest(request).getRequestMetricDimensions(request);
}
private static String formatAttributes(final HttpServletRequest request) {
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java
index 8825ccdfc60..118079a2fba 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java
@@ -15,6 +15,7 @@ import java.lang.reflect.Field;
import java.net.Socket;
import java.net.SocketException;
import java.nio.channels.ServerSocketChannel;
+import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
@@ -123,12 +124,12 @@ class JDiscServerConnector extends ServerConnector {
return metricCtx;
}
- public Metric.Context getRequestMetricContext(HttpServletRequest request) {
- Map<String, Object> props = new TreeMap<>();
+ public Map<String, Object> getRequestMetricDimensions(HttpServletRequest request) {
+ Map<String, Object> props = new HashMap<>();
props.put(JettyHttpServer.Metrics.NAME_DIMENSION, connectorName);
props.put(JettyHttpServer.Metrics.PORT_DIMENSION, listenPort);
props.put(JettyHttpServer.Metrics.METHOD_DIMENSION, request.getMethod());
- return metric.createContext(props);
+ return props;
}
public static JDiscServerConnector fromRequest(ServletRequest request) {
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
index f149d6eb34d..24367863fbc 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
@@ -67,6 +67,7 @@ public class JettyHttpServer extends AbstractServerProvider {
String NAME_DIMENSION = "serverName";
String PORT_DIMENSION = "serverPort";
String METHOD_DIMENSION = "httpMethod";
+ String HANDLER_DIMENSION = "handler";
String NUM_OPEN_CONNECTIONS = "serverNumOpenConnections";
String NUM_CONNECTIONS_OPEN_MAX = "serverConnectionsOpenMax";
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/MetricReporter.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/MetricReporter.java
index ba9c42abd74..00b8b262000 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/MetricReporter.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/MetricReporter.java
@@ -3,20 +3,25 @@ package com.yahoo.jdisc.http.server.jetty;
import com.yahoo.jdisc.Metric;
import com.yahoo.jdisc.Metric.Context;
-
+import com.yahoo.jdisc.application.BindingMatch;
+import com.yahoo.jdisc.application.UriPattern;
+import com.yahoo.jdisc.handler.RequestHandler;
import com.yahoo.jdisc.http.server.jetty.JettyHttpServer.Metrics;
-import org.jetbrains.annotations.Nullable;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Responsible for metric reporting for JDisc http request handler support.
- * @author tonytv
+ *
+ * @author Tony Vaagenes
*/
public class MetricReporter {
private final Metric metric;
- private final @Nullable Context context;
+ private volatile Context context;
+ private final Map<String, Object> requestDimensions;
private final long requestStartTime;
@@ -24,12 +29,22 @@ public class MetricReporter {
private final AtomicBoolean firstSetOfTimeToFirstByte = new AtomicBoolean(true);
- public MetricReporter(Metric metric, @Nullable Context context, long requestStartTime) {
+ public MetricReporter(Metric metric, Map<String, Object> requestDimensions, long requestStartTime) {
this.metric = metric;
- this.context = context;
+ this.context = metric.createContext(requestDimensions);
+ this.requestDimensions = requestDimensions;
this.requestStartTime = requestStartTime;
}
+ public void setBindingMatch(BindingMatch<?> bindingMatch) {
+ if (bindingMatch == null) return;
+ UriPattern pattern = bindingMatch.matched();
+ if (pattern == null) return;
+ Map<String, Object> combinedDimensions = new HashMap<>(requestDimensions);
+ combinedDimensions.put(Metrics.HANDLER_DIMENSION, bindingMatch.toString());
+ this.context = metric.createContext(combinedDimensions);
+ }
+
@SuppressWarnings("deprecation")
public void successfulWrite(int numBytes) {
setTimeToFirstByteFirstTime();