Skip to content

Commit 6c9b9dc

Browse files
authored
add requestId to error response (#42)
1 parent 87a8fb4 commit 6c9b9dc

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

pkg/server/middleware/trace/trace.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"google.golang.org/grpc/status"
1313
"google.golang.org/protobuf/proto"
1414
"google.golang.org/protobuf/reflect/protoreflect"
15+
"google.golang.org/protobuf/types/known/structpb"
1516

1617
"github.com/KyberNetwork/service-framework/pkg/common"
1718
"github.com/KyberNetwork/service-framework/pkg/observe/kmetric"
@@ -28,12 +29,14 @@ func UnaryServerInterceptor(cfg grpcserver.Config) grpc.UnaryServerInterceptor {
2829
wrapper := grpcStatusWrapper{cfg: cfg}
2930
return func(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (res any,
3031
err error) {
32+
var traceIdStr string
3133
if traceId, ok := common.TraceIdFromCtx(ctx); ok {
32-
traceIdStr := traceId.String()
34+
traceIdStr = traceId.String()
3335
_ = grpc.SetHeader(ctx, metadata.Pairs(common.HeaderXTraceId, traceIdStr))
3436
ctx = klog.CtxWithLogger(ctx,
3537
klog.WithFields(ctx, klog.Fields{common.LogFieldTraceId: traceIdStr}))
3638
defer func() {
39+
3740
if res, ok := res.(proto.Message); ok && res != nil {
3841
m := res.ProtoReflect()
3942
if fd := m.Descriptor().Fields().ByName(FieldNameRequestId); fd != nil &&
@@ -52,6 +55,11 @@ func UnaryServerInterceptor(cfg grpcserver.Config) grpc.UnaryServerInterceptor {
5255
res, err = handler(ctx, req)
5356
if err != nil {
5457
st := wrapper.GrpcStatus(err)
58+
if reqIdDetail, err := structpb.NewStruct(map[string]any{FieldNameRequestId: traceIdStr}); err == nil {
59+
if stWithReqId, err := st.WithDetails(reqIdDetail); err == nil {
60+
st = stWithReqId
61+
}
62+
}
5563
code = st.Code()
5664
return nil, st.Err()
5765
}

0 commit comments

Comments
 (0)