فهرست منبع

Merge branch 'feature/v1.3.8_wky' of BaseService/gateway into feature/v1.3.8

wangkaiyue 2 سال پیش
والد
کامیت
e8c9b87ed5

+ 9 - 10
common/redis-util.go

@@ -1,10 +1,9 @@
 package common
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"encoding/json"
 	"github.com/go-redis/redis"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/os/gctx"
 	"time"
 )
 
@@ -48,7 +47,7 @@ func (r *Redis) Set(k string, v interface{}, timeout int64) bool {
 	cmd := r.Client.Set(k, bt, time.Duration(timeout)*time.Second)
 	b, err := cmd.Result()
 	if err != nil {
-		g.Log().Errorf(gctx.New(), "redis Set err %s", err.Error())
+		log.Errorf("redis Set err %s", err.Error())
 	}
 	return "OK" == b
 }
@@ -59,7 +58,7 @@ func (r *Redis) Get(k string) interface{} {
 	if bt != nil && len(bt) > 0 {
 		var res interface{}
 		if err := json.Unmarshal(bt, &res); err != nil {
-			g.Log().Errorf(gctx.New(), "redis Get Unmarshal err %v", err)
+			log.Errorf("redis Get Unmarshal err %v", err)
 		}
 		return res
 	}
@@ -71,7 +70,7 @@ func (r *Redis) GetBytes(k string) []byte {
 	bt, err := cmd.Bytes()
 	if err != nil {
 		if err.Error() != "redis: nil" {
-			g.Log().Errorf(gctx.New(), "redis GetBytes err %s", err.Error())
+			log.Errorf("redis GetBytes err %s", err.Error())
 		}
 		return nil
 	}
@@ -82,7 +81,7 @@ func (r *Redis) MGet(k ...string) []interface{} {
 	cmd := r.Client.MGet(k...)
 	arr, err := cmd.Result()
 	if err != nil {
-		g.Log().Errorf(gctx.New(), "redis MGet err %s", err.Error())
+		log.Errorf("redis MGet err %s", err.Error())
 	}
 	return arr
 }
@@ -91,7 +90,7 @@ func (r *Redis) Incr(k string) int64 {
 	cmd := r.Client.Incr(k)
 	res, err := cmd.Result()
 	if err != nil {
-		g.Log().Errorf(gctx.New(), "redis Incr err %s", err.Error())
+		log.Errorf("redis Incr err %s", err.Error())
 	}
 	return res
 }
@@ -99,7 +98,7 @@ func (r *Redis) Incr(k string) int64 {
 func (r *Redis) Del(k string) bool {
 	_, err := r.Client.Del(k).Result()
 	if err != nil {
-		g.Log().Errorf(gctx.New(), "redis Del err %s", err.Error())
+		log.Errorf("redis Del err %s", err.Error())
 		return false
 	}
 	return true
@@ -108,7 +107,7 @@ func (r *Redis) Del(k string) bool {
 func (r *Redis) Exists(k string) bool {
 	res, err := r.Client.Exists(k).Result()
 	if err != nil {
-		g.Log().Errorf(gctx.New(), "redis Exists err %s", err.Error())
+		log.Errorf("redis Exists err %s", err.Error())
 	}
 	return res == 1
 }
@@ -126,7 +125,7 @@ func (r *Redis) GetTTL(key string) int64 {
 	cmd := r.Client.TTL(key)
 	t, err := cmd.Result()
 	if err != nil {
-		g.Log().Errorf(gctx.New(), "redis GetTTL err %s", err.Error())
+		log.Errorf("redis GetTTL err %s", err.Error())
 	}
 	if t.Nanoseconds() < 0 {
 		return -1

+ 7 - 7
core/logs/init.go

@@ -1,6 +1,7 @@
 package logs
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/common/db"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/logs/internal/notice"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/logs/internal/savedb"
@@ -15,20 +16,19 @@ func InitLogs() {
 	var noticeConfig notice.NoticeConfig
 	ctx := gctx.New()
 	if err := g.Cfg().MustGet(ctx, "alarm").Scan(&noticeConfig); err != nil {
-		g.Log().Errorf(ctx, "nsq通知配置异常", err)
+		log.WithContext(ctx).Errorf("nsq通知配置异常 %v", err)
 	}
 
 	noticeObj, err := notice.NewNotice(noticeConfig)
 	if err != nil {
-		g.Log().Errorf(ctx, "nsq通知初始化异常异常", err)
+		log.WithContext(ctx).Errorf("nsq通知初始化异常异常 %v", err)
 	}
 
 	// 持久化化存储
-	var sDB *savedb.DbLogs
-	if g.Cfg().MustGet(ctx, "logger.reqLog.saveToDb").Bool() {
-		sDB = new(savedb.DbLogs)
-		sDB.Db = db.MgoLog
-	}
+	sDB := &savedb.DbLogs{}
+
+	sDB = new(savedb.DbLogs)
+	sDB.Db = db.MgoLog
 
 	GateWayServerLog = new(serverLog)
 

+ 4 - 5
core/logs/internal/notice/notice.go

@@ -1,11 +1,9 @@
 package notice
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"bp.jydev.jianyu360.cn/BP/jynsq/gonsq"
 	"encoding/json"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/os/gctx"
-	"log"
 )
 
 type NoticeConfig struct {
@@ -45,9 +43,10 @@ func (n *Notice) SendWarnMsg(detail map[string]interface{}) error {
 	if err != nil {
 		return err
 	}
-	g.Log().Debugf(gctx.New(), "模拟发送信息----->", string(bs))
+
+	log.Debugf("模拟发送信息----->%s", string(bs))
 	if err := n.p.Publish(bs); err != nil {
-		log.Println("nsq连接失败", err)
+		log.Errorf("nsq连接失败 %v", err)
 	}
 	return nil
 }

+ 3 - 4
core/logs/serverLogs.go

@@ -1,6 +1,7 @@
 package logs
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/logs/internal/notice"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/logs/internal/savedb"
@@ -8,7 +9,6 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/gogf/gf/v2/errors/gerror"
-	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
 	"github.com/gogf/gf/v2/os/gtime"
 	"github.com/gogf/gf/v2/text/gstr"
@@ -86,15 +86,14 @@ func (s *serverLog) RecordLogAndNotice(r *ghttp.Request, err error) {
 				"log": contextDetail,
 			})
 		}
-		g.Log("reqLog").Debugf(r.Context(), gerror.Stack(err))
+		log.WithContext(r.Context()).Debugln(gerror.Stack(err))
 	}
 
 	if s.SDb != nil {
 		s.SDb.AddLogToTask(PaseReq(handlerCtx, r))
 	}
-
 	//日志输出
-	g.Log("reqLog").Printf(r.Context(), contextDetail)
+	log.WithContext(r.Context()).Error(contextDetail)
 }
 
 func PaseReq(ctx *router.GContext, r *ghttp.Request) map[string]interface{} {

+ 4 - 0
core/proxy/broker/broker.go

@@ -5,6 +5,7 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/loadmodule"
 	"fmt"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"log"
@@ -88,6 +89,9 @@ func UnLoginSetErr(resp *http.Response) error {
 
 // GetOutSeverAutoLogin 获取代理节点
 func (b *broker) GetOutSeverAutoLogin(address string, r *ghttp.Request) (serverUrl *url.URL, err error) {
+	_, span := gtrace.NewSpan(r.Context(), "GetOutSeverAutoLogin")
+	defer span.End()
+
 	serverUrl, err = url.Parse(address)
 	if err != nil {
 		return nil, err

+ 11 - 12
core/proxy/filterPoly/blacklist.go

@@ -3,22 +3,21 @@ package filterPoly
 import (
 	"app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/mongodb"
+	log "app.yhyue.com/moapp/jylog"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/common/db"
 	"fmt"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/gogf/gf/v2/util/gconv"
 	"strings"
 	"time"
 )
 
-//syncBlackWhiteList 同步永久黑名单白名单
+// syncBlackWhiteList 同步永久黑名单白名单
 func syncBlackWhiteList() {
 	mgSess := db.MgoJy.GetMgoConn()
 	defer func() {
 		db.MgoJy.DestoryMongoConn(mgSess)
 	}()
-	g.Log().Infof(gctx.New(), "开始同步黑白名单")
+	log.Info("开始同步黑白名单")
 	addBlackNum, addWhiteNum := 0, 0
 	// 从用户表同步黑名单
 	iter := mgSess.DB("qfw").C("user").Find(map[string]interface{}{"i_ban": 1}).Select(map[string]interface{}{"_id": 1}).Iter()
@@ -28,7 +27,7 @@ func syncBlackWhiteList() {
 		blackKey := fmt.Sprintf(BlackListKey, uid)
 		if !AllRedis.Exists(blackKey) {
 			AllRedis.Set(blackKey, 1, -1)
-			g.Log().Infof(gctx.New(), "同步黑名单-加入%s", uid)
+			log.Infof("同步黑名单-加入%s", uid)
 			addBlackNum++
 		}
 	}
@@ -42,29 +41,29 @@ func syncBlackWhiteList() {
 			if key := fmt.Sprintf(WhiteListKey, value); status == 1 && !AllRedis.Exists(key) {
 				addWhiteNum++
 				AllRedis.Set(key, 1, -1)
-				g.Log().Infof(gctx.New(), "同步白名单-加入%s", value)
+				log.Info("同步白名单-加入%s", value)
 			} else if key := fmt.Sprintf(BlackListKey, value); status == -1 && !AllRedis.Exists(key) {
 				addBlackNum++
 				AllRedis.Set(key, 1, -1)
-				g.Log().Infof(gctx.New(), "同步黑名单-加入%s", value)
+				log.Info("同步黑名单-加入%s", value)
 			}
 		}
 	}
 
-	g.Log().Infof(gctx.New(), "同步结束,共新增%d个黑名单,%d个白名单", addBlackNum, addWhiteNum)
+	log.Info("同步结束,共新增%d个黑名单,%d个白名单", addBlackNum, addWhiteNum)
 }
 
-//checkBackList 查询是否在白名单中
+// checkBackList 查询是否在白名单中
 func (a *ReqFilterPoly) checkWhiteList(k string) bool {
 	return AllRedis.Get(fmt.Sprintf(WhiteListKey, k)) != nil
 }
 
-//checkBackList 查询是否在黑名单中
+// checkBackList 查询是否在黑名单中
 func (a *ReqFilterPoly) checkBackList(k string) bool {
 	return AllRedis.Get(fmt.Sprintf(BlackListKey, k)) != nil
 }
 
-//addBackList 加入黑名单
+// addBackList 加入黑名单
 func (a *ReqFilterPoly) addBackList(k, cause string) {
 	timeLong := a.Rule.TempBlockTime
 	blockTimes := a.Rule.IdMaxBlockTimes
@@ -74,7 +73,7 @@ func (a *ReqFilterPoly) addBackList(k, cause string) {
 	}
 	//统计临时黑名单次数,超过次数进入永久黑名单
 	if !RateOk(fmt.Sprintf(BlackTimesKey, k), blockTimes[1], time.Duration(blockTimes[0])*time.Second) {
-		g.Log().Infof(gctx.New(), "%s 多次进入临时黑名单,现转移至永久黑名单", k)
+		log.Infof("%s 多次进入临时黑名单,现转移至永久黑名单", k)
 		timeLong = -1
 	}
 	AllRedis.Set(fmt.Sprintf(BlackListKey, k), 1, timeLong)

+ 6 - 5
core/proxy/filterPoly/filterPoly.go

@@ -1,11 +1,12 @@
 package filterPoly
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
 )
 
-//ReqFilterPoly 代理应用下每一组action
+// ReqFilterPoly 代理应用下每一组action
 type ReqFilterPoly struct {
 	Code string   //别名【用于验证码分组统计】
 	Rule *ReqRule //action分组rule【需要配合Alias使用】
@@ -48,13 +49,13 @@ func (a *ReqFilterPoly) IdFilter(ctx g.Ctx, id string) (statusCode int, key stri
 
 	// 设置验证码状态
 	if statusCode == 2 {
-		g.Log().Infof(ctx, "%s 超出验证码请求阈值,弹出验证码", id)
+		log.WithContext(ctx).Infof("%s 超出验证码请求阈值,弹出验证码", id)
 		go a.SetWaitVerify(id, a.Rule.IdTimeRange)
 	}
 
 	//最大值校验
 	if !a.rateCheckOk(id, a.Rule.IdMax) {
-		g.Log().Infof(ctx, "%s 超出最大请求限制,加入临时黑名单", id)
+		log.WithContext(ctx).Infof("%s 超出最大请求限制,加入临时黑名单", id)
 		a.addBackList(id, "exceed IdMax")
 		AllRedis.Del(fmt.Sprintf(RateDataKey, a.Rule.Alias, a.Rule.IdMax[0], id))
 		return -1, id
@@ -99,12 +100,12 @@ func (a *ReqFilterPoly) IpFilter(ctx g.Ctx, ip string) (statusCode int, key stri
 		}
 	}
 	if statusCode == 2 {
-		g.Log().Infof(ctx, "%s 超出验证码请求阈值,弹出验证码", ip)
+		log.WithContext(ctx).Infof("%s 超出验证码请求阈值,弹出验证码", ip)
 		go a.SetWaitVerify(ip, a.Rule.IdTimeRange)
 	}
 	//最大值校验
 	if !a.rateCheckOk(ip, a.Rule.IpMax) {
-		g.Log().Infof(ctx, "%s 超出最大请求限制,加入临时黑名单", ip)
+		log.WithContext(ctx).Infof("%s 超出最大请求限制,加入临时黑名单", ip)
 		a.addBackList(ip, "exceed IdMax")
 		AllRedis.Del(fmt.Sprintf(RateDataKey, a.Rule.Alias, a.Rule.IpMax[0], ip))
 		return -1, ip

+ 3 - 2
core/proxy/filterPoly/manager.go

@@ -1,6 +1,7 @@
 package filterPoly
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/common"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/common/db"
 	"github.com/gogf/gf/v2/frame/g"
@@ -24,7 +25,7 @@ func InitFilterPolyManager() *Manager {
 			code := gconv.String(rule["code"])
 			var reqRule ReqRule
 			if err := gconv.Scan(rule["ploy_rule"], &reqRule); err != nil {
-				g.Log().Errorf(gctx.New(), "格式化%s策略异常 %v", code, err)
+				log.Errorf("格式化%s策略异常 %v", code, err)
 				continue
 			}
 			manager.AddRule(code, &reqRule)
@@ -39,7 +40,7 @@ func (receiver *Manager) initCache() {
 	var conf common.RedisConf
 	ctx := gctx.New()
 	if err := g.Cfg().MustGet(ctx, "databases.polyredis").Scan(&conf); err != nil {
-		g.Log().Errorf(ctx, "redis初始化异常", err)
+		log.WithContext(ctx).Errorf("redis初始化异常 %v", err)
 	}
 	AllRedis = common.InitRedis(conf)
 }

+ 10 - 11
core/proxy/filterPoly/verify.go

@@ -1,41 +1,40 @@
 package filterPoly
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"fmt"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/os/gctx"
 	"time"
 )
 
-//IsWaitVerify 是否处于等待验证码校验
+// IsWaitVerify 是否处于等待验证码校验
 func (a *ReqFilterPoly) IsWaitVerify(k string) bool {
 	return AllRedis.Get(fmt.Sprintf(WaitVerifyKey, k)) != nil
 }
 
-//SetWaitVerify 设置验证码
+// SetWaitVerify 设置验证码
 func (a *ReqFilterPoly) SetWaitVerify(k string, t int64) {
 	AllRedis.Set(fmt.Sprintf(WaitVerifyKey, k), 1, t)
 }
 
-//ClearWaitVerify 清除验证码状态
+// ClearWaitVerify 清除验证码状态
 func (a *ReqFilterPoly) ClearWaitVerify(k string) {
 	AllRedis.Del(fmt.Sprintf(WaitVerifyKey, k))
 	AllRedis.Del(fmt.Sprintf(VerifyRedisKey, k))
 }
 
-//VerifyErrDetail 验证码输入出错统计
+// VerifyErrDetail 验证码输入出错统计
 func (a *ReqFilterPoly) VerifyErrDetail(k string) {
 	if len(a.Rule.VcodeErrorTimes) != 2 {
 		return
 	}
 	if !RateOk(fmt.Sprintf(ErrVerifyKey, k), a.Rule.VcodeErrorTimes[1], time.Duration(a.Rule.VcodeErrorTimes[0])*time.Second) {
-		g.Log().Infof(gctx.New(), "%s 验证码多次验证出错,加入临时黑名单", k)
+		log.Infof("%s 验证码多次验证出错,加入临时黑名单", k)
 		AllRedis.Del(fmt.Sprintf(ErrVerifyKey, k))
 		a.addBackList(k, "exceed VerifyKey")
 	}
 }
 
-//rateCheckOk 访问频率统计
+// rateCheckOk 访问频率统计
 func (a *ReqFilterPoly) rateCheckOk(k string, r []int64) bool {
 	if len(r) != 2 {
 		return true
@@ -70,7 +69,7 @@ func (a *ReqFilterPoly) finalRateCheckOk(k string, r []int64, sign string) bool
 	return flag
 }
 
-//RateOk 次数统计
+// RateOk 次数统计
 func RateOk(keys string, count int64, duration time.Duration) bool {
 	if AllRedis.IncrTimeout(keys, duration) >= count {
 		return false
@@ -78,7 +77,7 @@ func RateOk(keys string, count int64, duration time.Duration) bool {
 	return true
 }
 
-//ShowCodeById 超出最大阈值,每n次弹出验证码
+// ShowCodeById 超出最大阈值,每n次弹出验证码
 func (a *ReqFilterPoly) ShowCodeById(k string) bool {
 	c := AllRedis.IncrTimeout(fmt.Sprintf(ExceedTimeKey, a.Rule.Alias, k), time.Duration(a.Rule.IdTimeRange)*time.Second) //超出阀值请求次数
 	if (c-1)%a.Rule.IdFrep == 0 {
@@ -87,7 +86,7 @@ func (a *ReqFilterPoly) ShowCodeById(k string) bool {
 	return false
 }
 
-//ShowCodeByIp 超出最大阈值,每n次弹出验证码
+// ShowCodeByIp 超出最大阈值,每n次弹出验证码
 func (a *ReqFilterPoly) ShowCodeByIp(k string) bool {
 	c := AllRedis.IncrTimeout(fmt.Sprintf(ExceedTimeKey, a.Rule.Alias, k), time.Duration(a.Rule.IpTimeRange)*time.Second) //超出阀值请求次数
 	if (c-1)%a.Rule.IpFrep == 0 {

+ 5 - 5
core/proxy/filterPoly/verifyDetail.go

@@ -1,10 +1,10 @@
 package filterPoly
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/util"
 	"encoding/json"
 	"fmt"
-	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/util/gconv"
 	"math"
 	"net/http"
@@ -28,12 +28,12 @@ func (a *ReqFilterPoly) VerifyHandle(req *http.Request, key string) map[string]i
 			}
 			var result = [][]int{}
 			if err := json.Unmarshal(va, &result); err != nil {
-				g.Log().Errorf(req.Context(), "%s Unmarshal 出错 %v", key, err)
+				log.WithContext(req.Context()).Errorf("%s Unmarshal 出错 %v\n", key, err)
 				return false
 			}
 			vcArr := strings.Split(vc, ";")
 			if len(vcArr) != len(result) {
-				g.Log().Infof(req.Context(), "用户%s验证码校验失败 选择数量不足 \n正确坐标:%v\n输入坐标%v ", key, result, vcArr)
+				log.WithContext(req.Context()).Infof("用户%s验证码校验失败 选择数量不足 \n正确坐标:%v\n输入坐标%v \n", key, result, vcArr)
 				return false
 			}
 
@@ -51,11 +51,11 @@ func (a *ReqFilterPoly) VerifyHandle(req *http.Request, key string) map[string]i
 				}
 
 				if d := Distance(px, py, result[index][0], result[index][1]); d > 15 {
-					g.Log().Infof(req.Context(), "用户%s验证码校验失败 w:%d 第(%d)校验结果%f\n正确坐标:%v\n输入坐标%v ", key, imgWidth, index, d, result, vcArr)
+					log.WithContext(req.Context()).Infof("用户%s验证码校验失败 w:%d 第(%d)校验结果%f\n正确坐标:%v\n输入坐标%v \n", key, imgWidth, index, d, result, vcArr)
 					return false
 				}
 			}
-			g.Log().Infof(req.Context(), "用户%s验证码校验通过", key)
+			log.WithContext(req.Context()).Infof("用户%s验证码校验通过\n", key)
 			return true
 		}()
 		if ok {

+ 3 - 0
core/proxy/middleware/errorHandler.go

@@ -6,11 +6,14 @@ import (
 	"github.com/gogf/gf/v2/errors/gcode"
 	"github.com/gogf/gf/v2/errors/gerror"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 )
 
 // ErrorHandler 统一异常拦截、提醒,及日志打印中间件
 func ErrorHandler(r *ghttp.Request) {
 	r.Middleware.Next()
+	_, span := gtrace.NewSpan(r.Context(), "ErrorHandler")
+	defer span.End()
 	// 程序异常信息处理
 	err := r.GetError()
 	if err != nil {

+ 31 - 21
core/proxy/middleware/filterFuncs.go

@@ -1,7 +1,9 @@
 package middleware
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"fmt"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"net/url"
 	"strings"
 
@@ -12,7 +14,6 @@ import (
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/rpc"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/router"
-	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
 	"github.com/gogf/gf/v2/util/gconv"
 )
@@ -22,22 +23,26 @@ import (
 // step 2: 账户状态校验
 // step 3: 接口权益校验
 func filterBefore(r *ghttp.Request) error {
-	ctx := router.GetGContext(r.GetCtx())
-	rule := ctx.RouterRule
+	ctx, span := gtrace.NewSpan(r.Context(), "filterBefore")
+	defer span.End()
+	//r.SetCtx(ctx)
+
+	context := router.GetGContext(ctx)
+	rule := context.RouterRule
 
 	if rule.SessCheck.NeedCheck() {
 		uCheck, eCheck := rule.SessCheck.CheckUserSession(), rule.SessCheck.CheckEntSession()
-		if uCheck && ctx.Sess.UserId == "" {
+		if uCheck && context.Sess.UserId == "" {
 			return NewErrorWithCode(GLOBAL_ERR_NOTLOGIN)
 		}
-		if eCheck && ctx.Sess.EntId == 0 {
+		if eCheck && context.Sess.EntId == 0 {
 			return NewErrorWithCode(GLOBAL_ERR_NOENT_SELECT)
 		}
 	}
 
 	//校验账户状态,校验认证状态
 	if rule.AccountCheck.NeedCheck() || rule.AuthCheck.NeedCheck() {
-		if err := rpc.CheckAccountStatus(ctx.Sess.EntId, ctx.Sess.UserId, rule); err != nil {
+		if err := rpc.CheckAccountStatus(ctx, context.Sess.EntId, context.Sess.UserId, rule); err != nil {
 			return err
 		}
 	}
@@ -45,11 +50,11 @@ func filterBefore(r *ghttp.Request) error {
 	//校验权益
 	var powerErr error
 	if rule.PowerCheck == 1 {
-		useCount, surplusCount, powerErr = rpc.CheckResourcePower(ctx.Sess.AccountId, ctx.Sess.EntAccountId, ctx.Sess.EntId, ctx.Sess.EntUserId, rule.FuncCode, r.GetHeader("functionCode"), rule.AppId)
+		useCount, surplusCount, powerErr = rpc.CheckResourcePower(ctx, context.Sess.AccountId, context.Sess.EntAccountId, context.Sess.EntId, context.Sess.EntUserId, rule.FuncCode, r.GetHeader("functionCode"), rule.AppId)
 	}
 	//老剑鱼用户身份判断
 	if powerErr == nil && rule.PowerType > 0 {
-		powerErr = rpc.CheckUserPower(rule.PowerType, rule.AppId, ctx.Sess.MgoUserId, ctx.Sess.NewUid, ctx.Sess.AccountId, ctx.Sess.EntId, ctx.Sess.PositionType, ctx.Sess.PositionId)
+		powerErr = rpc.CheckUserPower(ctx, rule.PowerType, rule.AppId, context.Sess.MgoUserId, context.Sess.NewUid, context.Sess.AccountId, context.Sess.EntId, context.Sess.PositionType, context.Sess.PositionId)
 	}
 	if rule.NoPowerUrl == "" && powerErr != nil {
 		return powerErr
@@ -63,7 +68,7 @@ func filterBefore(r *ghttp.Request) error {
 	}
 
 	//注入用户身份
-	infusionIdentity(r, ctx.Sess, useCount, surplusCount, rule.AppId)
+	infusionHeader(r, context.Sess, useCount, surplusCount, rule.AppId)
 	//外部程序过滤器
 	if rule.IsOutServer {
 		//赛思用户身份注入
@@ -78,11 +83,15 @@ func filterBefore(r *ghttp.Request) error {
 // filterAfter 后置扣减逻辑。
 // 同步处理,若扣减异常,接口返回错误信息。
 func filterAfter(r *ghttp.Request) (err error) {
-	ctx := router.GetGContext(r.GetCtx())
+	ctx, span := gtrace.NewSpan(r.Context(), "filterAfter")
+	defer span.End()
+	//r.SetCtx(ctx)
+
+	context := router.GetGContext(ctx)
 	if r.GetError() != nil {
 		return
 	}
-	rule := ctx.RouterRule
+	rule := context.RouterRule
 	// 响应完成,判断是否扣除
 	if rule.Deduct != 0 {
 		var ids []string
@@ -91,7 +100,7 @@ func filterAfter(r *ghttp.Request) (err error) {
 			var respErr error
 			deductNum, ids, respErr = GetResponseJsonAndClear(r)
 			if respErr != nil { //扣减接口异常 不修改接口内容
-				g.Log().Error(r.Context(), respErr)
+				log.WithContext(r.Context()).Errorln(respErr)
 			}
 		} else if rule.Deduct != 1 {
 			deductNum = gconv.Int64(rule.Deduct)
@@ -99,13 +108,11 @@ func filterAfter(r *ghttp.Request) (err error) {
 
 		if deductNum > 0 { //资源接口异常
 			if rule.Deduct > 0 { //扣减
-				fmt.Println("扣减", deductNum, ids)
-				if err = rpc.ResourcePowerDeduct(ctx.Sess.AccountId, ctx.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
+				if err = rpc.ResourcePowerDeduct(ctx, context.Sess.AccountId, context.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
 					return err
 				}
 			} else { //充值
-				fmt.Println("充值", deductNum, ids)
-				if err = rpc.ResourcePowerRecharge(ctx.Sess.AccountId, ctx.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
+				if err = rpc.ResourcePowerRecharge(ctx, context.Sess.AccountId, context.Sess.EntAccountId, rule.FuncCode, rule.AppId, deductNum, ids); err != nil {
 					return err
 				}
 			}
@@ -117,14 +124,16 @@ func filterAfter(r *ghttp.Request) (err error) {
 
 // GetResponseJsonAndClear 获取接口返回参数,并删除扣减预留字段
 func GetResponseJsonAndClear(r *ghttp.Request) (deductNum int64, ids []string, err error) {
+	_, span := gtrace.NewSpan(r.Context(), "GetResponseJsonAndClear")
+	defer span.End()
 	respJson := gconv.Map(r.Response.Buffer())
 	defer func() {
 		r.Response.ClearBuffer()
 		r.Response.WriteJson(respJson)
 		r.Response.Header().Set("Content-Length", gconv.String(len(r.Response.Buffer())))
-		g.Log().Debugf(r.Context(), "填充 %s 相应头长度%s", gconv.String(respJson), r.Response.Header().Get("Content-Length"))
+		log.WithContext(r.Context()).Debugf("填充 %s 相应头长度%s\n", gconv.String(respJson), r.Response.Header().Get("Content-Length"))
 	}()
-	g.Log().Debugf(r.Context(), "获取 %s 相应头长度%s", gconv.String(respJson), r.Response.Header().Get("Content-Length"))
+	log.WithContext(r.Context()).Debugf("获取 %s 相应头长度%s", gconv.String(respJson), r.Response.Header().Get("Content-Length"))
 
 	//仅接口返回成功后 进行资源操作
 	if code, exists := respJson["error_code"]; !(exists && code == 0) {
@@ -144,8 +153,10 @@ func GetResponseJsonAndClear(r *ghttp.Request) (deductNum int64, ids []string, e
 	return
 }
 
-// infusionIdentity 用户身份注入Header  有则注入
-func infusionIdentity(r *ghttp.Request, sess *router.JySession, useCount, surplusCount int64, appId string) {
+// infusionHeader 用户身份注入Header  有则注入
+func infusionHeader(r *ghttp.Request, sess *router.JySession, useCount, surplusCount int64, appId string) {
+	_, span := gtrace.NewSpan(r.GetCtx(), "infusionHeader")
+	defer span.End()
 	r.Header.Set("appId", appId)
 	if sess.UserId != "" {
 		r.Header.Set("userId", sess.UserId)
@@ -203,7 +214,6 @@ func infusionIdentity(r *ghttp.Request, sess *router.JySession, useCount, surplu
 	if sess.UserName != "" {
 		reg := regexp.MustCompile("[^ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5\u00a5]+")
 		userName := strings.TrimSpace(reg.ReplaceAllString(sess.UserName, ""))
-		fmt.Println("正则替换userName", userName)
 		r.Header.Set("userName", userName)
 	}
 	if sess.EntUserName != "" {

+ 36 - 31
core/proxy/middleware/spiderPolyHandler.go

@@ -8,6 +8,7 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/router"
 	"fmt"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"strings"
 )
 
@@ -23,40 +24,44 @@ func InitFilterPolyManager() {
 }
 
 func FilterPolyHandler(r *ghttp.Request) {
-	ctx := r.GetCtx()
-	gCtx := router.GetGContext(ctx)
-	//获取策略
-	poly := filterPolyManager.GetRule(gCtx.RouterRule.LimitPloy)
-	status, key := func() (int, string) {
-		//用户身份切换
-		userFlag, _ := common.If(gCtx.Sess.MgoUserId != "", gCtx.Sess.MgoUserId, gCtx.Sess.UserId).(string)
-		if gCtx.Sess.UserId != "" && poly.Rule.BCheckId { //id请求频率校验
-			return poly.IdFilter(ctx, userFlag)
-		} else { //ip请求频率校验
-			return poly.IpFilter(ctx, r.GetClientIp())
+	func() {
+		ctx, span := gtrace.NewSpan(r.Context(), "FilterPolyHandler")
+		defer span.End()
+
+		gCtx := router.GetGContext(ctx)
+		//获取策略
+		poly := filterPolyManager.GetRule(gCtx.RouterRule.LimitPloy)
+		status, key := func() (int, string) {
+			//用户身份切换
+			userFlag, _ := common.If(gCtx.Sess.MgoUserId != "", gCtx.Sess.MgoUserId, gCtx.Sess.UserId).(string)
+			if gCtx.Sess.UserId != "" && poly.Rule.BCheckId { //id请求频率校验
+				return poly.IdFilter(ctx, userFlag)
+			} else { //ip请求频率校验
+				return poly.IpFilter(ctx, r.GetClientIp())
+			}
+		}()
+		returnHtml := false
+		if strings.Contains(strings.ToLower(r.Header.Get("Accept")), "html") {
+			returnHtml = true
 		}
-	}()
-	returnHtml := false
-	if strings.Contains(strings.ToLower(r.Header.Get("Accept")), "html") {
-		returnHtml = true
-	}
-	//是否开启黑名单
-	if status == -1 { //黑名单 不响应
-		r.SetError(NewErrorWithCode(OTHER_ERR_OFTEN, fmt.Sprintf("请求频繁限制")))
-		r.Response.ResponseWriter.WriteHeader(403)
-		return
-	}
-	if status == 2 { //处理验证码逻辑
-		rData := poly.VerifyHandle(r.Request, key)
-		if !returnHtml {
-			r.Response.WriteJsonExit(rData)
-		} else {
-			if renderErr := httpUtil.Render(r.Response.ResponseWriter, getVerifyPage(poly.Rule.VerifyPage), &rData); renderErr != nil {
-				r.SetError(NewErrorWithCode(GATEWAY_HTML_RENDER_ERR, fmt.Sprintf("验证码页面:%v\n", renderErr)))
+		//是否开启黑名单
+		if status == -1 { //黑名单 不响应
+			r.SetError(NewErrorWithCode(OTHER_ERR_OFTEN, fmt.Sprintf("请求频繁限制")))
+			r.Response.ResponseWriter.WriteHeader(403)
+			return
+		}
+		if status == 2 { //处理验证码逻辑
+			rData := poly.VerifyHandle(r.Request, key)
+			if !returnHtml {
+				r.Response.WriteJsonExit(rData)
+			} else {
+				if renderErr := httpUtil.Render(r.Response.ResponseWriter, getVerifyPage(poly.Rule.VerifyPage), &rData); renderErr != nil {
+					r.SetError(NewErrorWithCode(GATEWAY_HTML_RENDER_ERR, fmt.Sprintf("验证码页面:%v\n", renderErr)))
+				}
 			}
+			return
 		}
-		return
-	}
+	}()
 	r.Middleware.Next()
 }
 

+ 11 - 6
core/proxy/proxyServer.go

@@ -1,6 +1,7 @@
 package proxy
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/node"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/broker"
@@ -12,6 +13,7 @@ import (
 	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"net/http"
@@ -23,8 +25,9 @@ var routerManager *router.Manager
 const errTryTime = 10 //错误尝试
 
 // InitGateWayServer 初始化网关服务
-func InitGateWayServer() *ghttp.Server {
-	initCtx := gctx.New()
+func InitGateWayServer(initCtx gctx.Ctx) *ghttp.Server {
+	initCtx, span := gtrace.NewSpan(initCtx, "InitGateWayServer")
+	defer span.End()
 	//创建节点,并持续观察节点变化
 	watchNode := node.NewNode(gcfg.Instance().MustGet(initCtx, "system.etcdListen", nil).Strings()...)
 	go watchNode.NewWatcher(initCtx, vars.BManager)
@@ -33,12 +36,12 @@ func InitGateWayServer() *ghttp.Server {
 	var err error
 	routerManager, err = router.InitRouterManager()
 	if err != nil {
-		g.Log().Error(initCtx, err)
+		log.WithContext(initCtx).Errorln(err)
 	}
 	//初始化外部服务
 	sussBiServer, err := outServer.InitSussBi(gcfg.Instance().MustGet(initCtx, "outServer.sussbi", nil).Map())
 	if err != nil {
-		g.Log().Error(initCtx, err)
+		log.WithContext(initCtx).Infoln(err)
 	} else {
 		vars.BManager.RegisterOutServer(sussBiServer.Url, sussBiServer)
 	}
@@ -69,6 +72,8 @@ func InitGateWayServer() *ghttp.Server {
 // proxyHandler 网关代理Handler处理
 // 完成所有前置校验后,请求代理服务逻辑
 var proxyHandler = func(r *ghttp.Request) {
+	_, span := gtrace.NewSpan(r.Context(), "proxyHandler")
+	defer span.End()
 	if r.GetError() != nil {
 		return
 	}
@@ -105,7 +110,7 @@ var proxyHandler = func(r *ghttp.Request) {
 			if i == (errTryTime - 1) {
 				r.SetError(NewErrorWithCode(GATEWAY_PROXY_ERR, fmt.Sprintf("代理异常:%s err:%v \n", gCtx.ServerAddr, err.Error())))
 			}
-			g.Log().Error(r.Context(), "ErrorHandler ", err)
+			log.WithContext(r.Context()).Error("ErrorHandler ", err)
 		}
 		// 代理请求
 		proxyClient.CreateCustomProxyClient(proxyAddr, errHandel, changeFunc).ServeHTTP(r.Response.ResponseWriter, r.Request)
@@ -113,7 +118,7 @@ var proxyHandler = func(r *ghttp.Request) {
 		if gCtx.RouterRule.IsOutServer { //检测外部服务登录状态是否过期
 			if vars.BManager.CheckOutSeverLoginOut(gCtx.RouterRule.MiddleCode, r) || hasErr {
 				if err := vars.BManager.OutSeverLoginIn(gCtx.RouterRule.MiddleCode); err != nil {
-					g.Log().Errorf(r.GetCtx(), "%s 外部服务自动登录异常 %v \n", gCtx.RouterRule.MiddleCode, err)
+					log.WithContext(r.GetCtx()).Errorf("%s 外部服务自动登录异常 %v \n", gCtx.RouterRule.MiddleCode, err)
 				}
 			}
 		}

+ 4 - 1
core/proxy/rpc/powerCheckCenter.go

@@ -2,6 +2,7 @@ package rpc
 
 import (
 	"fmt"
+	"github.com/gogf/gf/v2/net/gtrace"
 
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
 	"bp.jydev.jianyu360.cn/BaseService/powerCheckCenter/rpc/pb"
@@ -23,7 +24,9 @@ func initPowerCheckCenterRpcRpc() {
 	}))
 }
 
-func CheckUserPower(power_type int, appid, userId string, baseUserId, accountId, entId, positionType, positionId int64) error {
+func CheckUserPower(ctx gctx.Ctx, power_type int, appid, userId string, baseUserId, accountId, entId, positionType, positionId int64) error {
+	ctx, span := gtrace.NewSpan(ctx, "CheckUserPower")
+	defer span.End()
 	res, err := PowerCheckCenterRpc.Check(gctx.New(), &pb.CheckReq{
 		Appid:        appid,
 		Userid:       userId,

+ 16 - 6
core/proxy/rpc/resourceCenter.go

@@ -2,6 +2,8 @@ package rpc
 
 import (
 	"fmt"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"strings"
 
 	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
@@ -32,7 +34,10 @@ func initResourceCenterRpc() {
 // funcCode 业务代码
 // reqFuncCode 	 通用结构&&需要校验权限则先判断此接口是否有此functionCode的方法
 // appid 平台标识
-func CheckResourcePower(accountId, entAccountId, entId, entUserId int64, funcCodeRule, reqFuncCode, Appid string) (UseCount, SurplusCount int64, err error) {
+func CheckResourcePower(ctx gctx.Ctx, accountId, entAccountId, entId, entUserId int64, funcCodeRule, reqFuncCode, Appid string) (UseCount, SurplusCount int64, err error) {
+	ctx, span := gtrace.NewSpan(ctx, "CheckResourcePower")
+	defer span.End()
+
 	funcCode := funcCodeRule
 	funcCodeArr := strings.Split(funcCodeRule, ",")
 	if reqFuncCode != "" || len(funcCodeArr) > 1 {
@@ -50,7 +55,7 @@ func CheckResourcePower(accountId, entAccountId, entId, entUserId int64, funcCod
 		funcCode = reqFuncCode
 	}
 
-	res, err := ResourceCenterRpc.CheckPower(gctx.New(), &pb.CheckPowerReq{
+	res, err := ResourceCenterRpc.CheckPower(ctx, &pb.CheckPowerReq{
 		Appid:        Appid,
 		FunctionCode: funcCode,
 		AccountId:    accountId,
@@ -87,8 +92,10 @@ func CheckResourcePower(accountId, entAccountId, entId, entUserId int64, funcCod
 // funcCode 业务代码
 // deductNum 扣除数量
 // ids 扣除详情id;例如数据导出信息id等数据
-func ResourcePowerDeduct(accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
-	res, err := ResourceCenterRpc.Deduction(gctx.New(), &pb.DeductionReq{
+func ResourcePowerDeduct(ctx g.Ctx, accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
+	ctx, span := gtrace.NewSpan(ctx, "ResourcePowerDeduct")
+	defer span.End()
+	res, err := ResourceCenterRpc.Deduction(ctx, &pb.DeductionReq{
 		Appid:        appId,
 		AccountId:    accountId,
 		EntAccountId: entAccountId,
@@ -119,8 +126,11 @@ func ResourcePowerDeduct(accountId, entAccountId int64, funcCode, appId string,
 // funcCode 业务代码
 // deductNum 扣除数量
 // ids 扣除详情id;例如数据导出信息id等数据
-func ResourcePowerRecharge(accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
-	res, err := ResourceCenterRpc.Recharge(gctx.New(), &pb.RechargeReq{
+func ResourcePowerRecharge(ctx g.Ctx, accountId, entAccountId int64, funcCode, appId string, deductNum int64, ids []string) error {
+	ctx, span := gtrace.NewSpan(ctx, "ResourcePowerRecharge")
+	defer span.End()
+
+	res, err := ResourceCenterRpc.Recharge(ctx, &pb.RechargeReq{
 		Appid:        appId,
 		AccountId:    accountId,
 		EntAccountId: entAccountId,

+ 5 - 1
core/proxy/rpc/userCenter.go

@@ -6,6 +6,7 @@ import (
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter"
 	"fmt"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/zeromicro/go-zero/core/discov"
@@ -24,7 +25,10 @@ func initUserCenterRpc() {
 }
 
 // CheckAccountStatus 校验企业认证状态及账户状态
-func CheckAccountStatus(entId int64, userId string, rule *router.Router) error {
+func CheckAccountStatus(ctx gctx.Ctx, entId int64, userId string, rule *router.Router) error {
+	_, span := gtrace.NewSpan(ctx, "CheckAccountStatus")
+	defer span.End()
+
 	if rule.AuthCheck.GetCode() == 0 && rule.AccountCheck.GetCode() == 0 {
 		return nil
 	}

+ 5 - 0
core/router/manager.go

@@ -7,6 +7,7 @@ import (
 	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/net/gtrace"
 	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/gogf/gf/v2/util/gconv"
 	"log"
@@ -98,6 +99,10 @@ func (m *Manager) GetRouterRule(url string) (*Router, error) {
 
 // InfusionContext 注入通用结构体gContext
 func (m *Manager) InfusionContext(r *ghttp.Request) (err error) {
+	_, span := gtrace.NewSpan(r.Context(), "InfusionContext")
+	defer span.End()
+	//r.SetCtx(ctx)
+
 	var router *Router
 	var GCtx = &GContext{
 		Sess:       &JySession{},

+ 2 - 2
core/util/http.go

@@ -1,13 +1,13 @@
 package util
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"bufio"
 	"bytes"
 	"compress/flate"
 	"compress/gzip"
 	"encoding/json"
 	"fmt"
-	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/net/ghttp"
 	"io"
 	"io/ioutil"
@@ -58,7 +58,7 @@ func ChangeResponse(r *ghttp.Request, fn func([]byte) error) (err error) {
 	if encoding == "gzip" { //处理解压
 		body, err := gzip.NewReader(r.Body)
 		if err != nil {
-			g.Log().Error(r.Context(), "ChangeResponse gzip err", err)
+			log.WithContext(r.Context()).Error(r.Context(), "ChangeResponse gzip err", err)
 			return err
 		}
 		content, err = io.ReadAll(body)

+ 12 - 36
etc/config.yaml

@@ -1,4 +1,3 @@
-# 代理网关服务配置
 server:
   # 基本配置
   address: :8077                          # 本地监听地址。默认":80"
@@ -23,17 +22,17 @@ etcd:
     userCenter:
       key: usercenter.rpc
       address:
-        - 192.168.3.206:2379
+        - 192.168.3.149:2379
     # 资源中台配置
     resourceCenter:
       key: resource.rpc
       address:
-        - 192.168.3.206:2379
+        - 192.168.3.149:2379
     # 权益中台配置
     powerCheckCenter:
       key: powercheck.rpc
       address:
-        - 192.168.3.206:2379
+        - 192.168.3.149:2379
 
 #数据库配置
 databases:
@@ -54,7 +53,7 @@ databases:
   # jianyu mysql配置
   mysqlJy:
     dbName: jianyu
-    address: 192.168.3.11:3366
+    address: 192.168.3.149:3306
     userName: root
     passWord: Topnet123
     maxOpenConns: 5
@@ -67,20 +66,11 @@ databases:
     dbName: qfw
     replSet:
 
-  # mongo 日志配置
-  mogLog:
-    address: 192.168.3.206:27090
-    size: 5
-    dbName: qfw
-    replSet:
-    userName: admin
-    password: 123456
-
 # 系统配置
 system:
   # 监听服务注册etcd配置
   etcdListen:
-    - 192.168.3.206:2379
+    - 127.0.0.1:2379
 
   response:
     head-clear: # 响应头删除
@@ -97,34 +87,20 @@ proxy:
   expectContinueTimeout: 1    # 100-continue 超时时间。默认1秒
   maxIdleConnsPerHost: 5      # 客户端可以持有的最大空闲连接。默认5
 
-#日志配置
-logger:
-  level: "PROD"                # ALL, DEV, PROD
-  default:
-    file: "{Y-m-d}.log"
-    rotateExpire: 10
-    rotateBackupLimit: 10
-    stdout: true
-    path: "./logs/system"
-  reqLog:
-    level: "PROD"
-    saveToDb: true
-    path: "./logs/request"
-    file: "{Y-m-d}.log"        # 日志文件格式
-    stdout: true               # 是否输出至控制台
-    rotateExpire: 7d           # 当日志文件超过7天都没有任何修改/写入时,glog模块将会自动将其进行滚动切分。同时进行压缩存储
-    rotateBackupExpire: 60s    # 切分文件的过期时间为7d,即七天后会自动删除该切分文件
-    rotateBackupCompress: 0   # 滚动切分文件的压缩比(0-9)。默认为0,表示不压缩
+jaeger:
+  name: "gateway"
+  address: "192.168.3.71:6831"
 
 # 系统告警
 alarm:
-  isOpen: true                        # 异常通知开关。默关闭
+  isOpen: true                        # 异常通知开关。默���关闭
   address: 192.168.3.207:4150         # nsq消息通知地址。默认关闭
   toppic: jyalert                     # 消息管道
   isJsonEncode: false                 # 是否加密
   id: pre_alert                       # id
   title: 你有新的告警消息处理            # 消息标题
   text: 前置代理告警请查看               # 消息正文
+
 outServer:
   sussbi:
     addr: http://192.168.3.11:8012
@@ -156,5 +132,5 @@ outServer:
 
 # 仅限此程序代理的地址
 noPowerUrlSwitch:
-  '/nzj/app/nzj.app/nzj_detail_1.spg' : '/nzj/app/nzj.app/nzj_detail_0.spg'
-  '/nzj/app/nzj.app/nzj_search_1.spg': '/nzj/app/nzj.app/nzj_search_0.spg'
+  '/succbi/nzj/app/nzj.app/nzj_detail_1.spg' : '/succbi/nzj/app/nzj.app/nzj_detail_0.spg'
+  '/succbi/nzj/app/nzj.app/nzj_search_1.spg': '/succbi/nzj/app/nzj.app/nzj_search_0.spg'

+ 39 - 26
go.mod

@@ -4,23 +4,25 @@ go 1.18
 
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a
+	app.yhyue.com/moapp/jylog v0.0.0-20230505080135-5a601a22417a
 	bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220424062752-50170a93c431
 	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230210052334-7b32c3b8c773
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7
 	bp.jydev.jianyu360.cn/BaseService/userCenter v0.0.0-20220905055615-8540037e1b06
 	github.com/go-redis/redis v6.15.9+incompatible
+	github.com/gogf/gf/contrib/trace/jaeger/v2 v2.3.3
 	github.com/gogf/gf/v2 v2.3.1
 	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
 	github.com/zeromicro/go-zero v1.4.4
 	go.etcd.io/etcd/client/v3 v3.5.7
-	golang.org/x/net v0.6.0
+	golang.org/x/net v0.8.0
 )
 
 require (
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
-	github.com/cenkalti/backoff/v4 v4.1.3 // indirect
-	github.com/cespare/xxhash/v2 v2.1.2 // indirect
+	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/clbanning/mxj/v2 v2.5.5 // indirect
 	github.com/coreos/go-semver v0.3.0 // indirect
 	github.com/coreos/go-systemd/v22 v22.3.2 // indirect
@@ -29,9 +31,9 @@ require (
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/fatih/color v1.13.0 // indirect
 	github.com/felixge/fgprof v0.9.3 // indirect
-	github.com/fsnotify/fsnotify v1.5.4 // indirect
+	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
-	github.com/go-logr/logr v1.2.3 // indirect
+	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
 	github.com/go-sql-driver/mysql v1.7.0 // indirect
@@ -47,21 +49,23 @@ require (
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
+	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.13.6 // indirect
-	github.com/magiconair/properties v1.8.6 // indirect
-	github.com/mattn/go-colorable v0.1.9 // indirect
+	github.com/klauspost/compress v1.15.11 // indirect
+	github.com/magiconair/properties v1.8.7 // indirect
+	github.com/mattn/go-colorable v0.1.12 // indirect
 	github.com/mattn/go-isatty v0.0.14 // indirect
 	github.com/mattn/go-runewidth v0.0.13 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
+	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
 	github.com/nsqio/go-nsq v1.1.0 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
-	github.com/openzipkin/zipkin-go v0.4.0 // indirect
+	github.com/openzipkin/zipkin-go v0.4.1 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.6 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/prometheus/client_golang v1.13.0 // indirect
@@ -69,7 +73,14 @@ require (
 	github.com/prometheus/common v0.37.0 // indirect
 	github.com/prometheus/procfs v0.8.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
+	github.com/sirupsen/logrus v1.9.0 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
+	github.com/spf13/afero v1.9.3 // indirect
+	github.com/spf13/cast v1.5.0 // indirect
+	github.com/spf13/jwalterweatherman v1.1.0 // indirect
+	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/spf13/viper v1.15.0 // indirect
+	github.com/subosito/gotenv v1.4.2 // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
 	github.com/xdg-go/scram v1.1.1 // indirect
 	github.com/xdg-go/stringprep v1.0.3 // indirect
@@ -77,33 +88,35 @@ require (
 	go.etcd.io/etcd/api/v3 v3.5.7 // indirect
 	go.etcd.io/etcd/client/pkg/v3 v3.5.7 // indirect
 	go.mongodb.org/mongo-driver v1.11.1 // indirect
-	go.opentelemetry.io/otel v1.10.0 // indirect
-	go.opentelemetry.io/otel/exporters/jaeger v1.10.0 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.10.0 // indirect
-	go.opentelemetry.io/otel/exporters/zipkin v1.10.0 // indirect
-	go.opentelemetry.io/otel/sdk v1.10.0 // indirect
-	go.opentelemetry.io/otel/trace v1.10.0 // indirect
+	go.opentelemetry.io/otel v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
+	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
+	go.opentelemetry.io/otel/trace v1.15.1 // indirect
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
 	go.uber.org/atomic v1.9.0 // indirect
 	go.uber.org/automaxprocs v1.5.1 // indirect
 	go.uber.org/multierr v1.8.0 // indirect
 	go.uber.org/zap v1.21.0 // indirect
-	golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
+	golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect
 	golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect
-	golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect
+	golang.org/x/oauth2 v0.4.0 // indirect
 	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.5.0 // indirect
-	golang.org/x/term v0.5.0 // indirect
-	golang.org/x/text v0.7.0 // indirect
+	golang.org/x/sys v0.7.0 // indirect
+	golang.org/x/term v0.6.0 // indirect
+	golang.org/x/text v0.8.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e // indirect
-	google.golang.org/grpc v1.51.0 // indirect
-	google.golang.org/protobuf v1.28.1 // indirect
+	google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
+	google.golang.org/grpc v1.54.0 // indirect
+	google.golang.org/protobuf v1.30.0 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
+	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect

+ 100 - 34
go.sum

@@ -9,6 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20220719064915-2fef79005dfa/go.mod h1:FjBF25AY
 app.yhyue.com/moapp/jybase v0.0.0-20220802080941-07f401baab8b/go.mod h1:HelrO6tcD9TcKb/HOP2BLbzppyDz2kpQSFhPMQTUgbQ=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a h1:wD4aWPSYdiX1cIP4lzzPD2s7fYhKa3muIf97l9tonJE=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
+app.yhyue.com/moapp/jylog v0.0.0-20230505080135-5a601a22417a h1:5VcnGRHuZxsBptNduCiJUT0/OXCTevv7RFJ+lvsmAxU=
+app.yhyue.com/moapp/jylog v0.0.0-20230505080135-5a601a22417a/go.mod h1:hlsdPMebg8N90L57xkxJdVVFuvtlT8SuZLM6hY+jB44=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220424062752-50170a93c431 h1:PWQcPR7OrvAYVPWUNLwwiUl859ziAPfIHSLgbVP6N8Y=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220424062752-50170a93c431/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
@@ -32,6 +34,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
 cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
 cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
 cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
 cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
 cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
@@ -44,6 +47,7 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY
 cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
 cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
 cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
+cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
 cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
 cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
 cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
@@ -346,6 +350,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
 cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
 cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
 cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
 cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=
@@ -444,13 +449,15 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
-github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
 github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
+github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
+github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -514,11 +521,13 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
+github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
-github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
+github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
+github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
 github.com/fullstorydev/grpcurl v1.8.6/go.mod h1:WhP7fRQdhxz2TkL97u+TCb505sxfH78W1usyoB3tepw=
 github.com/fullstorydev/grpcurl v1.8.7/go.mod h1:pVtM4qe3CMoLaIzYS8uvTuDj2jVYmXqMUkZeijnXp/E=
 github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM=
@@ -543,8 +552,9 @@ github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTg
 github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
 github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
+github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
@@ -595,6 +605,9 @@ github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGt
 github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
 github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogf/gf/contrib/trace/jaeger/v2 v2.3.3 h1:vLkj6PxOvJFaQ/YLLkhA8t9g3b0bqiAv99yf5Jjd0Jk=
+github.com/gogf/gf/contrib/trace/jaeger/v2 v2.3.3/go.mod h1:RMX9eZNqz4sdIyGcXM9W1HXW8D6lATYjAKgFBbdOnLk=
+github.com/gogf/gf/v2 v2.0.0/go.mod h1:apktt6TleWtCIwpz63vBqUnw8MX8gWKoZyxgDpXFtgM=
 github.com/gogf/gf/v2 v2.0.6/go.mod h1:8uYzw7qNzuq8vrhVlWke1b1925FFqOJIgmyYW1sr/0M=
 github.com/gogf/gf/v2 v2.3.1 h1:uptCJK47N6KSRwTBnFAqBWYnYa/OXBkZ0OlhO9CK7bQ=
 github.com/gogf/gf/v2 v2.3.1/go.mod h1:tsbmtwcAl2chcYoq/fP9W2FZf06aw4i89X34nbSHo9Y=
@@ -684,6 +697,7 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
 github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
 github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
@@ -714,6 +728,7 @@ github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2c
 github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw=
 github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
 github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
+github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU=
 github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
 github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
@@ -735,6 +750,8 @@ github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplb
 github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
@@ -782,16 +799,18 @@ github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0Lh
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
-github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c=
+github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
@@ -803,8 +822,9 @@ github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/longbridgeapp/sqlparser v0.3.1/go.mod h1:GIHaUq8zvYyHLCLMJJykx1CdM6LHtkUih/QaJXySSx4=
-github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
 github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
+github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
@@ -812,8 +832,9 @@ github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ
 github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
 github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
 github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U=
 github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
+github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
@@ -826,6 +847,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
 github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
 github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615/go.mod h1:Ad7oeElCZqA1Ufj0U9/liOF4BtVepxRcTvr2ey7zTvM=
 github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -872,8 +895,9 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
 github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/openzipkin/zipkin-go v0.3.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
-github.com/openzipkin/zipkin-go v0.4.0 h1:CtfRrOVZtbDj8rt1WXjklw0kqqJQwICrCKmlfUuBUUw=
 github.com/openzipkin/zipkin-go v0.4.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
+github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A=
+github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM=
 github.com/paulmach/orb v0.5.0/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
 github.com/paulmach/orb v0.7.1/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
 github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
@@ -890,6 +914,7 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
 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/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
@@ -930,6 +955,7 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L
 github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/shirou/gopsutil v2.19.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
@@ -943,6 +969,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
 github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
 github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
@@ -950,11 +978,19 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO
 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
+github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
+github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
+github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
+github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
 github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -972,8 +1008,10 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
 github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
+github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
+github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
 github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
@@ -1040,40 +1078,50 @@ go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVj
 go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
 go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM=
 go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo=
-go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4=
 go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ=
+go.opentelemetry.io/otel v1.15.1 h1:3Iwq3lfRByPaws0f6bU3naAqOR1n5IeDWd9390kWHa8=
+go.opentelemetry.io/otel v1.15.1/go.mod h1:mHHGEHVDLal6YrKMmk9LqC4a3sF5g+fHfrttQIB1NTc=
 go.opentelemetry.io/otel/exporters/jaeger v1.3.0/go.mod h1:KoYHi1BtkUPncGSRtCe/eh1ijsnePhSkxwzz07vU0Fc=
+go.opentelemetry.io/otel/exporters/jaeger v1.7.0/go.mod h1:PwQAOqBgqbLQRKlj466DuD2qyMjbtcPpfPfj+AqbSBs=
 go.opentelemetry.io/otel/exporters/jaeger v1.8.0/go.mod h1:GbWg+ng88rDtx+id26C34QLqw2erqJeAjsCx9AFeHfE=
 go.opentelemetry.io/otel/exporters/jaeger v1.9.0/go.mod h1:hquezOLVAybNW6vanIxkdLXTXvzlj2Vn3wevSP15RYs=
-go.opentelemetry.io/otel/exporters/jaeger v1.10.0 h1:7W3aVVjEYayu/GOqOVF4mbTvnCuxF1wWu3eRxFGQXvw=
 go.opentelemetry.io/otel/exporters/jaeger v1.10.0/go.mod h1:n9IGyx0fgyXXZ/i0foLHNxtET9CzXHzZeKCucvRBFgA=
-go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 h1:TaB+1rQhddO1sF71MpZOZAuSPW1klK2M8XxfrBMfK7Y=
+go.opentelemetry.io/otel/exporters/jaeger v1.15.1 h1:x3SLvwli0OyAJapNcOIzf1xXBRBA+HD3elrMQmFfmXo=
+go.opentelemetry.io/otel/exporters/jaeger v1.15.1/go.mod h1:0Ck9b5oLL/bFZvfAEEqtrb1U0jZXjm5fWXMCOCG3vvM=
 go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0 h1:pDDYmo0QadUPal5fwXoY1pmMpFcdyhXOmL5drCrI3vU=
+go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 h1:XYDQtNzdb2T4uM1pku2m76eSMDJgqhJ+6KzkqgQBALc=
+go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1/go.mod h1:uOTV75+LOzV+ODmL8ahRLWkFA3eQcSC2aAsbxIu4duk=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0/go.mod h1:Krqnjl22jUJ0HgMzw5eveuCvFDXY4nSYb4F8t5gdrag=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0 h1:KtiUEhQmj/Pa874bVYKGNVdq8NPKiacPbaRRtgXi+t4=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 h1:tyoeaUh8REKay72DVYsSEBYV18+fGONe+YYPaOxgLoE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1/go.mod h1:HUSnrjQQ19KX9ECjpQxufsF+3ioD3zISPMlauTPZu2g=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0/go.mod h1:OfUCyyIiDvNXHWpcWgbF+MWvqPZiNa3YDEnivcnYsV0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.10.0 h1:S8DedULB3gp93Rh+9Z+7NTEv+6Id/KYS7LDyipZ9iCE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 h1:pIfoG5IAZFzp9EUlJzdSkpUwpaUAAnD+Ru1nBLTACIQ=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1/go.mod h1:poNKBqF5+nR/6ke2oGTDjHfksrsHDOHXAl2g4+9ONsY=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.10.0/go.mod h1:5WV40MLWwvWlGP7Xm8g3pMcg0pKOUY609qxJn8y7LmM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 h1:pnJfHmVcCEBcH5lkM+npJF8cTAjV/d+9cXVNCs5P/ao=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1/go.mod h1:cC3Eu2V56zXY09YlijmqDhOUnL2jVL6KKJg4PGh++dU=
 go.opentelemetry.io/otel/exporters/zipkin v1.3.0/go.mod h1:LxGGfHIYbvsFnrJtBcazb0yG24xHdDGrT/H6RB9r3+8=
 go.opentelemetry.io/otel/exporters/zipkin v1.8.0/go.mod h1:0uYAyCuGT67MFV9Z/Mmx93wGuugHw0FbxMc74fs3LNo=
 go.opentelemetry.io/otel/exporters/zipkin v1.9.0/go.mod h1:HyIvYIu37wV4Wx5azd7e05x9k/dOz9KB4x0plw2QNvs=
-go.opentelemetry.io/otel/exporters/zipkin v1.10.0 h1:HcPAFsFpEBKF+G5NIOA+gBsxifd3Ej+wb+KsdBLa15E=
 go.opentelemetry.io/otel/exporters/zipkin v1.10.0/go.mod h1:HdfvgwcOoCB0+zzrTHycW6btjK0zNpkz2oTGO815SCI=
+go.opentelemetry.io/otel/exporters/zipkin v1.15.1 h1:B6s/o48bx00ayJu7F+jIMJfhPTyxW+S8vthjTZMNBj0=
+go.opentelemetry.io/otel/exporters/zipkin v1.15.1/go.mod h1:EjjV7/YfYXG+khxCOfG6PPeRGoOmtcSusyW66qPqpRQ=
 go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM=
 go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
 go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU=
 go.opentelemetry.io/otel/sdk v1.8.0/go.mod h1:uPSfc+yfDH2StDM/Rm35WE8gXSNdvCg023J6HeGNO0c=
 go.opentelemetry.io/otel/sdk v1.9.0/go.mod h1:AEZc8nt5bd2F7BC24J5R0mrjYnpEgYHyTcM/vrSple4=
-go.opentelemetry.io/otel/sdk v1.10.0 h1:jZ6K7sVn04kk/3DNUdJ4mqRlGDiXAVuIG+MMENpTNdY=
 go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE=
+go.opentelemetry.io/otel/sdk v1.15.1 h1:5FKR+skgpzvhPQHIEfcwMYjCBr14LWzs3uSqKiQzETI=
+go.opentelemetry.io/otel/sdk v1.15.1/go.mod h1:8rVtxQfrbmbHKfqzpQkT5EzZMcbMBwTzNAggbEAM0KA=
 go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
 go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
 go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
 go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4=
 go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo=
-go.opentelemetry.io/otel/trace v1.10.0 h1:npQMbR8o7mum8uF95yFbOEJffhs1sbCOfDh8zAJiH5E=
 go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM=
+go.opentelemetry.io/otel/trace v1.15.1 h1:uXLo6iHJEzDfrNC0L0mNjItIp06SyaBQxu5t3xMlngY=
+go.opentelemetry.io/otel/trace v1.15.1/go.mod h1:IWdQG/5N1x7f6YUlmdLeJvH9yxtuJAfc4VW5Agv9r/8=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw=
 go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
@@ -1085,8 +1133,8 @@ go.uber.org/automaxprocs v1.5.1 h1:e1YG66Lrk73dn4qhg8WFSvhF0JuFQF0ERIp4rpuV8Qk=
 go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU=
 go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
-go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
 go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
+go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
 go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
 go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
 go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
@@ -1108,10 +1156,13 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh
 golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
+golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 h1:x8vtB3zMecnlqZIwJNUUpwYKYSqCz5jXbiyv0ZJJZeI=
+golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1185,6 +1236,7 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
 golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
@@ -1209,8 +1261,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
 golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1235,8 +1287,9 @@ golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7Lm
 golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
 golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
-golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk=
 golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
+golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M=
+golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1309,6 +1362,7 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1327,6 +1381,7 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1344,16 +1399,18 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1366,8 +1423,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0=
 golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1432,6 +1489,7 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
 golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
@@ -1542,7 +1600,9 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D
 google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
@@ -1612,8 +1672,9 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz
 google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
 google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
 google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo=
-google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e h1:azcyH5lGzGy7pkLCbhPe0KkKxsM7c6UA/FZIXImKE7M=
 google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w=
+google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -1651,8 +1712,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
 google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
 google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
 google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
-google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
+google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag=
+google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -1669,8 +1730,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
+google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -1687,6 +1749,10 @@ gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
 gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

+ 13 - 1
main.go

@@ -1,13 +1,16 @@
 package main
 
 import (
+	log "app.yhyue.com/moapp/jylog"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/common/db"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/logs"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/middleware"
 	"bp.jydev.jianyu360.cn/BaseService/gateway/core/proxy/rpc"
+	"github.com/gogf/gf/contrib/trace/jaeger/v2"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/os/gcfg"
+	"github.com/gogf/gf/v2/os/gctx"
 )
 
 func init() {
@@ -19,6 +22,15 @@ func init() {
 }
 
 func main() {
+	mainCtx := gctx.New()
+	//初始化链路跟踪
+	if jaegerAddress := g.Cfg().MustGet(mainCtx, "jaeger.address", "").String(); jaegerAddress != "" {
+		tp, err := jaeger.Init(g.Cfg().MustGet(mainCtx, "jaeger.name", "gateway").String(), jaegerAddress)
+		if err != nil {
+			log.WithContext(mainCtx).Fatal(err)
+		}
+		defer tp.Shutdown(mainCtx)
+	}
 	//初始化网关服务并启动服务
-	proxy.InitGateWayServer().Run()
+	proxy.InitGateWayServer(mainCtx).Run()
 }