diff --git a/go.mod b/go.mod index 3ede216..ee8a55a 100644 --- a/go.mod +++ b/go.mod @@ -2,11 +2,10 @@ module git.zhangdeman.cn/zhangdeman/gin go 1.17 -require ( - git.zhangdeman.cn/zhangdeman/exception v0.0.0-20220625143611-42a85f7b80c3 -) +require git.zhangdeman.cn/zhangdeman/exception v0.0.0-20220625143611-42a85f7b80c3 require ( + git.zhangdeman.cn/zhangdeman/util v0.0.0-20220625151616-cfe1f4c04db4 // indirect github.com/gin-gonic/gin v1.8.1 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect @@ -18,6 +17,8 @@ require ( github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/stretchr/testify v1.7.5 // indirect github.com/ugorji/go/codec v1.2.7 // indirect golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect diff --git a/go.sum b/go.sum index 4a6f277..c7725f1 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,9 @@ git.zhangdeman.cn/zhangdeman/exception v0.0.0-20220625143611-42a85f7b80c3 h1:bQh+GCEfdusiirGm/XV7gqt7dkejqnvFxplatBUrSSI= git.zhangdeman.cn/zhangdeman/exception v0.0.0-20220625143611-42a85f7b80c3/go.mod h1:mIMM/t9BkrKHAcDCmarLCHQhHfWf0/ZjtcqJPboqmSA= +git.zhangdeman.cn/zhangdeman/util v0.0.0-20220609072516-022a755fdf2f h1:yAxxukVUdSM5wn264el+QiAEB0OBN/5H7Xw9Z6rLzUY= +git.zhangdeman.cn/zhangdeman/util v0.0.0-20220609072516-022a755fdf2f/go.mod h1:YI/XeTmrr9+8dxa4ThPkmNcEE8WHG5pZkKujpSWwIxM= +git.zhangdeman.cn/zhangdeman/util v0.0.0-20220625151616-cfe1f4c04db4 h1:uHYTRztH/XEVtr3FLykCf/3LhFQ7zQHnzVAeDyC1huQ= +git.zhangdeman.cn/zhangdeman/util v0.0.0-20220625151616-cfe1f4c04db4/go.mod h1:YI/XeTmrr9+8dxa4ThPkmNcEE8WHG5pZkKujpSWwIxM= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -45,11 +49,15 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/middleware/init_request.go b/middleware/init_request.go new file mode 100644 index 0000000..ea41fbe --- /dev/null +++ b/middleware/init_request.go @@ -0,0 +1,65 @@ +// Package middleware ... +// +// Description : middleware ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2022-06-25 23:07 +package middleware + +import ( + "fmt" + "strings" + "time" + + "git.zhangdeman.cn/zhangdeman/gin/define" + + "git.zhangdeman.cn/zhangdeman/util" + "github.com/gin-gonic/gin" +) + +// InitRequest 初始化请求 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 23:08 2022/6/25 +func InitRequest() gin.HandlerFunc { + return func(ctx *gin.Context) { + traceID := getTraceID(ctx) + requestID := getRequestID(ctx, traceID) + ctx.Set(define.TraceIDField, traceID) + ctx.Set(define.RequestIDField, requestID) + ctx.Set(define.StartRequestTimeField, time.Now().UnixNano()) + } +} + +// getTraceID 生成traceID +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 23:12 2022/6/25 +func getTraceID(ctx *gin.Context) string { + return fmt.Sprintf( + "%v-%v-%v-%v", + time.Now().UnixNano()/1e6, + strings.ReplaceAll(util.IP.GetHostIP(), ".", ""), + strings.ReplaceAll(util.IP.GetRemoteIP(ctx.Request), ".", ""), + util.String.Md5(util.String.GenRandom("", 32)), + ) +} + +// getRequestID 生成requestID +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 23:12 2022/6/25 +func getRequestID(ctx *gin.Context, traceID string) string { + requestID := ctx.GetHeader("X-Forward-Request-ID") + if len(requestID) > 0 { + return requestID + } + if len(traceID) > 0 { + return traceID + } + return getTraceID(ctx) +}