summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-07-06 16:11:34 +0200
committerBjørn Christian Seime <bjorncs@oath.com>2018-07-06 16:11:34 +0200
commiteeb717999f09995e68224c230ca9305610828c16 (patch)
tree1cfc9f3671214cfbb522e32a30e7ce2dffab9886 /jdisc_http_service
parentfe1028e5ae93593dd42ec9358e1aeb17d507d993 (diff)
Cache metric context instances
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java31
1 files changed, 17 insertions, 14 deletions
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..f7d6e1717af 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,8 +15,9 @@ 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.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -27,6 +28,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<String, Metric.Context> requestMetricContextCache = new ConcurrentHashMap<>();
private final ServerConnectionStatistics statistics;
private final boolean tcpKeepAlive;
private final boolean tcpNoDelay;
@@ -41,22 +43,15 @@ class JDiscServerConnector extends ServerConnector {
this.channelOpenedByActivator = channelOpenedByActivator;
this.tcpKeepAlive = config.tcpKeepAliveEnabled();
this.tcpNoDelay = config.tcpNoDelay();
- this.metricCtx = createMetricContext(config, metric);
this.metric = metric;
this.connectorName = config.name();
this.listenPort = config.listenPort();
+ this.metricCtx = metric.createContext(createConnectorDimensions(listenPort, connectorName));
this.statistics = new ServerConnectionStatistics();
addBean(statistics);
}
- private Metric.Context createMetricContext(ConnectorConfig config, Metric metric) {
- Map<String, Object> props = new TreeMap<>();
- props.put(JettyHttpServer.Metrics.NAME_DIMENSION, config.name());
- props.put(JettyHttpServer.Metrics.PORT_DIMENSION, config.listenPort());
- return metric.createContext(props);
- }
-
@Override
protected void configure(final Socket socket) {
super.configure(socket);
@@ -124,15 +119,23 @@ class JDiscServerConnector extends ServerConnector {
}
public Metric.Context getRequestMetricContext(HttpServletRequest request) {
- Map<String, Object> props = new TreeMap<>();
- 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);
+ String method = request.getMethod();
+ return requestMetricContextCache.computeIfAbsent(method, ignored -> {
+ Map<String, Object> dimensions = createConnectorDimensions(listenPort, connectorName);
+ dimensions.put(JettyHttpServer.Metrics.METHOD_DIMENSION, method);
+ return metric.createContext(dimensions);
+ });
}
public static JDiscServerConnector fromRequest(ServletRequest request) {
return (JDiscServerConnector) request.getAttribute(REQUEST_ATTRIBUTE);
}
+ private static Map<String, Object> createConnectorDimensions(int listenPort, String connectorName) {
+ Map<String, Object> props = new HashMap<>();
+ props.put(JettyHttpServer.Metrics.NAME_DIMENSION, connectorName);
+ props.put(JettyHttpServer.Metrics.PORT_DIMENSION, listenPort);
+ return props;
+ }
+
}