diff --git a/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContextConstants.java b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContextConstants.java index 9dfd39e..d713bcf 100644 --- a/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContextConstants.java +++ b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContextConstants.java @@ -20,12 +20,15 @@ public class RequestContextConstants { public static final String AUTHORIZATION_HEADER = "authorization"; + public static final String CTX_HEADER_PREFIX = "x-ctx-"; + /** The values in this set are looked up with case insensitivity. */ public static final Set HEADER_PREFIXES_TO_BE_PROPAGATED = Set.of( TENANT_ID_HEADER_KEY, CONTEXT_ID_HEADER_KEY, SUPPRESS_USER_TRACKING_HEADER_KEY, + CTX_HEADER_PREFIX, "X-B3-", "grpc-trace-bin", "traceparent", diff --git a/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/ScanMetadataBuilder.java b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/ScanMetadataBuilder.java new file mode 100644 index 0000000..c84b550 --- /dev/null +++ b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/ScanMetadataBuilder.java @@ -0,0 +1,20 @@ +package org.hypertrace.core.grpcutils.context; + +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY; +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; + +import io.grpc.Metadata; + +public class ScanMetadataBuilder { + + public static final String CTX_SCAN_ID_HEADER_KEY = "x-ctx-scan-id"; + + public static Metadata build(String tenantId, String requestId, String scanId) { + Metadata metadata = new Metadata(); + metadata.put(Metadata.Key.of(TENANT_ID_HEADER_KEY, Metadata.ASCII_STRING_MARSHALLER), tenantId); + metadata.put( + Metadata.Key.of(REQUEST_ID_HEADER_KEY, Metadata.ASCII_STRING_MARSHALLER), requestId); + metadata.put(Metadata.Key.of(CTX_SCAN_ID_HEADER_KEY, Metadata.ASCII_STRING_MARSHALLER), scanId); + return metadata; + } +} diff --git a/grpc-server-utils/src/main/java/org/hypertrace/core/grpcutils/server/RequestContextLoggingServerInterceptor.java b/grpc-server-utils/src/main/java/org/hypertrace/core/grpcutils/server/RequestContextLoggingServerInterceptor.java index 670bf64..a71ab5f 100644 --- a/grpc-server-utils/src/main/java/org/hypertrace/core/grpcutils/server/RequestContextLoggingServerInterceptor.java +++ b/grpc-server-utils/src/main/java/org/hypertrace/core/grpcutils/server/RequestContextLoggingServerInterceptor.java @@ -1,6 +1,7 @@ package org.hypertrace.core.grpcutils.server; import static org.hypertrace.core.grpcutils.context.RequestContextConstants.CONTEXT_ID_HEADER_KEY; +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.CTX_HEADER_PREFIX; import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY; import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; @@ -69,6 +70,9 @@ public void onMessage(ReqT message) { MDC.put(REQUEST_ID_HEADER_KEY, requestId); opTenantId.ifPresent(s -> MDC.put(TENANT_ID_HEADER_KEY, s)); opContextId.ifPresent(s -> MDC.put(CONTEXT_ID_HEADER_KEY, s)); + currentContext.getAllHeaders().stream() + .filter(header -> header.getName().startsWith(CTX_HEADER_PREFIX)) + .forEach(header -> MDC.put(header.getName(), header.getValue())); } catch (Exception e) { log.error("Error while setting request context details in MDC params", e); }