summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-07-12 16:09:14 +0200
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-07-12 16:40:59 +0200
commit0203110fa97f6a9691c1397e667720b9b260d633 (patch)
treeeb780abe4c88a39c57e92a4e4f94ad7c43c24aa6 /jdisc_http_service
parent839291730624c0a605e0e53e476473e190b8925c (diff)
Expose connection timestamp to all request types
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java3
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java20
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletOrJdiscHttpRequest.java25
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletRequest.java10
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/filter/ServletFilterRequestTest.java6
5 files changed, 43 insertions, 21 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java
index bc41eb0006f..2268b568b18 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java
@@ -192,14 +192,13 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest {
/**
* <p>For server requests, this returns the timestamp of when the underlying HTTP channel was connected.
- * This is whatever value was returned by {@link
- * com.yahoo.jdisc.Timer#currentTimeMillis()} at the time.</p>
*
* <p>For client requests, this returns the same value as {@link #creationTime(java.util.concurrent.TimeUnit)}.</p>
*
* @param unit the unit to return the time in
* @return the timestamp of when the underlying HTTP channel was connected, or request creation time
*/
+ @Override
public long getConnectedAt(TimeUnit unit) {
return unit.convert(connectedAt, TimeUnit.MILLISECONDS);
}
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java
index 87342d4d7c4..166194de505 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java
@@ -1,6 +1,13 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.http.filter;
+import com.yahoo.jdisc.HeaderFields;
+import com.yahoo.jdisc.http.Cookie;
+import com.yahoo.jdisc.http.HttpHeaders;
+import com.yahoo.jdisc.http.HttpRequest;
+import com.yahoo.jdisc.http.HttpRequest.Version;
+import com.yahoo.jdisc.http.servlet.ServletOrJdiscHttpRequest;
+
import java.net.InetSocketAddress;
import java.net.URI;
import java.security.Principal;
@@ -14,16 +21,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
-
-import com.yahoo.jdisc.http.servlet.ServletOrJdiscHttpRequest;
-import com.yahoo.jdisc.HeaderFields;
-import com.yahoo.jdisc.http.Cookie;
-import com.yahoo.jdisc.http.HttpHeaders;
-import com.yahoo.jdisc.http.HttpRequest;
-import com.yahoo.jdisc.http.HttpRequest.Version;
-
/**
* The Request class on which all filters will operate upon.
* <p>
@@ -268,6 +268,10 @@ public abstract class DiscFilterRequest {
parent.encodeCookieHeader(cookies);
}
+ public long getConnectedAt(TimeUnit unit) {
+ return parent.getConnectedAt(unit);
+ }
+
public String getProtocol() {
return getVersion().name();
}
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletOrJdiscHttpRequest.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletOrJdiscHttpRequest.java
index ed3cdcb55b8..eaac2b1c415 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletOrJdiscHttpRequest.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletOrJdiscHttpRequest.java
@@ -9,29 +9,32 @@ import java.net.SocketAddress;
import java.net.URI;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
/**
* Common interface for JDisc and servlet http requests.
*/
public interface ServletOrJdiscHttpRequest {
- public void copyHeaders(HeaderFields target);
+ void copyHeaders(HeaderFields target);
- public Map<String, List<String>> parameters();
+ Map<String, List<String>> parameters();
- public URI getUri();
+ URI getUri();
- public HttpRequest.Version getVersion();
+ HttpRequest.Version getVersion();
- public String getRemoteHostAddress();
- public String getRemoteHostName();
- public int getRemotePort();
+ String getRemoteHostAddress();
+ String getRemoteHostName();
+ int getRemotePort();
- public void setRemoteAddress(SocketAddress remoteAddress);
+ void setRemoteAddress(SocketAddress remoteAddress);
- public Map<String, Object> context();
+ Map<String, Object> context();
- public List<Cookie> decodeCookieHeader();
+ List<Cookie> decodeCookieHeader();
- public void encodeCookieHeader(List<Cookie> cookies);
+ void encodeCookieHeader(List<Cookie> cookies);
+
+ long getConnectedAt(TimeUnit unit);
}
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletRequest.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletRequest.java
index ba5c499e80c..3cbe415d39d 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletRequest.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/servlet/ServletRequest.java
@@ -21,6 +21,9 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+import static com.yahoo.jdisc.http.core.HttpServletRequestUtils.getConnection;
/**
* Mutable wrapper to use a {@link javax.servlet.http.HttpServletRequest}
@@ -39,6 +42,7 @@ public class ServletRequest extends HttpServletRequestWrapper implements Servlet
private final Set<String> headerBlacklist = new HashSet<>();
private final Map<String, Object> context = new HashMap<>();
private final Map<String, List<String>> parameters = new HashMap<>();
+ private final long connectedAt;
private URI uri;
private String remoteHostAddress;
@@ -57,6 +61,7 @@ public class ServletRequest extends HttpServletRequestWrapper implements Servlet
remoteHostAddress = request.getRemoteAddr();
remoteHostName = request.getRemoteHost();
remotePort = request.getRemotePort();
+ connectedAt = getConnection(request).getCreatedTimeStamp();
headerFields = new HeaderFields();
Enumeration<String> parentHeaders = request.getHeaderNames();
@@ -242,4 +247,9 @@ public class ServletRequest extends HttpServletRequestWrapper implements Servlet
public void encodeCookieHeader(List<Cookie> cookies) {
setHeaders(HttpHeaders.Names.COOKIE, Cookie.toCookieHeader(cookies));
}
+
+ @Override
+ public long getConnectedAt(TimeUnit unit) {
+ return unit.convert(connectedAt, TimeUnit.MILLISECONDS);
+ }
}
diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/filter/ServletFilterRequestTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/filter/ServletFilterRequestTest.java
index f0947308b28..c11d24ef888 100644
--- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/filter/ServletFilterRequestTest.java
+++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/filter/ServletFilterRequestTest.java
@@ -4,6 +4,8 @@ package com.yahoo.jdisc.http.filter;
import com.yahoo.jdisc.http.Cookie;
import com.yahoo.jdisc.http.HttpHeaders;
import com.yahoo.jdisc.http.servlet.ServletRequest;
+import org.eclipse.jetty.server.HttpConnection;
+import org.mockito.Mockito;
import org.springframework.mock.web.MockHttpServletRequest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -14,6 +16,7 @@ import java.util.Collections;
import java.util.List;
import static com.yahoo.jdisc.http.HttpRequest.Version;
+import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
@@ -60,6 +63,9 @@ public class ServletFilterRequestTest {
parent.setParameter(listParamName, listParamValue);
parent.addHeader(headerName, headerValue);
parent.setAttribute(attributeName, attributeValue);
+ HttpConnection connection = Mockito.mock(HttpConnection.class);
+ when(connection.getCreatedTimeStamp()).thenReturn(System.currentTimeMillis());
+ parent.setAttribute("org.eclipse.jetty.server.HttpConnection", connection);
return new ServletRequest(parent, uri);
}