2021-02-27 22:09:31 +08:00
|
|
|
// Package redis...
|
|
|
|
//
|
|
|
|
// Description : redis...
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 2021-02-27 8:22 下午
|
|
|
|
package redis
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/go-developer/gopkg/easymap"
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
// 默认的 request_id 字段名
|
|
|
|
defaultRequestIDField = "request_id"
|
|
|
|
// 默认的message
|
|
|
|
defaultMessage = "执行redis命令日志记录"
|
|
|
|
// 耗时字段
|
|
|
|
defaultUsedTimeField = "used_field"
|
|
|
|
// 默认的命令字段
|
|
|
|
defaultCommandField = "command"
|
|
|
|
// 默认记录 redis标识的字段
|
|
|
|
defaultFlagField = "flag"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Context 请求上下文
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 8:25 下午 2021/2/27
|
|
|
|
type Context struct {
|
|
|
|
Flag string // 哪个模块的上下文
|
|
|
|
Ctx context.Context // ctx
|
|
|
|
GinCtx *gin.Context // http 请求绑定的gin.context
|
|
|
|
RequestIDField string // requestID 字段名
|
|
|
|
RequestID string // requestID 此字段有值, 直接使用此值,无值, 去GinCtx 中读取 RequestIDField
|
|
|
|
Extra easymap.EasyMap // 扩展信息
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewContext 生成一个上下文
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 8:26 下午 2021/2/27
|
|
|
|
func NewContext(flag string, of ...SetContextFunc) *Context {
|
|
|
|
ctx := &Context{
|
|
|
|
Flag: flag,
|
|
|
|
Ctx: nil,
|
|
|
|
GinCtx: nil,
|
|
|
|
RequestIDField: "",
|
|
|
|
RequestID: "",
|
|
|
|
Extra: nil,
|
|
|
|
}
|
|
|
|
for _, f := range of {
|
|
|
|
f(ctx)
|
|
|
|
}
|
|
|
|
if nil == ctx.Ctx {
|
|
|
|
ctx.Ctx = context.Background()
|
|
|
|
}
|
|
|
|
if len(ctx.RequestIDField) == 0 {
|
|
|
|
ctx.RequestIDField = defaultRequestIDField
|
|
|
|
}
|
|
|
|
if nil == ctx.Extra {
|
|
|
|
ctx.Extra = easymap.NewNormal(true)
|
|
|
|
}
|
|
|
|
// requestID 填充
|
|
|
|
if len(ctx.RequestID) == 0 {
|
|
|
|
// 先从 gin 读
|
2021-02-27 22:48:20 +08:00
|
|
|
if nil != ctx.GinCtx {
|
2021-02-27 22:09:31 +08:00
|
|
|
ctx.RequestID = ctx.GinCtx.GetString(ctx.RequestIDField)
|
|
|
|
}
|
|
|
|
// 再从extra读取
|
|
|
|
if len(ctx.RequestID) == 0 {
|
|
|
|
ctx.RequestID, _ = ctx.Extra.GetString(ctx.RequestID)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ctx
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetContextFunc 设置context参数
|
|
|
|
type SetContextFunc func(rc *Context)
|
|
|
|
|
|
|
|
// WithCtx 设置context
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 8:30 下午 2021/2/27
|
|
|
|
func WithCtx(ctx context.Context) SetContextFunc {
|
|
|
|
return func(rc *Context) {
|
|
|
|
rc.Ctx = ctx
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithGinCtx 设置gin上下文
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 8:34 下午 2021/2/27
|
|
|
|
func WithGinCtx(ginCtx *gin.Context) SetContextFunc {
|
|
|
|
return func(rc *Context) {
|
|
|
|
rc.GinCtx = ginCtx
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithExtra 设置扩展信息
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 8:36 下午 2021/2/27
|
|
|
|
func WithExtra(extra easymap.EasyMap) SetContextFunc {
|
|
|
|
return func(rc *Context) {
|
|
|
|
rc.Extra = extra
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithRequestIDField 设置request_id参数名
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 8:41 下午 2021/2/27
|
|
|
|
func WithRequestIDField(requestIDField string) SetContextFunc {
|
|
|
|
return func(rc *Context) {
|
|
|
|
rc.RequestIDField = requestIDField
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// WithRequestID ...
|
|
|
|
//
|
|
|
|
// Author : go_developer@163.com<张德满>
|
|
|
|
//
|
|
|
|
// Date : 8:42 下午 2021/2/27
|
|
|
|
func WithRequestID(requestID string) SetContextFunc {
|
|
|
|
return func(rc *Context) {
|
|
|
|
rc.RequestID = requestID
|
|
|
|
}
|
|
|
|
}
|