aboutsummaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorBjorn Meland <bjormel@verizonmedia.com>2020-01-06 16:25:02 +0100
committerBjorn Meland <bjormel@verizonmedia.com>2020-01-06 16:25:02 +0100
commit86c0770cb2078ed35b061adb63c7ed85426081b0 (patch)
treeed3760d5727839fffb2516500f99e7d25c1fcb25 /container-core
parent2f50f82439d19e815306b99c98003d02d6c97ccc (diff)
Adding endpoint as a dimension to handled.requests and handled.latency
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java24
1 files changed, 12 insertions, 12 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
index 7789cae50aa..bfcecd61fa4 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
@@ -2,7 +2,6 @@
package com.yahoo.container.jdisc;
import com.google.inject.Inject;
-import com.yahoo.concurrent.CopyOnWriteHashMap;
import com.yahoo.jdisc.Metric;
import com.yahoo.jdisc.Request;
import com.yahoo.jdisc.ResourceReference;
@@ -19,13 +18,13 @@ import com.yahoo.jdisc.handler.ResponseHandler;
import com.yahoo.log.LogLevel;
import java.time.Duration;
+import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
-import static java.util.Collections.singletonMap;
/**
* A request handler which assigns a worker thread to handle each request.
@@ -79,19 +78,20 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
this.allowAsyncResponse = allowAsyncResponse;
}
- private Map<String, Metric.Context> handlerContexts = new CopyOnWriteHashMap<>();
- private Metric.Context contextFor(BindingMatch match) {
+ private Metric.Context contextFor(Request request) {
+ BindingMatch match = request.getBindingMatch();
if (match == null) return null;
UriPattern matched = match.matched();
if (matched == null) return null;
String name = matched.toString();
- Metric.Context context = handlerContexts.get(name);
- if (context == null) {
- Map<String, String> dimensions = singletonMap("handler", name);
- context = this.metric.createContext(dimensions);
- handlerContexts.put(name, context);
+ String endpoint = request.headers().containsKey("Host") ? request.headers().get("Host").get(0) : null;
+
+ Map<String, String> dimensions = new HashMap<>();
+ dimensions.put("handler", name);
+ if (endpoint != null) {
+ dimensions.put("endpoint", endpoint);
}
- return context;
+ return this.metric.createContext(dimensions);
}
/**
@@ -101,7 +101,7 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
*/
@Override
public final ContentChannel handleRequest(Request request, ResponseHandler responseHandler) {
- metric.add("handled.requests", 1, contextFor(request.getBindingMatch()));
+ metric.add("handled.requests", 1, contextFor(request));
if (request.getTimeout(TimeUnit.SECONDS) == null) {
Duration timeout = getTimeout();
if (timeout != null) {
@@ -195,7 +195,7 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
if ( tryHasResponded()) throw new IllegalStateException("Response already handled");
ContentChannel cc = responseHandler.handleResponse(response);
long millis = request.timeElapsed(TimeUnit.MILLISECONDS);
- metric.set("handled.latency", millis, contextFor(request.getBindingMatch()));
+ metric.set("handled.latency", millis, contextFor(request));
return cc;
}