From fbe22cb5ca3a840d39ec5e9505c9a90baeb92092 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Fri, 8 Mar 2019 09:16:07 +0100 Subject: Store resource name instead of entire URL --- .../yahoo/vespa/hosted/controller/auditlog/AuditLog.java | 13 ++++++------- .../yahoo/vespa/hosted/controller/auditlog/AuditLogger.java | 2 +- .../hosted/controller/persistence/AuditLogSerializer.java | 7 +++---- .../controller/restapi/controller/AuditLogResponse.java | 2 +- .../vespa/hosted/controller/auditlog/AuditLoggerTest.java | 1 + .../controller/persistence/AuditLogSerializerTest.java | 9 ++++----- .../controller/restapi/controller/responses/auditlog.json | 4 ++-- 7 files changed, 18 insertions(+), 20 deletions(-) (limited to 'controller-server') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLog.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLog.java index 8302be5c61e..2efb8b5bbcd 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLog.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLog.java @@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.controller.auditlog; import com.google.common.collect.Ordering; import org.jetbrains.annotations.NotNull; -import java.net.URI; import java.time.Instant; import java.util.ArrayList; import java.util.Comparator; @@ -58,14 +57,14 @@ public class AuditLog { private final Instant at; private final String principal; private final Method method; - private final URI url; + private final String resource; private final Optional data; - public Entry(Instant at, String principal, Method method, URI url, Optional data) { + public Entry(Instant at, String principal, Method method, String resource, Optional data) { this.at = Objects.requireNonNull(at, "at must be non-null"); this.principal = Objects.requireNonNull(principal, "principal must be non-null"); this.method = Objects.requireNonNull(method, "method must be non-null"); - this.url = Objects.requireNonNull(url, "url must be non-null"); + this.resource = Objects.requireNonNull(resource, "resource must be non-null"); this.data = truncateData(data); } @@ -84,9 +83,9 @@ public class AuditLog { return method; } - /** Request URL */ - public URI url() { - return url; + /** API resource (URL path) */ + public String resource() { + return resource; } /** Request data. This may be truncated if request data logged in this entry was too large */ diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLogger.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLogger.java index 5ab0cb533f7..fcf33a92f79 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLogger.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLogger.java @@ -66,7 +66,7 @@ public class AuditLogger { } Instant now = clock.instant(); - AuditLog.Entry entry = new AuditLog.Entry(now, principal.getName(), method.get(), request.getUri(), + AuditLog.Entry entry = new AuditLog.Entry(now, principal.getName(), method.get(), request.getUri().getPath(), Optional.of(new String(data, StandardCharsets.UTF_8))); try (Lock lock = db.lockAuditLog()) { AuditLog auditLog = db.readAuditLog() diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java index 0b89c9158e4..93dd59e577f 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializer.java @@ -7,7 +7,6 @@ import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; import com.yahoo.vespa.hosted.controller.auditlog.AuditLog; -import java.net.URI; import java.time.Instant; import java.util.ArrayList; import java.util.List; @@ -25,7 +24,7 @@ public class AuditLogSerializer { private static final String atField = "at"; private static final String principalField = "principal"; private static final String methodField = "method"; - private static final String urlField = "url"; + private static final String resourceField = "resource"; private static final String dataField = "data"; public Slime toSlime(AuditLog log) { @@ -37,7 +36,7 @@ public class AuditLogSerializer { entryObject.setLong(atField, entry.at().toEpochMilli()); entryObject.setString(principalField, entry.principal()); entryObject.setString(methodField, asString(entry.method())); - entryObject.setString(urlField, entry.url().toString()); + entryObject.setString(resourceField, entry.resource()); entry.data().ifPresent(data -> entryObject.setString(dataField, data)); }); return slime; @@ -51,7 +50,7 @@ public class AuditLogSerializer { Instant.ofEpochMilli(entryObject.field(atField).asLong()), entryObject.field(principalField).asString(), methodFrom(entryObject.field(methodField)), - URI.create(entryObject.field(urlField).asString()), + entryObject.field(resourceField).asString(), optionalField(entryObject.field(dataField), Function.identity()) )); }); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/AuditLogResponse.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/AuditLogResponse.java index f24ddbfec94..01959104491 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/AuditLogResponse.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/AuditLogResponse.java @@ -24,7 +24,7 @@ public class AuditLogResponse extends SlimeJsonResponse { entryObject.setString("time", entry.at().toString()); entryObject.setString("user", entry.principal()); entryObject.setString("method", entry.method().name()); - entryObject.setString("url", entry.url().toString()); + entryObject.setString("resource", entry.resource()); entry.data().ifPresent(data -> entryObject.setString("data", data)); }); return slime; diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java index 0353a774cab..4354c1968e8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java @@ -44,6 +44,7 @@ public class AuditLoggerTest { assertEquals(instant(), log.get().entries().get(0).at()); assertEquals("user", log.get().entries().get(0).principal()); assertEquals(Entry.Method.PATCH, log.get().entries().get(0).method()); + assertEquals("/os/v1/", log.get().entries().get(0).resource()); assertEquals(data, log.get().entries().get(0).data().get()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java index 00ad83f0a83..439347a77a8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java @@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.vespa.hosted.controller.auditlog.AuditLog; import org.junit.Test; -import java.net.URI; import java.time.Duration; import java.time.Instant; import java.util.List; @@ -27,13 +26,13 @@ public class AuditLogSerializerTest { AuditLog log = new AuditLog(List.of( new AuditLog.Entry(i1, "bar", AuditLog.Entry.Method.POST, - URI.create("http://localhost/bar/baz/"), + "/bar/baz/", Optional.of("0".repeat(2048))), new AuditLog.Entry(i2, "foo", AuditLog.Entry.Method.POST, - URI.create("http://localhost/foo/bar/"), + "/foo/bar/", Optional.of("{\"foo\":\"bar\"}")), new AuditLog.Entry(i3, "baz", AuditLog.Entry.Method.POST, - URI.create("http://localhost/foo/baz/"), + "/foo/baz/", Optional.of("")) )); @@ -48,7 +47,7 @@ public class AuditLogSerializerTest { assertEquals(entry.at().truncatedTo(MILLIS), serializedEntry.at()); assertEquals(entry.principal(), serializedEntry.principal()); assertEquals(entry.method(), serializedEntry.method()); - assertEquals(entry.url(), serializedEntry.url()); + assertEquals(entry.resource(), serializedEntry.resource()); assertEquals(entry.data(), serializedEntry.data()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/auditlog.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/auditlog.json index 3eff75feb86..ab5bda78db0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/auditlog.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/auditlog.json @@ -4,14 +4,14 @@ "time": "2019-03-01T14:13:14Z", "user": "operator2", "method": "POST", - "url": "http://localhost:8080/controller/v1/jobs/upgrader/confidence/6.42", + "resource": "/controller/v1/jobs/upgrader/confidence/6.42", "data": "broken" }, { "time": "2019-03-01T12:13:14Z", "user": "operator1", "method": "POST", - "url": "http://localhost:8080/controller/v1/maintenance/inactive/DeploymentExpirer" + "resource": "/controller/v1/maintenance/inactive/DeploymentExpirer" } ] } -- cgit v1.2.3