From 4a3dc00aa67fc1f3f92153f20b645fc981b6eac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Skj=C3=B8lberg?= Date: Wed, 5 Feb 2025 16:53:25 +0100 Subject: [PATCH] Add time left on deadline to grpc server request statement --- .../rr/grpc/GrpcLoggingClientInterceptor.java | 2 +- .../rr/grpc/GrpcLoggingServerInterceptor.java | 18 +++++++++++++++++- .../rr/grpc/marker/GrpcRequestMarker.java | 6 ++++++ .../cloud/rr/grpc/message/GrpcRequest.java | 10 +++++++++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingClientInterceptor.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingClientInterceptor.java index 8f7538e8..2a60ec0c 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingClientInterceptor.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingClientInterceptor.java @@ -279,7 +279,7 @@ public void sendMessage(ReqT message) { log.warn("Cannot format protobuf request message", e); } - GrpcRequest requestMessage = new GrpcRequest(requestHeaders, null, path, body, "local", count); + GrpcRequest requestMessage = new GrpcRequest(requestHeaders, null, path, body, "local", count, -1L); sink.requestMessage(requestMessage); } else if (filter.isDisconnect()) { diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingServerInterceptor.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingServerInterceptor.java index 603c349a..9601fdaf 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingServerInterceptor.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/GrpcLoggingServerInterceptor.java @@ -2,6 +2,8 @@ import com.google.protobuf.AbstractMessage; import com.google.protobuf.MessageOrBuilder; +import io.grpc.Context; +import io.grpc.Deadline; import io.grpc.ForwardingServerCall; import io.grpc.ForwardingServerCallListener; import io.grpc.Grpc; @@ -27,6 +29,7 @@ import java.net.SocketAddress; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -255,6 +258,8 @@ public void onMessage(ReqT message) { int count = requestCounter.incrementAndGet(); + long timeRemainingUntilDeadlineInMilliseconds = getTimeRemainingUntilDeadlineInMilliseconds(); + String body = null; try { body = payloadJsonMapper.map(m, filter.getRequestBodyFilter()); @@ -263,7 +268,7 @@ public void onMessage(ReqT message) { log.info("Cannot format protobuf request message", e); } - GrpcRequest requestMessage = new GrpcRequest(requestHeaders, remoteAddress, path, body, "remote", count); + GrpcRequest requestMessage = new GrpcRequest(requestHeaders, remoteAddress, path, body, "remote", count, timeRemainingUntilDeadlineInMilliseconds); sink.requestMessage(requestMessage); } else if (filter.isDisconnect()) { @@ -273,6 +278,17 @@ public void onMessage(ReqT message) { super.onMessage(message); } + + private static long getTimeRemainingUntilDeadlineInMilliseconds() { + Context requestContext = Context.current(); + if(requestContext != null) { + Deadline deadline = requestContext.getDeadline(); + if (deadline != null) { + return deadline.timeRemaining(TimeUnit.MILLISECONDS); + } + } + return -1L; + } }; } return next.startCall(interceptCall, headers); diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java index ef7a174e..680d3eb9 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/marker/GrpcRequestMarker.java @@ -17,6 +17,12 @@ public GrpcRequestMarker(GrpcRequest message) { protected void writeFields(JsonGenerator generator) throws IOException { super.writeFields(generator); + long timeRemaining = message.getTimeRemainingUntilDeadlineInMilliseconds(); + if(timeRemaining != -1L) { + generator.writeFieldName("deadline-in"); + generator.writeNumber(timeRemaining); + } + String body = message.getBody(); if(body != null) { writeBodyField(generator, body); diff --git a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/message/GrpcRequest.java b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/message/GrpcRequest.java index 52423316..4ccb485d 100644 --- a/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/message/GrpcRequest.java +++ b/request-response/netty-grpc/src/main/java/no/entur/logging/cloud/rr/grpc/message/GrpcRequest.java @@ -7,6 +7,8 @@ public class GrpcRequest extends GrpcMessage { private final String body; private final int number; + + private final long timeRemainingUntilDeadlineInMilliseconds; /** * Constructor * @@ -16,12 +18,14 @@ public class GrpcRequest extends GrpcMessage { * @param body body or null * @param origin remote (i.e. for incoming) or local (i.e. for outgoing) * @param number request number + * @param timeRemainingUntilDeadlineInMilliseconds remaining time before deadline in milliseconds, or -1 if not available */ - public GrpcRequest(Map headers, String remote, String uri, String body, String origin, int number) { + public GrpcRequest(Map headers, String remote, String uri, String body, String origin, int number, long timeRemainingUntilDeadlineInMilliseconds) { super(headers, remote, uri, "request", origin); this.body = body; this.number = number; + this.timeRemainingUntilDeadlineInMilliseconds = timeRemainingUntilDeadlineInMilliseconds; } public String getBody() { @@ -31,4 +35,8 @@ public String getBody() { public int getNumber() { return number; } + + public long getTimeRemainingUntilDeadlineInMilliseconds() { + return timeRemainingUntilDeadlineInMilliseconds; + } }