diff --git a/ctx/metadata.go b/ctx/metadata.go index 873fe39..afcef1e 100644 --- a/ctx/metadata.go +++ b/ctx/metadata.go @@ -7,13 +7,9 @@ import ( ) // keyMetadata custom type that can prevent collision. -type keyMetadata int +type keyMetadata struct{} -const keyMetadataCtx keyMetadata = iota - -// metadataKey key to identify that a value in context is set and get from this -// package. -const metadataKey = "spotlibs-metadata-key" +var keyCtx keyMetadata // Metadata holds any request-scoped shared data within brispot microservice. type Metadata struct { @@ -43,32 +39,17 @@ type Metadata struct { // Set inject given Metadata to context with custom key to make sure that the // value is correct. func Set(ctx context.Context, mt Metadata) context.Context { - return context.WithValue(ctx, keyMetadataCtx, mt) + return context.WithValue(ctx, keyCtx, mt) } // Get retrieve Metadata from given context with key from this pkg. func Get(ctx context.Context) Metadata { - if mt, ok := ctx.Value(keyMetadataCtx).(Metadata); ok { + if mt, ok := ctx.Value(keyCtx).(Metadata); ok { return mt } return Metadata{} } -// PassToContext pass Metadata from http.Context to context. -func PassToContext(c http.Context) context.Context { - return Set(c, ParseRequest(c)) -} - -// ParseRequest return Metadata from given http context but return empty data -// instead if no data were found. -func ParseRequest(c http.Context) Metadata { - mt, ok := c.Value(metadataKey).(Metadata) - if !ok { - mt = Metadata{} - } - return mt -} - // SetFromRequestHeader set any available metadata from given http context in // the request header. func SetFromRequestHeader(c http.Context) { @@ -95,7 +76,7 @@ func SetFromRequestHeader(c http.Context) { ReqJenisUker: c.Request().Header("X-Request-Jenis-Uker"), PathGateway: c.Request().Header("X-Path-Gateway"), } - c.WithValue(metadataKey, mt) + c.WithValue(keyCtx, mt) } // GetReqId extract request id from given context. This is a shortcut for Get diff --git a/go.mod b/go.mod index ca1f2e0..d09bde3 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,10 @@ module github.com/spotlibs/go-lib go 1.22 require ( - github.com/bytedance/sonic v1.12.1 - github.com/goravel/framework v1.14.2 + github.com/bytedance/sonic v1.12.2 + github.com/goravel/framework v1.14.7 github.com/stretchr/testify v1.9.0 - go.uber.org/zap v1.21.0 + go.uber.org/zap v1.27.0 ) require ( @@ -146,7 +146,7 @@ require ( go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/atomic v1.11.0 // indirect - go.uber.org/multierr v1.9.0 // indirect + go.uber.org/multierr v1.10.0 // indirect golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect golang.org/x/crypto v0.24.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect diff --git a/go.sum b/go.sum index e1d89ca..148f93b 100644 --- a/go.sum +++ b/go.sum @@ -130,6 +130,8 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/bytedance/sonic v1.12.1 h1:jWl5Qz1fy7X1ioY74WqO0KjAMtAGQs4sYnjiEBiyX24= github.com/bytedance/sonic v1.12.1/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic v1.12.2 h1:oaMFuRTpMHYLpCntGca65YWt5ny+wAceDERTkT2L9lg= +github.com/bytedance/sonic v1.12.2/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -388,6 +390,8 @@ github.com/goravel/file-rotatelogs/v2 v2.4.2 h1:g68AzbePXcm0V2CpUMc9j4qVzcDn7+7a github.com/goravel/file-rotatelogs/v2 v2.4.2/go.mod h1:23VuSW8cBS4ax5cmbV+5AaiLpq25b8UJ96IhbAkdo8I= github.com/goravel/framework v1.14.2 h1:8PFEwTqjDiyZTNuGemRTu5v9G/0fJv94cfTqQGpRcjw= github.com/goravel/framework v1.14.2/go.mod h1:rScDXGQZdoVfyxemNPmijlz/2a+lWNOa4jTuak5GGVg= +github.com/goravel/framework v1.14.7 h1:mO8HFy8dU0wWRUaLcGrUbXdIyXsC0YWC+VdYouviLbY= +github.com/goravel/framework v1.14.7/go.mod h1:rScDXGQZdoVfyxemNPmijlz/2a+lWNOa4jTuak5GGVg= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= @@ -674,9 +678,13 @@ go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= diff --git a/middleware/activity_monitor.go b/middleware/activity_monitor.go index 7024546..32fa621 100644 --- a/middleware/activity_monitor.go +++ b/middleware/activity_monitor.go @@ -37,7 +37,7 @@ func apiActivityRecorder(c http.Context, start time.Time) { _ = sonic.ConfigFastest.Unmarshal(c.Response().Origin().Body().Bytes(), &res) // get metadata from context - mt := ctx.ParseRequest(c) + mt := ctx.Get(c) activityData := map[string]any{ "app_name": facades.Config().GetString("app.name", "Microservice"),