From 390420bde10b12fcd63b6e6b7ab8c5a2ad102d8e Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Mon, 20 Apr 2026 10:02:17 -0400 Subject: [PATCH 1/9] RDAP latency metrics --- .../google/registry/rdap/RdapActionBase.java | 6 ++++- .../google/registry/rdap/RdapMetrics.java | 22 +++++++++++++++++++ .../registry/rdap/RdapActionBaseTest.java | 9 ++++++++ .../google/registry/rdap/RdapMetricsTest.java | 10 +++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/google/registry/rdap/RdapActionBase.java b/core/src/main/java/google/registry/rdap/RdapActionBase.java index 94804bf0a17..ef7283f77c3 100644 --- a/core/src/main/java/google/registry/rdap/RdapActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapActionBase.java @@ -132,6 +132,7 @@ abstract ReplyPayloadBase getJsonObjectForResource( @Override public void run() { + java.time.Instant startTime = clock.now(); metricInformationBuilder.setIncludeDeleted(includeDeletedParam.orElse(false)); metricInformationBuilder.setRole(rdapAuthorization.role()); metricInformationBuilder.setRequestMethod(requestMethod); @@ -180,7 +181,10 @@ public void run() { setError(SC_INTERNAL_SERVER_ERROR, "Internal Server Error", "An error was encountered"); logger.atSevere().withCause(e).log("Exception encountered while processing RDAP command."); } - rdapMetrics.updateMetrics(metricInformationBuilder.build()); + long processingTime = java.time.Duration.between(startTime, clock.now()).toMillis(); + RdapMetrics.RdapMetricInformation metricInfo = metricInformationBuilder.build(); + rdapMetrics.updateMetrics(metricInfo); + rdapMetrics.recordProcessingTime(metricInfo, processingTime); } void setError(int status, String title, String description) { diff --git a/core/src/main/java/google/registry/rdap/RdapMetrics.java b/core/src/main/java/google/registry/rdap/RdapMetrics.java index b39fd5fab7a..107dbf62957 100644 --- a/core/src/main/java/google/registry/rdap/RdapMetrics.java +++ b/core/src/main/java/google/registry/rdap/RdapMetrics.java @@ -133,6 +133,16 @@ enum WildcardType { LABEL_DESCRIPTORS_FOR_RETRIEVAL_COUNTS, FIBONACCI_FITTER); + @VisibleForTesting + static final EventMetric requestTime = + MetricRegistryImpl.getDefault() + .newEventMetric( + "/rdap/request_time", + "RDAP Request Time", + "milliseconds", + LABEL_DESCRIPTORS_FOR_RESPONSES, + EventMetric.DEFAULT_FITTER); + @Inject public RdapMetrics() {} @@ -183,6 +193,18 @@ public void updateMetrics(RdapMetricInformation rdapMetricInformation) { } } + /** Records the processing time for an RDAP request. */ + public void recordProcessingTime( + RdapMetricInformation rdapMetricInformation, long processingTime) { + requestTime.record( + processingTime, + rdapMetricInformation.endpointType().toString(), + rdapMetricInformation.searchType().toString(), + rdapMetricInformation.wildcardType().toString(), + String.valueOf(rdapMetricInformation.statusCode()), + rdapMetricInformation.incompletenessWarningType().toString()); + } + /** * Information on RDAP metrics. * diff --git a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java index 22deba98595..a5a5a082f48 100644 --- a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java +++ b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java @@ -172,4 +172,13 @@ void testFormatted() { assertThat(payload).contains("\n"); assertThat(parseJsonObject(payload)).isEqualTo(loadJsonFile("rdapjson_toplevel.json")); } + + @Test + void testMetrics_recordsProcessingTime() { + generateActualJson("no.thing"); + verify(rdapMetrics) + .recordProcessingTime( + org.mockito.ArgumentMatchers.any(RdapMetrics.RdapMetricInformation.class), + org.mockito.ArgumentMatchers.anyLong()); + } } diff --git a/core/src/test/java/google/registry/rdap/RdapMetricsTest.java b/core/src/test/java/google/registry/rdap/RdapMetricsTest.java index 4f4a6639a5e..d52fb547b57 100644 --- a/core/src/test/java/google/registry/rdap/RdapMetricsTest.java +++ b/core/src/test/java/google/registry/rdap/RdapMetricsTest.java @@ -37,6 +37,7 @@ void beforeEach() { RdapMetrics.responses.reset(); RdapMetrics.numberOfDomainsRetrieved.reset(); RdapMetrics.numberOfHostsRetrieved.reset(); + RdapMetrics.requestTime.reset(); } private RdapMetrics.RdapMetricInformation.Builder getBuilder() { @@ -274,4 +275,13 @@ void testEntitySearchByNameWithWildcard() { assertThat(RdapMetrics.numberOfDomainsRetrieved).hasNoOtherValues(); assertThat(RdapMetrics.numberOfHostsRetrieved).hasNoOtherValues(); } + + @Test + void testRecordProcessingTime() { + rdapMetrics.recordProcessingTime(getBuilder().build(), 100L); + assertThat(RdapMetrics.requestTime) + .hasDataSetForLabels(ImmutableSet.of(100L), "DOMAINS", "NONE", "INVALID", "200", "COMPLETE") + .and() + .hasNoOtherValues(); + } } From e5cdcef24e49894e6ae287fc79cb8998d8764ff6 Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Mon, 20 Apr 2026 12:14:42 -0400 Subject: [PATCH 2/9] refactor code --- .../registry/rdap/RdapActionBaseTest.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java index a5a5a082f48..beb478136ca 100644 --- a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java +++ b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java @@ -21,6 +21,7 @@ import static google.registry.request.Action.Method.GET; import static google.registry.request.Action.Method.HEAD; import static google.registry.testing.DatabaseHelper.createTld; +import static org.joda.time.Duration.millis; import static org.mockito.Mockito.verify; import google.registry.rdap.RdapMetrics.EndpointType; @@ -31,6 +32,7 @@ import google.registry.rdap.RdapSearchResults.IncompletenessWarningType; import google.registry.request.Action; import google.registry.request.auth.Auth; +import google.registry.testing.FakeClock; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -63,6 +65,9 @@ public ReplyPayloadBase getJsonObjectForResource( if (pathSearchString.equals("RuntimeException")) { throw new RuntimeException(); } + if (pathSearchString.equals("advanceClock")) { + ((FakeClock) clock).advanceBy(millis(50)); + } return new ReplyPayloadBase(BoilerplateType.OTHER) { @JsonableElement public String key = "value"; }; @@ -175,10 +180,21 @@ void testFormatted() { @Test void testMetrics_recordsProcessingTime() { - generateActualJson("no.thing"); + generateActualJson("advanceClock"); verify(rdapMetrics) .recordProcessingTime( - org.mockito.ArgumentMatchers.any(RdapMetrics.RdapMetricInformation.class), - org.mockito.ArgumentMatchers.anyLong()); + RdapMetrics.RdapMetricInformation.builder() + .setEndpointType(EndpointType.HELP) + .setSearchType(SearchType.NONE) + .setWildcardType(WildcardType.INVALID) + .setPrefixLength(0) + .setIncludeDeleted(false) + .setRegistrarSpecified(false) + .setRole(RdapAuthorization.Role.PUBLIC) + .setRequestMethod(Action.Method.GET) + .setStatusCode(200) + .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) + .build(), + 50L); } } From 7fa28b931f93a0ac56ed05ed5cb8eafabfc48cbc Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Mon, 20 Apr 2026 12:23:00 -0400 Subject: [PATCH 3/9] refactors --- core/src/main/java/google/registry/rdap/RdapActionBase.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/google/registry/rdap/RdapActionBase.java b/core/src/main/java/google/registry/rdap/RdapActionBase.java index ef7283f77c3..8921e8635f0 100644 --- a/core/src/main/java/google/registry/rdap/RdapActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapActionBase.java @@ -52,6 +52,8 @@ import jakarta.inject.Inject; import java.net.URI; import java.net.URISyntaxException; +import java.time.Duration; +import java.time.Instant; import java.util.Optional; import org.joda.time.DateTime; @@ -132,7 +134,7 @@ abstract ReplyPayloadBase getJsonObjectForResource( @Override public void run() { - java.time.Instant startTime = clock.now(); + Instant startTime = clock.now(); metricInformationBuilder.setIncludeDeleted(includeDeletedParam.orElse(false)); metricInformationBuilder.setRole(rdapAuthorization.role()); metricInformationBuilder.setRequestMethod(requestMethod); @@ -181,7 +183,7 @@ public void run() { setError(SC_INTERNAL_SERVER_ERROR, "Internal Server Error", "An error was encountered"); logger.atSevere().withCause(e).log("Exception encountered while processing RDAP command."); } - long processingTime = java.time.Duration.between(startTime, clock.now()).toMillis(); + long processingTime = Duration.between(startTime, clock.now()).toMillis(); RdapMetrics.RdapMetricInformation metricInfo = metricInformationBuilder.build(); rdapMetrics.updateMetrics(metricInfo); rdapMetrics.recordProcessingTime(metricInfo, processingTime); From 3d9f44910aba8dbec52e2df9d1f86100a3231e09 Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Mon, 20 Apr 2026 12:29:17 -0400 Subject: [PATCH 4/9] refactor --- core/src/main/java/google/registry/rdap/RdapMetrics.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/google/registry/rdap/RdapMetrics.java b/core/src/main/java/google/registry/rdap/RdapMetrics.java index 107dbf62957..99d22b40a16 100644 --- a/core/src/main/java/google/registry/rdap/RdapMetrics.java +++ b/core/src/main/java/google/registry/rdap/RdapMetrics.java @@ -14,6 +14,8 @@ package google.registry.rdap; +import static com.google.monitoring.metrics.EventMetric.DEFAULT_FITTER; + import com.google.auto.value.AutoBuilder; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; @@ -141,7 +143,7 @@ enum WildcardType { "RDAP Request Time", "milliseconds", LABEL_DESCRIPTORS_FOR_RESPONSES, - EventMetric.DEFAULT_FITTER); + DEFAULT_FITTER); @Inject public RdapMetrics() {} From 8fa415c375fe7f303a97117be3a0b1e48da46c91 Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Mon, 20 Apr 2026 16:05:54 -0400 Subject: [PATCH 5/9] record latency in RdapMetricInformation object --- .../google/registry/rdap/RdapActionBase.java | 6 ++-- .../google/registry/rdap/RdapMetrics.java | 28 +++++++++++-------- .../registry/rdap/RdapActionBaseTest.java | 8 ++++-- .../google/registry/rdap/RdapMetricsTest.java | 2 +- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/google/registry/rdap/RdapActionBase.java b/core/src/main/java/google/registry/rdap/RdapActionBase.java index daa8e3a6c0e..a6c7844d877 100644 --- a/core/src/main/java/google/registry/rdap/RdapActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapActionBase.java @@ -182,9 +182,9 @@ public void run() { logger.atSevere().withCause(e).log("Exception encountered while processing RDAP command."); } long processingTime = Duration.between(startTime, clock.now()).toMillis(); - RdapMetrics.RdapMetricInformation metricInfo = metricInformationBuilder.build(); - rdapMetrics.updateMetrics(metricInfo); - rdapMetrics.recordProcessingTime(metricInfo, processingTime); + metricInformationBuilder.setProcessingTime(processingTime); + + rdapMetrics.updateMetrics(metricInformationBuilder.build()); } void setError(int status, String title, String description) { diff --git a/core/src/main/java/google/registry/rdap/RdapMetrics.java b/core/src/main/java/google/registry/rdap/RdapMetrics.java index 99d22b40a16..c4fb9724f89 100644 --- a/core/src/main/java/google/registry/rdap/RdapMetrics.java +++ b/core/src/main/java/google/registry/rdap/RdapMetrics.java @@ -193,19 +193,17 @@ public void updateMetrics(RdapMetricInformation rdapMetricInformation) { getLabelStringForPrefixLength(rdapMetricInformation.prefixLength()), rdapMetricInformation.includeDeleted() ? "YES" : "NO"); } + if (rdapMetricInformation.processingTime().isPresent()) { + requestTime.record( + rdapMetricInformation.processingTime().get(), + rdapMetricInformation.endpointType().toString(), + rdapMetricInformation.searchType().toString(), + rdapMetricInformation.wildcardType().toString(), + String.valueOf(rdapMetricInformation.statusCode()), + rdapMetricInformation.incompletenessWarningType().toString()); + } } - /** Records the processing time for an RDAP request. */ - public void recordProcessingTime( - RdapMetricInformation rdapMetricInformation, long processingTime) { - requestTime.record( - processingTime, - rdapMetricInformation.endpointType().toString(), - rdapMetricInformation.searchType().toString(), - rdapMetricInformation.wildcardType().toString(), - String.valueOf(rdapMetricInformation.statusCode()), - rdapMetricInformation.incompletenessWarningType().toString()); - } /** * Information on RDAP metrics. @@ -226,6 +224,8 @@ public void recordProcessingTime( * than were actually returned in the response; absent if a search was not performed. * @param numHostsRetrieved Number of hosts retrieved from the database; this might be more than * were actually returned in the response; absent if a search was not performed. + * @param processingTime The processing time for the request in milliseconds; absent if not + * recorded. */ public record RdapMetricInformation( EndpointType endpointType, @@ -239,7 +239,8 @@ public record RdapMetricInformation( int statusCode, IncompletenessWarningType incompletenessWarningType, Optional numDomainsRetrieved, - Optional numHostsRetrieved) { + Optional numHostsRetrieved, + Optional processingTime) { @AutoBuilder interface Builder { @@ -267,9 +268,12 @@ interface Builder { Builder setNumHostsRetrieved(long numHostsRetrieved); + Builder setProcessingTime(long processingTime); + RdapMetricInformation build(); } + static Builder builder() { return new AutoBuilder_RdapMetrics_RdapMetricInformation_Builder() .setSearchType(SearchType.NONE) diff --git a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java index beb478136ca..61471e7a4ed 100644 --- a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java +++ b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java @@ -135,6 +135,7 @@ void testMetrics_onSuccess() { .setRequestMethod(Action.Method.GET) .setStatusCode(200) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) + .setProcessingTime(0L) .build()); } @@ -154,6 +155,7 @@ void testMetrics_onError() { .setRequestMethod(Action.Method.GET) .setStatusCode(400) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) + .setProcessingTime(0L) .build()); } @@ -182,7 +184,7 @@ void testFormatted() { void testMetrics_recordsProcessingTime() { generateActualJson("advanceClock"); verify(rdapMetrics) - .recordProcessingTime( + .updateMetrics( RdapMetrics.RdapMetricInformation.builder() .setEndpointType(EndpointType.HELP) .setSearchType(SearchType.NONE) @@ -194,7 +196,7 @@ void testMetrics_recordsProcessingTime() { .setRequestMethod(Action.Method.GET) .setStatusCode(200) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) - .build(), - 50L); + .setProcessingTime(50L) + .build()); } } diff --git a/core/src/test/java/google/registry/rdap/RdapMetricsTest.java b/core/src/test/java/google/registry/rdap/RdapMetricsTest.java index d52fb547b57..92d2a61e0c8 100644 --- a/core/src/test/java/google/registry/rdap/RdapMetricsTest.java +++ b/core/src/test/java/google/registry/rdap/RdapMetricsTest.java @@ -278,7 +278,7 @@ void testEntitySearchByNameWithWildcard() { @Test void testRecordProcessingTime() { - rdapMetrics.recordProcessingTime(getBuilder().build(), 100L); + rdapMetrics.updateMetrics(getBuilder().setProcessingTime(100L).build()); assertThat(RdapMetrics.requestTime) .hasDataSetForLabels(ImmutableSet.of(100L), "DOMAINS", "NONE", "INVALID", "200", "COMPLETE") .and() From 5439d7e826d56fb91ad8640b2252eb745dfcdb9c Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Mon, 20 Apr 2026 16:12:43 -0400 Subject: [PATCH 6/9] lint --- core/src/main/java/google/registry/rdap/RdapActionBase.java | 2 +- core/src/main/java/google/registry/rdap/RdapMetrics.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/google/registry/rdap/RdapActionBase.java b/core/src/main/java/google/registry/rdap/RdapActionBase.java index a6c7844d877..5d973573d2e 100644 --- a/core/src/main/java/google/registry/rdap/RdapActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapActionBase.java @@ -183,7 +183,7 @@ public void run() { } long processingTime = Duration.between(startTime, clock.now()).toMillis(); metricInformationBuilder.setProcessingTime(processingTime); - + rdapMetrics.updateMetrics(metricInformationBuilder.build()); } diff --git a/core/src/main/java/google/registry/rdap/RdapMetrics.java b/core/src/main/java/google/registry/rdap/RdapMetrics.java index c4fb9724f89..b845df842b4 100644 --- a/core/src/main/java/google/registry/rdap/RdapMetrics.java +++ b/core/src/main/java/google/registry/rdap/RdapMetrics.java @@ -204,7 +204,6 @@ public void updateMetrics(RdapMetricInformation rdapMetricInformation) { } } - /** * Information on RDAP metrics. * From 5fdeddb70341a107fb73016fb2f58fd0b384bf2e Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Tue, 21 Apr 2026 13:35:40 -0400 Subject: [PATCH 7/9] fix tests --- .../src/test/java/google/registry/rdap/RdapHelpActionTest.java | 1 + .../java/google/registry/rdap/RdapNameserverActionTest.java | 1 + .../java/google/registry/rdap/RdapSearchActionTestCase.java | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/test/java/google/registry/rdap/RdapHelpActionTest.java b/core/src/test/java/google/registry/rdap/RdapHelpActionTest.java index 916d29c62c8..c20b04b4188 100644 --- a/core/src/test/java/google/registry/rdap/RdapHelpActionTest.java +++ b/core/src/test/java/google/registry/rdap/RdapHelpActionTest.java @@ -82,6 +82,7 @@ void testHelpActionMetrics() { .setRequestMethod(Action.Method.GET) .setStatusCode(200) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) + .setProcessingTime(0L) .build()); } } diff --git a/core/src/test/java/google/registry/rdap/RdapNameserverActionTest.java b/core/src/test/java/google/registry/rdap/RdapNameserverActionTest.java index 513896f5a39..a3778ad0e15 100644 --- a/core/src/test/java/google/registry/rdap/RdapNameserverActionTest.java +++ b/core/src/test/java/google/registry/rdap/RdapNameserverActionTest.java @@ -287,6 +287,7 @@ void testMetrics() { .setRequestMethod(Action.Method.GET) .setStatusCode(200) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) + .setProcessingTime(0L) .build()); } } diff --git a/core/src/test/java/google/registry/rdap/RdapSearchActionTestCase.java b/core/src/test/java/google/registry/rdap/RdapSearchActionTestCase.java index 4301bd16a87..c626819a93d 100644 --- a/core/src/test/java/google/registry/rdap/RdapSearchActionTestCase.java +++ b/core/src/test/java/google/registry/rdap/RdapSearchActionTestCase.java @@ -90,7 +90,8 @@ void verifyMetrics( .setRole(metricRole) .setRequestMethod(requestMethod) .setStatusCode(metricStatusCode) - .setIncompletenessWarningType(incompletenessWarningType); + .setIncompletenessWarningType(incompletenessWarningType) + .setProcessingTime(0L); numDomainsRetrieved.ifPresent(builder::setNumDomainsRetrieved); numHostsRetrieved.ifPresent(builder::setNumHostsRetrieved); verify(rdapMetrics).updateMetrics(builder.build()); From 06d4f3319d53f5e7c8957e2c5cd84854c56064b2 Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Tue, 21 Apr 2026 13:50:03 -0400 Subject: [PATCH 8/9] add for tests --- .../src/test/java/google/registry/rdap/RdapDomainActionTest.java | 1 + .../src/test/java/google/registry/rdap/RdapEntityActionTest.java | 1 + 2 files changed, 2 insertions(+) diff --git a/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java b/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java index a866d29a221..ef86e0e8e3a 100644 --- a/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java +++ b/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java @@ -435,6 +435,7 @@ void testMetrics() { .setRequestMethod(Action.Method.GET) .setStatusCode(200) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) + .setProcessingTime(0L) .build()); } diff --git a/core/src/test/java/google/registry/rdap/RdapEntityActionTest.java b/core/src/test/java/google/registry/rdap/RdapEntityActionTest.java index 105ff24015a..01e58beeae7 100644 --- a/core/src/test/java/google/registry/rdap/RdapEntityActionTest.java +++ b/core/src/test/java/google/registry/rdap/RdapEntityActionTest.java @@ -235,6 +235,7 @@ void testMetrics() { .setRequestMethod(Action.Method.GET) .setStatusCode(200) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) + .setProcessingTime(0L) .build()); } } From 7f779b97b3fb8d9c61616bb5f2445e7f59ea2634 Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Tue, 21 Apr 2026 14:02:03 -0400 Subject: [PATCH 9/9] formatter --- .../test/java/google/registry/rdap/RdapDomainActionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java b/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java index ef86e0e8e3a..95c2cfedb7d 100644 --- a/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java +++ b/core/src/test/java/google/registry/rdap/RdapDomainActionTest.java @@ -435,7 +435,7 @@ void testMetrics() { .setRequestMethod(Action.Method.GET) .setStatusCode(200) .setIncompletenessWarningType(IncompletenessWarningType.COMPLETE) - .setProcessingTime(0L) + .setProcessingTime(0L) .build()); }