optimize
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
9c5c08c188
commit
bd6ebc31d6
24
requestid.go
24
requestid.go
@ -1,4 +1,4 @@
|
|||||||
package requestid // import "go.unistack.org/micro-wrapper-requestid/v4"
|
package requestid
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -14,14 +14,14 @@ import (
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
logger.DefaultContextAttrFuncs = append(logger.DefaultContextAttrFuncs, func(ctx context.Context) []interface{} {
|
logger.DefaultContextAttrFuncs = append(logger.DefaultContextAttrFuncs, func(ctx context.Context) []interface{} {
|
||||||
if v, ok := ctx.Value(XRequestIDKey).(string); ok {
|
if v, ok := ctx.Value(XRequestIDKey{}).(string); ok {
|
||||||
return []interface{}{DefaultMetadataKey, v}
|
return []interface{}{DefaultMetadataKey, v}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var XRequestIDKey struct{}
|
type XRequestIDKey struct{}
|
||||||
|
|
||||||
// DefaultMetadataKey contains metadata key x-request-id
|
// DefaultMetadataKey contains metadata key x-request-id
|
||||||
var DefaultMetadataKey = textproto.CanonicalMIMEHeaderKey("x-request-id")
|
var DefaultMetadataKey = textproto.CanonicalMIMEHeaderKey("x-request-id")
|
||||||
@ -30,41 +30,31 @@ var DefaultMetadataKey = textproto.CanonicalMIMEHeaderKey("x-request-id")
|
|||||||
var DefaultMetadataFunc = func(ctx context.Context) (context.Context, error) {
|
var DefaultMetadataFunc = func(ctx context.Context) (context.Context, error) {
|
||||||
var xid string
|
var xid string
|
||||||
var err error
|
var err error
|
||||||
var ook, iok bool
|
|
||||||
|
|
||||||
if _, ok := ctx.Value(XRequestIDKey).(string); !ok {
|
if _, ok := ctx.Value(XRequestIDKey{}).(string); !ok {
|
||||||
xid, err = id.New()
|
xid, err = id.New()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ctx, err
|
return ctx, err
|
||||||
}
|
}
|
||||||
ctx = context.WithValue(ctx, XRequestIDKey, xid)
|
ctx = context.WithValue(ctx, XRequestIDKey{}, xid)
|
||||||
}
|
}
|
||||||
|
|
||||||
imd, ok := metadata.FromIncomingContext(ctx)
|
imd, ok := metadata.FromIncomingContext(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
imd = metadata.New(1)
|
imd = metadata.New(1)
|
||||||
imd.Set(DefaultMetadataKey, xid)
|
imd.Set(DefaultMetadataKey, xid)
|
||||||
|
ctx = metadata.NewIncomingContext(ctx, imd)
|
||||||
} else if _, ok = imd.Get(DefaultMetadataKey); !ok {
|
} else if _, ok = imd.Get(DefaultMetadataKey); !ok {
|
||||||
imd.Set(DefaultMetadataKey, xid)
|
imd.Set(DefaultMetadataKey, xid)
|
||||||
} else {
|
|
||||||
iok = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
omd, ok := metadata.FromOutgoingContext(ctx)
|
omd, ok := metadata.FromOutgoingContext(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
omd = metadata.New(1)
|
omd = metadata.New(1)
|
||||||
omd.Set(DefaultMetadataKey, xid)
|
omd.Set(DefaultMetadataKey, xid)
|
||||||
|
ctx = metadata.NewOutgoingContext(ctx, imd)
|
||||||
} else if _, ok = omd.Get(DefaultMetadataKey); !ok {
|
} else if _, ok = omd.Get(DefaultMetadataKey); !ok {
|
||||||
omd.Set(DefaultMetadataKey, xid)
|
omd.Set(DefaultMetadataKey, xid)
|
||||||
} else {
|
|
||||||
ook = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if !iok {
|
|
||||||
ctx = metadata.NewIncomingContext(ctx, imd)
|
|
||||||
}
|
|
||||||
if !ook {
|
|
||||||
ctx = metadata.NewOutgoingContext(ctx, omd)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctx, nil
|
return ctx, nil
|
||||||
|
@ -9,25 +9,29 @@ import (
|
|||||||
|
|
||||||
func TestDefaultMetadataFunc(t *testing.T) {
|
func TestDefaultMetadataFunc(t *testing.T) {
|
||||||
ctx := context.TODO()
|
ctx := context.TODO()
|
||||||
|
var err error
|
||||||
|
|
||||||
nctx, err := DefaultMetadataFunc(ctx)
|
ctx, err = DefaultMetadataFunc(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%v", err)
|
t.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
imd, ok := metadata.FromIncomingContext(nctx)
|
imd, ok := metadata.FromIncomingContext(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Fatalf("md missing in incoming context")
|
t.Fatalf("md missing in incoming context")
|
||||||
}
|
}
|
||||||
omd, ok := metadata.FromOutgoingContext(nctx)
|
omd, ok := metadata.FromOutgoingContext(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Fatalf("md missing in outgoing context")
|
t.Fatalf("md missing in outgoing context")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, iok := imd.Get(DefaultMetadataKey)
|
iv, iok := imd.Get(DefaultMetadataKey)
|
||||||
_, ook := omd.Get(DefaultMetadataKey)
|
ov, ook := omd.Get(DefaultMetadataKey)
|
||||||
|
|
||||||
if !iok || !ook {
|
if !iok || !ook {
|
||||||
t.Fatalf("missing metadata key value")
|
t.Fatalf("missing metadata key value")
|
||||||
}
|
}
|
||||||
|
if iv != ov {
|
||||||
|
t.Fatalf("invalid metadata key value")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user