From 8d32689ff1b06c554c245231840e5d2b3695e092 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Thu, 4 Apr 2019 15:27:41 +0200 Subject: Add scheme as dimension to request metrics --- .../http/server/jetty/JDiscServerConnector.java | 31 ++++++++++++++++++++-- .../jdisc/http/server/jetty/JettyHttpServer.java | 1 + 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty') 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 6b371473a57..556d80d3772 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 @@ -17,6 +17,7 @@ import java.net.SocketException; import java.nio.channels.ServerSocketChannel; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -28,7 +29,7 @@ class JDiscServerConnector extends ServerConnector { public static final String REQUEST_ATTRIBUTE = JDiscServerConnector.class.getName(); private final static Logger log = Logger.getLogger(JDiscServerConnector.class.getName()); private final Metric.Context metricCtx; - private final Map requestMetricContextCache = new ConcurrentHashMap<>(); + private final Map requestMetricContextCache = new ConcurrentHashMap<>(); private final ServerConnectionStatistics statistics; private final boolean tcpKeepAlive; private final boolean tcpNoDelay; @@ -124,9 +125,12 @@ class JDiscServerConnector extends ServerConnector { public Metric.Context getRequestMetricContext(HttpServletRequest request) { String method = request.getMethod(); - return requestMetricContextCache.computeIfAbsent(method, ignored -> { + String scheme = request.getScheme(); + var requestDimensions = new RequestDimensions(method, scheme); + return requestMetricContextCache.computeIfAbsent(requestDimensions, ignored -> { Map dimensions = createConnectorDimensions(listenPort, connectorName); dimensions.put(JettyHttpServer.Metrics.METHOD_DIMENSION, method); + dimensions.put(JettyHttpServer.Metrics.SCHEME_DIMENSION, scheme); return metric.createContext(dimensions); }); } @@ -142,4 +146,27 @@ class JDiscServerConnector extends ServerConnector { return props; } + private static class RequestDimensions { + final String method; + final String scheme; + + RequestDimensions(String method, String scheme) { + this.method = method; + this.scheme = scheme; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RequestDimensions that = (RequestDimensions) o; + return Objects.equals(method, that.method) && Objects.equals(scheme, that.scheme); + } + + @Override + public int hashCode() { + return Objects.hash(method, scheme); + } + } + } 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 0dbc5f59f67..49ae54f7db3 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 @@ -71,6 +71,7 @@ public class JettyHttpServer extends AbstractServerProvider { String NAME_DIMENSION = "serverName"; String PORT_DIMENSION = "serverPort"; String METHOD_DIMENSION = "httpMethod"; + String SCHEME_DIMENSION = "scheme"; String NUM_OPEN_CONNECTIONS = "serverNumOpenConnections"; String NUM_CONNECTIONS_OPEN_MAX = "serverConnectionsOpenMax"; -- cgit v1.2.3