diff options
author | Ola Aunrønning <olaa@yahooinc.com> | 2023-06-08 10:58:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-08 10:58:17 +0200 |
commit | 79de2d78433c11932357d0c244704b16fc87da21 (patch) | |
tree | 382a06ce4e1217e395fbba25c1ce74a1afaadbe5 /container-core | |
parent | 96d3814b80a693ee46640ae89a88fdb2d78dcd40 (diff) | |
parent | d7568f0d450df2287657ac18c37955a1867496f5 (diff) |
Merge branch 'master' into olaa/dataplane-proxy-config
Diffstat (limited to 'container-core')
7 files changed, 49 insertions, 2 deletions
diff --git a/container-core/pom.xml b/container-core/pom.xml index 5fed4f02912..eec8b60077b 100644 --- a/container-core/pom.xml +++ b/container-core/pom.xml @@ -445,6 +445,9 @@ <groupId>com.yahoo.vespa</groupId> <artifactId>bundle-plugin</artifactId> <extensions>true</extensions> + <configuration> + <bundleType>CORE</bundleType> + </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java index 8c0356517e3..538397fad24 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java @@ -4,6 +4,7 @@ package com.yahoo.container.jdisc.state; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.yahoo.component.Vtag; import java.io.IOException; import java.nio.file.Path; @@ -41,6 +42,9 @@ public class HostLifeGatherer { metrics.put("uptime", upTime); metrics.put("alive", 1); jsonObject.set("metrics", metrics); + ObjectNode dimensions = jsonMapper.createObjectNode(); + dimensions.put("vespaVersion", Vtag.currentVersion.toFullString()); + jsonObject.set("dimensions", dimensions); return jsonObject; } diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java b/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java index 57fbd5eb96c..51264f6b3a9 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java @@ -56,6 +56,7 @@ public class MultiPartFormParser { public String name() { return name; } public InputStream data() { return data; } public String contentType() { return contentType; } + @Override public String toString() { return "PartItem{" + "name='" + name + '\'' + ", contentType='" + contentType + '\'' + '}'; } } public static class MultiPartException extends IOException { diff --git a/container-core/src/main/java/com/yahoo/container/logging/ConnectionLogEntry.java b/container-core/src/main/java/com/yahoo/container/logging/ConnectionLogEntry.java index e2eeb5d3517..2f1dc1fd96f 100644 --- a/container-core/src/main/java/com/yahoo/container/logging/ConnectionLogEntry.java +++ b/container-core/src/main/java/com/yahoo/container/logging/ConnectionLogEntry.java @@ -38,6 +38,8 @@ public class ConnectionLogEntry { private final List<String> sslSubjectAlternativeNames; private final String httpProtocol; private final String proxyProtocolVersion; + private final Long sslBytesReceived; + private final Long sslBytesSent; private ConnectionLogEntry(Builder builder) { @@ -67,6 +69,8 @@ public class ConnectionLogEntry { this.sslSubjectAlternativeNames = builder.sslSubjectAlternativeNames; this.httpProtocol = builder.httpProtocol; this.proxyProtocolVersion = builder.proxyProtocolVersion; + this.sslBytesReceived = builder.sslBytesReceived; + this.sslBytesSent = builder.sslBytesSent; } public static Builder builder(UUID id, Instant timestamp) { @@ -99,6 +103,8 @@ public class ConnectionLogEntry { public List<String> sslSubjectAlternativeNames() { return sslSubjectAlternativeNames == null ? List.of() : sslSubjectAlternativeNames; } public Optional<String> httpProtocol() { return Optional.ofNullable(httpProtocol); } public Optional<String> proxyProtocolVersion() { return Optional.ofNullable(proxyProtocolVersion); } + public Optional<Long> sslBytesReceived() { return Optional.ofNullable(sslBytesReceived); } + public Optional<Long> sslBytesSent() { return Optional.ofNullable(sslBytesSent); } public static class SslHandshakeFailure { private final String type; @@ -153,6 +159,8 @@ public class ConnectionLogEntry { private List<String> sslSubjectAlternativeNames; private String httpProtocol; private String proxyProtocolVersion; + private Long sslBytesReceived; + private Long sslBytesSent; Builder(UUID id, Instant timestamp) { @@ -257,6 +265,14 @@ public class ConnectionLogEntry { this.proxyProtocolVersion = version; return this; } + public Builder withSslBytesReceived(long bytesReceived) { + this.sslBytesReceived = bytesReceived; + return this; + } + public Builder withSslBytesSent(long bytesSent) { + this.sslBytesSent = bytesSent; + return this; + } public ConnectionLogEntry build(){ return new ConnectionLogEntry(this); diff --git a/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java b/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java index 6d98c247ca0..20a3e9753cc 100644 --- a/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java +++ b/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java @@ -70,12 +70,15 @@ class JsonConnectionLogWriter implements LogWriter<ConnectionLogEntry> { String sslSniServerName = unwrap(record.sslSniServerName()); String sslPeerIssuerSubject = unwrap(record.sslPeerIssuerSubject()); String sslPeerFingerprint = unwrap(record.sslPeerFingerprint()); + Long sslBytesReceived = unwrap(record.sslBytesReceived()); + Long sslBytesSent = unwrap(record.sslBytesSent()); ConnectionLogEntry.SslHandshakeFailure sslHandshakeFailure = unwrap(record.sslHandshakeFailure()); List<String> sslSubjectAlternativeNames = record.sslSubjectAlternativeNames(); if (isAnyValuePresent( sslProtocol, sslSessionId, sslCipherSuite, sslPeerSubject, sslPeerNotBefore, sslPeerNotAfter, - sslSniServerName, sslHandshakeFailure, sslPeerIssuerSubject, sslPeerFingerprint)) { + sslSniServerName, sslHandshakeFailure, sslPeerIssuerSubject, sslPeerFingerprint, + sslBytesReceived, sslBytesSent)) { generator.writeObjectFieldStart("ssl"); writeOptionalString(generator, "protocol", sslProtocol); @@ -87,6 +90,8 @@ class JsonConnectionLogWriter implements LogWriter<ConnectionLogEntry> { writeOptionalTimestamp(generator, "peerNotAfter", sslPeerNotAfter); writeOptionalString(generator, "peerFingerprint", sslPeerFingerprint); writeOptionalString(generator, "sniServerName", sslSniServerName); + writeOptionalLong(generator, "bytesReceived", sslBytesReceived); + writeOptionalLong(generator, "bytesSent", sslBytesSent); if (sslHandshakeFailure != null) { generator.writeObjectFieldStart("handshake-failure"); diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyConnectionLogger.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyConnectionLogger.java index 6406125dcc3..2ea3863cc5a 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyConnectionLogger.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyConnectionLogger.java @@ -42,7 +42,6 @@ import java.util.List; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.stream.Collectors; /** * Jetty integration for jdisc connection log ({@link ConnectionLog}). @@ -137,6 +136,9 @@ class JettyConnectionLogger extends AbstractLifeCycle implements Connection.List if (connection instanceof HttpConnection) { info.setHttpBytes(connection.getBytesIn(), connection.getBytesOut()); } + if (connection.getEndPoint() instanceof SslConnection.DecryptedEndPoint ssl) { + info.setSslBytes(ssl.getSslConnection().getBytesIn(), ssl.getSslConnection().getBytesOut()); + } if (!endpoint.isOpen()) { info.setClosedAt(System.currentTimeMillis()); connectionLog.log(info.toLogEntry()); @@ -258,6 +260,8 @@ class JettyConnectionLogger extends AbstractLifeCycle implements Connection.List private List<String> sslSubjectAlternativeNames; private String proxyProtocolVersion; private String httpProtocol; + private long sslBytesReceived = 0; + private long sslBytesSent = 0; private ConnectionInfo(UUID uuid, long createdAt, InetSocketAddress localAddress, InetSocketAddress peerAddress) { this.uuid = uuid; @@ -330,6 +334,12 @@ class JettyConnectionLogger extends AbstractLifeCycle implements Connection.List synchronized ConnectionInfo setProxyProtocolVersion(String version) { this.proxyProtocolVersion = version; return this; } + synchronized ConnectionInfo setSslBytes(long received, long sent) { + this.sslBytesReceived = received; + this.sslBytesSent = sent; + return this; + } + synchronized ConnectionLogEntry toLogEntry() { ConnectionLogEntry.Builder builder = ConnectionLogEntry.builder(uuid, Instant.ofEpochMilli(createdAt)); if (closedAt > 0) { @@ -400,6 +410,12 @@ class JettyConnectionLogger extends AbstractLifeCycle implements Connection.List if (proxyProtocolVersion != null) { builder.withProxyProtocolVersion(proxyProtocolVersion); } + if (sslBytesReceived > 0) { + builder.withSslBytesReceived(sslBytesReceived); + } + if (sslBytesSent > 0) { + builder.withSslBytesSent(sslBytesSent); + } return builder.build(); } diff --git a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java index d56daa34f03..0a697bd8fb3 100644 --- a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java +++ b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java @@ -706,6 +706,8 @@ public class HttpServerTest { Assertions.assertThat(logEntry.sslSessionId()).hasValueSatisfying(sessionId -> Assertions.assertThat(sessionId).hasSize(64)); Assertions.assertThat(logEntry.sslPeerNotBefore()).hasValue(Instant.EPOCH); Assertions.assertThat(logEntry.sslPeerNotAfter()).hasValue(Instant.EPOCH.plus(100_000, ChronoUnit.DAYS)); + Assertions.assertThat(logEntry.sslBytesReceived()).hasValueSatisfying(value -> Assertions.assertThat(value).isGreaterThan(100000L)); + Assertions.assertThat(logEntry.sslBytesSent()).hasValueSatisfying(value -> Assertions.assertThat(value).isGreaterThan(10000L)); } @Test |