summaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/container/core/HandlerMetricContextUtil.java
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-09-25 12:00:20 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-09-25 14:19:41 +0200
commit3fe333d33ea24af3f6ebed8e3986db2d82a98bb6 (patch)
treef5b935f797c070e9070e027ded48113fae74c795 /container-core/src/main/java/com/yahoo/container/core/HandlerMetricContextUtil.java
parentc12f4775a03f1d16420a689f0b9d50d35c32413b (diff)
Eliminate code duplication in generating metric context for requests
Diffstat (limited to 'container-core/src/main/java/com/yahoo/container/core/HandlerMetricContextUtil.java')
-rw-r--r--container-core/src/main/java/com/yahoo/container/core/HandlerMetricContextUtil.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/core/HandlerMetricContextUtil.java b/container-core/src/main/java/com/yahoo/container/core/HandlerMetricContextUtil.java
new file mode 100644
index 00000000000..7cfbab0dffa
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/container/core/HandlerMetricContextUtil.java
@@ -0,0 +1,44 @@
+package com.yahoo.container.core;
+
+import com.yahoo.jdisc.Metric;
+import com.yahoo.jdisc.Request;
+import com.yahoo.jdisc.application.BindingMatch;
+import com.yahoo.jdisc.application.UriPattern;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Common conversion from a handled http request to a metric context.
+ *
+ * @author jonmv
+ */
+public class HandlerMetricContextUtil {
+
+ public static Metric.Context contextFor(Request request, Metric metric, Class<?> handlerClass) {
+ return contextFor(request, Map.of(), metric, handlerClass);
+ }
+
+ public static Metric.Context contextFor(Request request, Map<String, String> extraDimensions, Metric metric, Class<?> handlerClass) {
+ BindingMatch<?> match = request.getBindingMatch();
+ if (match == null) return null;
+ UriPattern matched = match.matched();
+ if (matched == null) return null;
+ String name = matched.toString();
+ 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);
+ }
+ URI uri = request.getUri();
+ dimensions.put("scheme", uri.getScheme());
+ dimensions.put("port", Integer.toString(uri.getPort()));
+ dimensions.put("handler-name", handlerClass.getName());
+ dimensions.putAll(extraDimensions);
+ return metric.createContext(dimensions);
+ }
+
+}