Commit 51b577e32b780041c92c0a3eb3389d50768aa0e1

Authored by 王家文
1 parent 07718e2b
Exists in master and in 1 other branch dev-wjw

feat:相关公共库加入

.idea/.gitignore
... ... @@ -1,8 +0,0 @@
1   -# Default ignored files
2   -/shelf/
3   -/workspace.xml
4   -# Editor-based HTTP Client requests
5   -/httpRequests/
6   -# Datasource local storage ignored files
7   -/dataSources/
8   -/dataSources.local.xml
.idea/api-game.iml
... ... @@ -1,9 +0,0 @@
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<module type="WEB_MODULE" version="4">
3   - <component name="Go" enabled="true" />
4   - <component name="NewModuleRootManager">
5   - <content url="file://$MODULE_DIR$" />
6   - <orderEntry type="inheritedJdk" />
7   - <orderEntry type="sourceFolder" forTests="false" />
8   - </component>
9   -</module>
10 0 \ No newline at end of file
.idea/modules.xml
... ... @@ -1,8 +0,0 @@
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<project version="4">
3   - <component name="ProjectModuleManager">
4   - <modules>
5   - <module fileurl="file://$PROJECT_DIR$/.idea/api-game.iml" filepath="$PROJECT_DIR$/.idea/api-game.iml" />
6   - </modules>
7   - </component>
8   -</project>
9 0 \ No newline at end of file
.idea/vcs.xml
... ... @@ -1,6 +0,0 @@
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<project version="4">
3   - <component name="VcsDirectoryMappings">
4   - <mapping directory="" vcs="Git" />
5   - </component>
6   -</project>
7 0 \ No newline at end of file
api-common/config/api.go 0 → 100644
... ... @@ -0,0 +1,209 @@
  1 +package config
  2 +
  3 +import (
  4 + "apigame/lx-util/lxalilog"
  5 + "apigame/lx-util/lxconv"
  6 + "apigame/lx-util/lxmysql"
  7 + "encoding/json"
  8 + "errors"
  9 + "fmt"
  10 +)
  11 +
  12 +type MApiGameConfig struct {
  13 + AppID string `json:"appid"`
  14 + Secret string `json:"secret"`
  15 + Appkey string `json:"appkey"`
  16 + Name string `json:"name"`
  17 +}
  18 +
  19 +// GetApiGameConfig 获取游戏配置文件
  20 +func GetApiGameConfig(gameid string) (data MApiGameConfig, err error) {
  21 +
  22 + config := lxmysql.QueryCacheConfig{
  23 + SQL: fmt.Sprintf("select appid,secret,appkey,name from s_game_config where isdel=0 and status=1 and gameid='%s' order by id desc limit 1", gameid),
  24 + DBIndex: CONST_APIDBINDEX,
  25 + Exexpire: CONST_CACHETIME,
  26 + }
  27 +
  28 + var datas []MApiGameConfig
  29 +
  30 + err = lxmysql.QueryWithCache(config, &datas)
  31 + if err != nil {
  32 + lxalilog.Errors(err, lxconv.JsonEncode(config))
  33 + return
  34 + }
  35 +
  36 + if len(datas) < 1 {
  37 + err = errors.New("no rows")
  38 + lxalilog.Errors(err)
  39 + return
  40 + }
  41 +
  42 + data = datas[0]
  43 +
  44 + return
  45 +}
  46 +
  47 +type MApiServerConfig struct {
  48 + Egift MApiServerEgift `json:"egift"` //无尽轮换
  49 + Membership []Membership `json:"membership"` //周卡 月卡
  50 + Novicegift Novicegift `json:"novicegift"` // 新手礼包
  51 + PassCheck []PassCheck `json:"pass_check"` //通行证
  52 + Qixi QixiConfig `json:"qixi"` //七夕活动
  53 + Thinkingdata ThinkingdataConfig `json:"thinkingdata"` //数数配置
  54 +}
  55 +
  56 +// --------------------------- 无尽轮换礼包配置表 ---------------------------
  57 +
  58 +// MApiServerEgift 无尽轮换礼包配置表
  59 +type MApiServerEgift struct {
  60 + Config []MApiServerEgiftConfig `json:"config"`
  61 + ListLength string `json:"list_length"`
  62 + Days string `json:"days"`
  63 + Date string `json:"date"`
  64 +}
  65 +
  66 +type MApiServerEgiftConfig struct {
  67 + ID string `json:"id"`
  68 + Award string `json:"award"`
  69 + Type string `json:"type"`
  70 + ShopID string `json:"shop_id"`
  71 + GroupID string `json:"group_id,omitempty"`
  72 +}
  73 +
  74 +// --------------------------- 无尽轮换礼包配置表 ---------------------------
  75 +
  76 +// --------------------------- 周卡 月卡 配置 ---------------------------
  77 +
  78 +type Membership struct {
  79 + Name string `json:"name"` // 模式名称
  80 + Days string `json:"days"` // 第几天
  81 + Goodid string `json:"goodid"` // 商品ID
  82 + Award string `json:"award"` // 奖励
  83 + Naturalday string `json:"naturalday"` // 是否自然日
  84 +}
  85 +
  86 +// --------------------------- 周卡 月卡 配置 ---------------------------
  87 +
  88 +// --------------------------- 新手 配置 ---------------------------
  89 +
  90 +type Novicegift struct {
  91 + Goodid string `json:"goodid"` // 商品ID
  92 + List []struct {
  93 + Days string `json:"days"` // 第几天
  94 + Award string `json:"award"` // 奖励
  95 + } `json:"list"`
  96 +}
  97 +
  98 +// --------------------------- 新手礼包 配置 ---------------------------
  99 +
  100 +type PassCheck struct {
  101 + ID string `json:"ID"`
  102 + Level string `json:"Level"`
  103 + GroupId string `json:"GroupId"`
  104 + GoodId string `json:"GoodId"`
  105 + Experience string `json:"Experience"`
  106 + AwardFree string `json:"AwardFree"`
  107 + AwardPay string `json:"AwardPay"`
  108 + DrawTime int64 `json:"DrawTime"`
  109 +}
  110 +
  111 +// --------------------------- 七夕活动 ---------------------------
  112 +
  113 +type QixiConfig struct {
  114 + ActivityId string `json:"activity_id"`
  115 + StartTime int64 `json:"start_time"`
  116 + EndTime int64 `json:"end_time"`
  117 + Awards []QixiConfigAwards `json:"awards"`
  118 + FalseProgress []QixiConfigFalseProgress `json:"false_progress"`
  119 + Mail QixiConfigMail `json:"mail"`
  120 + RankConfig QixiConfigRankConfig `json:"rank_config"`
  121 + AlilogName string `json:"alilog_name"`
  122 + AddMax int64 `json:"add_max"`
  123 +}
  124 +
  125 +type QixiConfigFalseProgress struct {
  126 + Day string `json:"day"`
  127 + Time string `json:"time"`
  128 + ChangeLowest string `json:"change_lowest"`
  129 + ChangeHighest string `json:"change_highest"`
  130 + Must string `json:"must"`
  131 +}
  132 +
  133 +type QixiConfigAwards struct {
  134 + Point string `json:"point"`
  135 + AwardType string `json:"award_type"`
  136 + AwardNumber string `json:"award_number"`
  137 + LowLimit string `json:"low_limit"`
  138 + HighLimit string `json:"high_limit"`
  139 +}
  140 +
  141 +type QixiConfigMail struct {
  142 + Title string `json:"title"`
  143 + Sender string `json:"sender"`
  144 + Content string `json:"content"`
  145 + Ex int64 `json:"ex"`
  146 +}
  147 +
  148 +type QixiConfigRankConfig struct {
  149 + MinPoint int64 `json:"min_point"`
  150 +}
  151 +
  152 +// --------------------------- 七夕活动 ---------------------------
  153 +
  154 +// --------------------------- 数数配置 ---------------------------
  155 +
  156 +type ThinkingdataConfig struct {
  157 + Appid string `json:"appid"`
  158 + Id int `json:"id"`
  159 + Swich struct {
  160 + Engine int `json:"engine"`
  161 + Order int `json:"order"`
  162 + Pass int `json:"pass"`
  163 + Recharge int `json:"recharge"` // 累计充值 开启
  164 + } `json:"switch"`
  165 +}
  166 +
  167 +// --------------------------- 数数配置 ---------------------------
  168 +
  169 +// GetApiServerConfig 获取游服务端置文件
  170 +func GetApiServerConfig(gameid string, dbindex ...string) (data MApiServerConfig, content string, err error) {
  171 +
  172 + var dindex = CONST_APIDBINDEX
  173 + if len(dbindex) > 0 {
  174 + dindex = dbindex[0]
  175 + }
  176 +
  177 + config := lxmysql.QueryCacheConfig{
  178 + SQL: fmt.Sprintf("select * from s_server_config where gameid='%s' limit 1", gameid),
  179 + DBIndex: dindex,
  180 + Exexpire: CONST_CACHETIME,
  181 + }
  182 +
  183 + var datas []struct {
  184 + Content string `json:"content"`
  185 + }
  186 +
  187 + err = lxmysql.QueryWithCache(config, &datas)
  188 + if err != nil {
  189 + lxalilog.Errors(err, lxconv.JsonEncode(config))
  190 + return
  191 + }
  192 +
  193 + if len(datas) < 1 {
  194 + err = errors.New("no rows")
  195 + lxalilog.Errors(err)
  196 + return
  197 + }
  198 +
  199 + if datas[0].Content == "" {
  200 + err = errors.New("content nil")
  201 + lxalilog.Errors(err)
  202 + }
  203 +
  204 + content = datas[0].Content
  205 +
  206 + _ = json.Unmarshal([]byte(content), &data)
  207 +
  208 + return
  209 +}
... ...
api-common/config/const.go 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +package config
  2 +
  3 +const (
  4 + CONST_CACHETIME = 600 //默认缓存时间
  5 + CONST_APIDBINDEX = "api"
  6 +)
... ...
controllers/base.go
1 1 package controllers
2 2  
3   -import "github.com/astaxie/beego"
  3 +import (
  4 + constd "apigame/service/constd"
  5 + "apigame/sign"
  6 + "github.com/astaxie/beego"
  7 +)
4 8  
5 9 type BaseController struct {
6 10 beego.Controller
7 11 }
8 12  
  13 +// RetData 返回封装
9 14 func (c *BaseController) RetData(resp map[string]interface{}) {
10 15 c.Data["json"] = resp
11 16 c.ServeJSON()
12 17 }
  18 +
  19 +// GetPostData 获取 PostData
  20 +func (c *BaseController) GetPostData(postData any) bool {
  21 +
  22 + // 接收参数,验证签名登录
  23 + code, err := sign.Check(c.Ctx.Input.RequestBody, &postData, true, true)
  24 + if err != nil {
  25 + resp := make(map[string]interface{})
  26 + resp = constd.CodeMsg(resp, code)
  27 + c.RetData(resp)
  28 + return false
  29 + }
  30 + return true
  31 +}
... ...
controllers/ht-draw.go
1 1 package controllers
2 2  
  3 +import "apigame/dto"
  4 +
3 5 // HtDrawController 绑定控制器
4 6 type HtDrawController struct {
5 7 BaseController
... ... @@ -7,7 +9,14 @@ type HtDrawController struct {
7 9  
8 10 func (c *HtDrawController) Draw() {
9 11  
10   - resp := make(map[string]interface{})
  12 + //接收参数,验证签名登录
  13 + var postData dto.ReqHtDraw
  14 +
  15 + if !c.GetPostData(&postData) {
  16 + return
  17 + }
  18 +
  19 + resp := make(map[string]any)
11 20  
12 21 var data = make(map[string]interface{})
13 22  
... ...
dto/base.go 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +package dto
  2 +
  3 +type BaseLoginInfo struct {
  4 + UID int64 `form:"uid" json:"uid"`
  5 + Token string `form:"token" json:"token"`
  6 +}
  7 +
  8 +type BaseSign struct {
  9 + Sign string `form:"sign" json:"sign"`
  10 + SignType string `form:"sign_type" json:"sign_type"`
  11 + TimeStamp string `form:"time_stamp" json:"time_stamp"`
  12 + Ver string `form:"ver" json:"ver"`
  13 + GameID string `form:"gameid" json:"gameid"`
  14 +}
... ...
dto/ht-draw.go 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +package dto
  2 +
  3 +// 海滩抽奖请求和返回文件
  4 +
  5 +// ReqHtDraw 抽奖
  6 +type ReqHtDraw struct {
  7 + BaseSign
  8 + BaseLoginInfo
  9 + ID string `form:"id" json:"id" valid:"Required"` // 卡包ID
  10 +}
... ...
go.mod
... ... @@ -2,23 +2,40 @@ module apigame
2 2  
3 3 go 1.20.0
4 4  
5   -require github.com/astaxie/beego v1.12.3
  5 +require (
  6 + gitee.com/lxgow/lxconv v0.0.0-20230406110318-b5c75fb5ba53
  7 + github.com/aliyun/aliyun-log-go-sdk v0.1.72
  8 + github.com/astaxie/beego v1.12.3
  9 + github.com/garyburd/redigo v1.6.4
  10 + github.com/go-sql-driver/mysql v1.5.0
  11 + github.com/lixu-any/go-tools v0.0.0-20221128094643-07d54c69e9bf
  12 +)
6 13  
7 14 require (
8 15 github.com/beorn7/perks v1.0.1 // indirect
  16 + github.com/cenkalti/backoff v2.2.1+incompatible // indirect
9 17 github.com/cespare/xxhash/v2 v2.1.1 // indirect
  18 + github.com/go-kit/kit v0.10.0 // indirect
  19 + github.com/go-logfmt/logfmt v0.5.0 // indirect
  20 + github.com/gogo/protobuf v1.3.2 // indirect
10 21 github.com/golang/protobuf v1.4.2 // indirect
11 22 github.com/hashicorp/golang-lru v0.5.4 // indirect
12 23 github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
  24 + github.com/pierrec/lz4 v2.6.0+incompatible // indirect
  25 + github.com/pkg/errors v0.9.1 // indirect
13 26 github.com/prometheus/client_golang v1.7.0 // indirect
14 27 github.com/prometheus/client_model v0.2.0 // indirect
15 28 github.com/prometheus/common v0.10.0 // indirect
16 29 github.com/prometheus/procfs v0.1.3 // indirect
17 30 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
18   - golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect
19   - golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect
20   - golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 // indirect
21   - golang.org/x/text v0.3.0 // indirect
22   - google.golang.org/protobuf v1.23.0 // indirect
  31 + go.uber.org/atomic v1.5.0 // indirect
  32 + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
  33 + golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect
  34 + golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
  35 + golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f // indirect
  36 + golang.org/x/text v0.3.3 // indirect
  37 + golang.org/x/tools v0.0.0-20210106214847-113979e3529a // indirect
  38 + google.golang.org/protobuf v1.25.0 // indirect
  39 + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
23 40 gopkg.in/yaml.v2 v2.2.8 // indirect
24 41 )
... ...
go.sum
  1 +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
  2 +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
  3 +gitee.com/lxgow/lxconv v0.0.0-20230406110318-b5c75fb5ba53 h1:J0GXb60iMZIDbAwpVypnnE+sUkOk5sILLYluhfsDwJw=
  4 +gitee.com/lxgow/lxconv v0.0.0-20230406110318-b5c75fb5ba53/go.mod h1:aqraTQ5xy8MGAwkOsUiBRefQBBPfq/fDP+Ad2Wym/eo=
  5 +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
1 6 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
2 7 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
  8 +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
  9 +github.com/Netflix/go-env v0.0.0-20220526054621-78278af1949d h1:wvStE9wLpws31NiWUx+38wny1msZ/tm+eL5xmm4Y7So=
  10 +github.com/Netflix/go-env v0.0.0-20220526054621-78278af1949d/go.mod h1:9XMFaCeRyW7fC9XJOWQ+NdAv8VLG7ys7l3x4ozEGLUQ=
  11 +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
  12 +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
  13 +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
  14 +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
3 15 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
4 16 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
5 17 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
6 18 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
  19 +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo=
  20 +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
  21 +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ=
  22 +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 h1:7Q2FEyqxeZeIkwYMwRC3uphxV4i7O2eV4ETe21d6lS4=
  23 +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ=
  24 +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50=
  25 +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY=
  26 +github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q=
  27 +github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE=
  28 +github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
  29 +github.com/alibabacloud-go/openapi-util v0.1.0 h1:0z75cIULkDrdEhkLWgi9tnLe+KhAFE/r5Pb3312/eAY=
  30 +github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
  31 +github.com/alibabacloud-go/sts-20150401/v2 v2.0.1 h1:CevZp0VdG7Q+1J3qwNj+JL7ztKxsL27+tknbdTK9Y6M=
  32 +github.com/alibabacloud-go/sts-20150401/v2 v2.0.1/go.mod h1:8wJW1xC4mVcdRXzOvWJYfCCxmvFzZ0VB9iilVjBeWBc=
  33 +github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg=
  34 +github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=
  35 +github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=
  36 +github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A=
  37 +github.com/alibabacloud-go/tea v1.1.19 h1:Xroq0M+pr0mC834Djj3Fl4ZA8+GGoA0i7aWse1vmgf4=
  38 +github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A=
  39 +github.com/alibabacloud-go/tea-utils v1.3.1 h1:iWQeRzRheqCMuiF3+XkfybB3kTgUXkXX+JMrqfLeB2I=
  40 +github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE=
  41 +github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
  42 +github.com/alibabacloud-go/tea-utils/v2 v2.0.1 h1:K6kwgo+UiYx+/kr6CO0PN5ACZDzE3nnn9d77215AkTs=
  43 +github.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
  44 +github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M=
  45 +github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
7 46 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
8 47 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
  48 +github.com/aliyun/aliyun-log-go-sdk v0.1.72 h1:8Gvg3ydMG4bbF7DkTb4m3odd5BRFXo0LmhNBv/xg7Mo=
  49 +github.com/aliyun/aliyun-log-go-sdk v0.1.72/go.mod h1:FSKcIjukUy+LeUKhRk13PCO+9gPMTfGsYhFBHQbDqmM=
  50 +github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY=
  51 +github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
  52 +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
  53 +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
  54 +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
  55 +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
  56 +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
  57 +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
9 58 github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
10 59 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
  60 +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
  61 +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
  62 +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
11 63 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
12 64 github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
13 65 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
14 66 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
15 67 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
16 68 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
  69 +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
17 70 github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
18 71 github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
  72 +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
  73 +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
  74 +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
  75 +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
19 76 github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
20 77 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
  78 +github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=
  79 +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
  80 +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
  81 +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
  82 +github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
21 83 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
  84 +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
  85 +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
  86 +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
  87 +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
  88 +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
22 89 github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
23 90 github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
24 91 github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
  92 +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
  93 +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
25 94 github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
26 95 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
27 96 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
28 97 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
  98 +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
  99 +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
  100 +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
  101 +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
  102 +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
29 103 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
  104 +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
30 105 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
31 106 github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
32 107 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
  108 +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
  109 +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
  110 +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
  111 +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
  112 +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
  113 +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
  114 +github.com/frankban/quicktest v1.10.2 h1:19ARM85nVi4xH7xPXuc5eM/udya5ieh7b/Sv+d844Tk=
  115 +github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
33 116 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
  117 +github.com/garyburd/redigo v1.6.4 h1:LFu2R3+ZOPgSMWMOL+saa/zXRjw0ID2G8FepO53BGlg=
  118 +github.com/garyburd/redigo v1.6.4/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw=
  119 +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
34 120 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
35 121 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
36 122 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
  123 +github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo=
  124 +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
37 125 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
38 126 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
  127 +github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4=
  128 +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
39 129 github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
  130 +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
  131 +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
40 132 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
  133 +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
41 134 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
  135 +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
42 136 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
  137 +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
  138 +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
  139 +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
  140 +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
  141 +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
  142 +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
  143 +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
  144 +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
43 145 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
44 146 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
45 147 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
... ... @@ -48,131 +150,400 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
48 150 github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
49 151 github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
50 152 github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
  153 +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
51 154 github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
52 155 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
53 156 github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
54 157 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
55 158 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
  159 +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
  160 +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
  161 +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
56 162 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
57 163 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
58   -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
59 164 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
  165 +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
  166 +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
  167 +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
60 168 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
  169 +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
  170 +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
  171 +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
  172 +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
  173 +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
  174 +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
  175 +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
  176 +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
  177 +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
  178 +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
  179 +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
  180 +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
  181 +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
  182 +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
  183 +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
  184 +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
  185 +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
  186 +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
  187 +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
  188 +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
  189 +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
  190 +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
  191 +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
  192 +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
  193 +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
  194 +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
  195 +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
61 196 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
62 197 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
  198 +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
  199 +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
  200 +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
  201 +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
63 202 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
  203 +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
  204 +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
  205 +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
  206 +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
  207 +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
64 208 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
  209 +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
  210 +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
  211 +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
65 212 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
  213 +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
66 214 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
  215 +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
  216 +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
  217 +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
67 218 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
68 219 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
69 220 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
  221 +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
  222 +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
70 223 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
71 224 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
72 225 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
73 226 github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
  227 +github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
74 228 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
  229 +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
  230 +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
  231 +github.com/lixu-any/go-tools v0.0.0-20221128094643-07d54c69e9bf h1:lUFEGum8Rbo5xhp7JkfUxA0T8QiqW9WfCiLvs+2qTVg=
  232 +github.com/lixu-any/go-tools v0.0.0-20221128094643-07d54c69e9bf/go.mod h1:lQaDDJdTdIDHIcj3NM0PaV5pfHuNw+2GHwov3jgIEDs=
  233 +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
  234 +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
  235 +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
  236 +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
  237 +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
  238 +github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
75 239 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
76 240 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
77 241 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
  242 +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
  243 +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
  244 +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
  245 +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
  246 +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
  247 +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
  248 +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
  249 +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
78 250 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
  251 +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
79 252 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
80 253 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
  254 +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
81 255 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
82 256 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
  257 +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
  258 +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
  259 +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
  260 +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
  261 +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
  262 +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
  263 +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
83 264 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
84 265 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
  266 +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
  267 +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
  268 +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
85 269 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
  270 +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
86 271 github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
  272 +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
87 273 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
  274 +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
  275 +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
  276 +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
  277 +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
  278 +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
  279 +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
  280 +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
  281 +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
  282 +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
  283 +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
  284 +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
  285 +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
88 286 github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
89 287 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
  288 +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
90 289 github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
  290 +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
  291 +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
  292 +github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A=
  293 +github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
91 294 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
92 295 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
  296 +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
93 297 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
  298 +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
94 299 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
95 300 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
  301 +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
96 302 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
  303 +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
97 304 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
  305 +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
98 306 github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U=
99 307 github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
100 308 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
  309 +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
101 310 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
  311 +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
  312 +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
102 313 github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
103 314 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
  315 +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
104 316 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
  317 +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
105 318 github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
106 319 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
107 320 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
  321 +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
108 322 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
  323 +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
109 324 github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
110 325 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
  326 +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
  327 +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
  328 +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
  329 +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
  330 +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
  331 +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
  332 +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
111 333 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
112 334 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
  335 +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
113 336 github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
114 337 github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
115 338 github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
116 339 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
117 340 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
  341 +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
  342 +github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
  343 +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
  344 +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
  345 +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
  346 +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
  347 +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
118 348 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
  349 +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
  350 +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
  351 +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
119 352 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
120 353 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
  354 +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
121 355 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
122 356 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
123   -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
124 357 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
  358 +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
  359 +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
125 360 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
126 361 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
  362 +github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
  363 +github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
  364 +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
127 365 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
  366 +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
  367 +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
128 368 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
  369 +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
  370 +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
  371 +github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
  372 +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
129 373 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
  374 +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
  375 +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
  376 +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
  377 +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
  378 +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
  379 +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
  380 +go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY=
  381 +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
  382 +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
  383 +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
  384 +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
  385 +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
  386 +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
130 387 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
  388 +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
131 389 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
132   -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
  390 +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
  391 +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
133 392 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
  393 +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
  394 +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
  395 +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
  396 +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
  397 +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
  398 +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
  399 +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
  400 +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
  401 +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
  402 +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
  403 +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
  404 +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
  405 +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
  406 +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
  407 +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
  408 +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  409 +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
134 410 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  411 +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
135 412 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  413 +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  414 +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  415 +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  416 +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  417 +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  418 +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
136 419 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
  420 +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
137 421 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
138   -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
139 422 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
  423 +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
  424 +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
  425 +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
  426 +golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
  427 +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
  428 +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
  429 +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
140 430 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
141 431 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
142 432 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
  433 +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
  434 +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
143 435 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
  436 +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
  437 +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
  438 +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
  439 +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
144 440 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
145 441 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
  442 +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
  443 +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
146 444 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
  445 +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
147 446 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
148 447 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
149 448 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
  449 +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
  450 +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
  451 +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
150 452 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
  453 +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
151 454 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
152   -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80=
  455 +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
  456 +golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
153 457 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
154   -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
  458 +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
  459 +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
155 460 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
156   -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
  461 +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
  462 +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
  463 +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
  464 +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
  465 +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
  466 +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
  467 +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
  468 +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
  469 +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
  470 +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
  471 +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
  472 +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
  473 +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
  474 +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
  475 +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
  476 +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
  477 +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
  478 +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
  479 +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
  480 +golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
  481 +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
  482 +golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ=
  483 +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
  484 +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
  485 +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
157 486 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
  487 +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
  488 +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
  489 +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
  490 +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
  491 +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
  492 +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
  493 +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
  494 +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
  495 +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
  496 +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
  497 +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
  498 +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
  499 +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
  500 +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
  501 +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
  502 +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
  503 +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
  504 +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
  505 +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
  506 +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
  507 +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
  508 +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
158 509 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
159 510 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
160 511 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
161 512 google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
162 513 google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
163   -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
  514 +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
164 515 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
  516 +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
  517 +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
  518 +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
165 519 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
166 520 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
  521 +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
167 522 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
168 523 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
169 524 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
  525 +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
  526 +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
170 527 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
  528 +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
  529 +gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y=
  530 +gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
171 531 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
  532 +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
  533 +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
  534 +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
172 535 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
  536 +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
  537 +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
173 538 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
174 539 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
175 540 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
176 541 gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
177 542 gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
178 543 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
  544 +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
  545 +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
  546 +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
  547 +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
  548 +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
  549 +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
... ...
lx-util/lxbeego/log.go 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +package lxbeego
  2 +
  3 +import (
  4 + "encoding/json"
  5 + "gitee.com/lxgow/lxconv"
  6 + "github.com/astaxie/beego"
  7 + "github.com/astaxie/beego/logs"
  8 + "strings"
  9 +)
  10 +
  11 +// beego logs 封装
  12 +
  13 +// Inits 初始化设置
  14 +func Inits(config map[string]string) (err error) {
  15 +
  16 + var newConfig = make(map[string]interface{})
  17 +
  18 + for k, v := range config {
  19 + newConfig[k] = v
  20 + }
  21 +
  22 + if config["level"] != "" {
  23 + newConfig["level"] = lxconv.ToInt64(config["level"])
  24 + }
  25 +
  26 + if config["maxdays"] != "" {
  27 + newConfig["maxdays"] = lxconv.ToInt64(config["maxdays"])
  28 + }
  29 +
  30 + if config["maxlines"] != "" {
  31 + newConfig["maxlines"] = lxconv.ToInt64(config["maxlines"])
  32 + }
  33 +
  34 + if config["rotate"] != "" {
  35 + newConfig["rotate"] = lxconv.ToBool(config["rotate"])
  36 + }
  37 +
  38 + bdata, _ := json.Marshal(newConfig)
  39 +
  40 + err = logs.SetLogger(logs.AdapterFile, string(bdata))
  41 +
  42 + if err != nil {
  43 + return err
  44 + }
  45 +
  46 + if strings.ToLower(config["dellogger"]) == "true" {
  47 + _ = beego.BeeLogger.DelLogger("console")
  48 + }
  49 +
  50 + return
  51 +}
... ...
lx-util/lxbeego/request.go 0 → 100644
... ... @@ -0,0 +1,83 @@
  1 +package lxbeego
  2 +
  3 +import (
  4 + "crypto/tls"
  5 + "github.com/astaxie/beego/httplib"
  6 + "io/ioutil"
  7 + "strings"
  8 +)
  9 +
  10 +func PostBody(apiurl string, data map[string]interface{}) (content []byte, httpcode int, err error) {
  11 +
  12 + req := httplib.Post(apiurl)
  13 +
  14 + if strings.Contains(apiurl, "https://") {
  15 + req.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
  16 + }
  17 +
  18 + req.JSONBody(data)
  19 +
  20 + resp, err := req.Response()
  21 +
  22 + if err != nil {
  23 + return
  24 + }
  25 +
  26 + httpcode = resp.StatusCode
  27 +
  28 + content, err = ioutil.ReadAll(resp.Body)
  29 +
  30 + resp.Body.Close()
  31 +
  32 + return
  33 +}
  34 +
  35 +func PostParam(apiurl string, data map[string]string) (content []byte, httpcode int, err error) {
  36 +
  37 + req := httplib.Post(apiurl)
  38 +
  39 + if strings.Contains(apiurl, "https://") {
  40 + req.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
  41 + }
  42 +
  43 + for k, v := range data {
  44 + req.Param(k, v)
  45 + }
  46 +
  47 + resp, err := req.Response()
  48 +
  49 + if err != nil {
  50 + return
  51 + }
  52 +
  53 + httpcode = resp.StatusCode
  54 +
  55 + content, err = ioutil.ReadAll(resp.Body)
  56 +
  57 + resp.Body.Close()
  58 +
  59 + return
  60 +}
  61 +
  62 +func Get(apiurl string) (content []byte, httpcode int, err error) {
  63 +
  64 + req := httplib.Get(apiurl)
  65 +
  66 + if strings.Contains(apiurl, "https://") {
  67 + req.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
  68 + }
  69 +
  70 + resp, err := req.Response()
  71 +
  72 + if err != nil {
  73 + return
  74 + }
  75 +
  76 + httpcode = resp.StatusCode
  77 +
  78 + content, err = ioutil.ReadAll(resp.Body)
  79 +
  80 + resp.Body.Close()
  81 +
  82 + return
  83 +}
... ...
lx-util/lxredis/hash.go 0 → 100644
... ... @@ -0,0 +1,182 @@
  1 +package lxredis
  2 +
  3 +import redigo "github.com/garyburd/redigo/redis"
  4 +
  5 +// hash
  6 +// 创建时间:2023/12/14 14:21
  7 +// 创建人:lixu
  8 +
  9 +// HashExists 存在的否
  10 +func (con *LXredis) HashExists(minikey string) (isxists bool, err error) {
  11 +
  12 + var (
  13 + nname string
  14 + nums int64
  15 + )
  16 +
  17 + if con.Prefix != "" {
  18 + nname = con.Prefix + con.Name
  19 + } else {
  20 + nname = LXREDISCONFIG.Prefix + con.Name
  21 + }
  22 +
  23 + redis := GetLxRedis()
  24 +
  25 + defer redis.Close()
  26 +
  27 + if con.Db != "" {
  28 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  29 + return
  30 + }
  31 + }
  32 +
  33 + nums, err = redigo.Int64(redis.Do("HEXISTS", nname, minikey))
  34 + if err != nil {
  35 + return
  36 + }
  37 +
  38 + if nums < 1 {
  39 + return
  40 + }
  41 + isxists = true
  42 +
  43 + return
  44 +}
  45 +
  46 +// HashSet 设置
  47 +func (con *LXredis) HashSet(minikey string) (err error) {
  48 +
  49 + var (
  50 + nname string
  51 + )
  52 +
  53 + if con.Prefix != "" {
  54 + nname = con.Prefix + con.Name
  55 + } else {
  56 + nname = LXREDISCONFIG.Prefix + con.Name
  57 + }
  58 +
  59 + redis := GetLxRedis()
  60 +
  61 + defer redis.Close()
  62 +
  63 + if con.Db != "" {
  64 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  65 + return
  66 + }
  67 + }
  68 +
  69 + _, err = redis.Do("HMSET", nname, minikey, con.Val)
  70 +
  71 + return
  72 +}
  73 +
  74 +// HashGet 获取
  75 +func (con *LXredis) HashGet(minikey string) (content string, err error) {
  76 +
  77 + var (
  78 + nname string
  79 + )
  80 +
  81 + if con.Prefix != "" {
  82 + nname = con.Prefix + con.Name
  83 + } else {
  84 + nname = LXREDISCONFIG.Prefix + con.Name
  85 + }
  86 +
  87 + redis := GetLxRedis()
  88 +
  89 + defer redis.Close()
  90 +
  91 + if con.Db != "" {
  92 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  93 + return
  94 + }
  95 + }
  96 +
  97 + content, err = redigo.String(redis.Do("HGET", nname, minikey))
  98 +
  99 + return
  100 +}
  101 +
  102 +// HashGetAll 获取
  103 +func (con *LXredis) HashGetAll() (content []string, err error) {
  104 +
  105 + var (
  106 + nname string
  107 + )
  108 +
  109 + if con.Prefix != "" {
  110 + nname = con.Prefix + con.Name
  111 + } else {
  112 + nname = LXREDISCONFIG.Prefix + con.Name
  113 + }
  114 +
  115 + redis := GetLxRedis()
  116 +
  117 + defer redis.Close()
  118 +
  119 + if con.Db != "" {
  120 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  121 + return
  122 + }
  123 + }
  124 +
  125 + content, err = redigo.Strings(redis.Do("HGETALL", nname))
  126 +
  127 + return
  128 +}
  129 +
  130 +// HashKeys 获取
  131 +func (con *LXredis) HashKeys() (ks []string, err error) {
  132 +
  133 + var (
  134 + nname string
  135 + )
  136 +
  137 + if con.Prefix != "" {
  138 + nname = con.Prefix + con.Name
  139 + } else {
  140 + nname = LXREDISCONFIG.Prefix + con.Name
  141 + }
  142 +
  143 + redis := GetLxRedis()
  144 +
  145 + defer redis.Close()
  146 +
  147 + if con.Db != "" {
  148 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  149 + return
  150 + }
  151 + }
  152 +
  153 + ks, err = redigo.Strings(redis.Do("HKEYS", nname))
  154 +
  155 + return
  156 +}
  157 +
  158 +// HashDelete 删除
  159 +func (con *LXredis) HashDelete(minikey string) (islock bool, err error) {
  160 +
  161 + var nname string
  162 +
  163 + if con.Prefix != "" {
  164 + nname = con.Prefix + con.Name
  165 + } else {
  166 + nname = LXREDISCONFIG.Prefix + con.Name
  167 + }
  168 +
  169 + redis := GetLxRedis()
  170 +
  171 + defer redis.Close()
  172 +
  173 + if con.Db != "" {
  174 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  175 + return
  176 + }
  177 + }
  178 +
  179 + _, err = redis.Do("HDEL", nname, minikey)
  180 +
  181 + return
  182 +}
... ...
lx-util/lxredis/index.go 0 → 100644
... ... @@ -0,0 +1,304 @@
  1 +package lxredis
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + redigo "github.com/garyburd/redigo/redis"
  7 +)
  8 +
  9 +var LXREDISPOOL *redigo.Pool
  10 +var LXREDISCONFIG MapRedisConfig //默认配置
  11 +
  12 +type MapRedisConfig struct {
  13 + Host string `json:"host"`
  14 + Port string `json:"port"`
  15 + Pwd string `json:"pwd"`
  16 + Db string `json:"Db"`
  17 + Prefix string `json:"prefix"`
  18 +}
  19 +
  20 +type LXredis struct {
  21 + Name string `json:"name"`
  22 + Val string `json:"val"`
  23 + Db string `json:"db"`
  24 + Prefix string `json:"prefix"`
  25 +}
  26 +
  27 +func GetLxRedis() redigo.Conn {
  28 + return LXREDISPOOL.Get()
  29 +}
  30 +
  31 +// InitRedis 初始化Redis
  32 +func InitRedis(config MapRedisConfig) (err error) {
  33 +
  34 + LXREDISCONFIG = config
  35 +
  36 + pool_size := 20
  37 +
  38 + LXREDISPOOL = redigo.NewPool(func() (redigo.Conn, error) {
  39 + c, err := redigo.Dial("tcp", fmt.Sprintf("%s:%s", LXREDISCONFIG.Host, LXREDISCONFIG.Port))
  40 + if err != nil {
  41 + return nil, err
  42 + }
  43 + if _, err := c.Do("AUTH", LXREDISCONFIG.Pwd); err != nil {
  44 + c.Close()
  45 + return nil, err
  46 + }
  47 + if _, err := c.Do("SELECT", LXREDISCONFIG.Db); err != nil {
  48 + c.Close()
  49 + return nil, err
  50 + }
  51 +
  52 + return c, nil
  53 + }, pool_size)
  54 +
  55 + return
  56 +}
  57 +
  58 +// IsExist 判断key是否存在
  59 +func (con *LXredis) IsExist() (isexit bool, err error) {
  60 +
  61 + var nname string
  62 +
  63 + if con.Prefix != "" {
  64 + nname = con.Prefix + con.Name
  65 + } else {
  66 + nname = LXREDISCONFIG.Prefix + con.Name
  67 + }
  68 +
  69 + redis := GetLxRedis()
  70 +
  71 + defer redis.Close()
  72 +
  73 + if con.Db != "" {
  74 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  75 + return
  76 + }
  77 + }
  78 +
  79 + isexit, err = redigo.Bool(redis.Do("EXISTS", nname))
  80 + return
  81 +}
  82 +
  83 +// Set 设置redis字符串
  84 +func (con *LXredis) Set() (err error) {
  85 +
  86 + var nname string
  87 +
  88 + if con.Prefix != "" {
  89 + nname = con.Prefix + con.Name
  90 + } else {
  91 + nname = LXREDISCONFIG.Prefix + con.Name
  92 + }
  93 +
  94 + redis := GetLxRedis()
  95 +
  96 + defer redis.Close()
  97 +
  98 + if con.Db != "" {
  99 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  100 + return
  101 + }
  102 + }
  103 +
  104 + _, err = redis.Do("set", nname, con.Val)
  105 +
  106 + return
  107 +}
  108 +
  109 +// SetTime 设置redis字符串 加过期时间
  110 +func (con *LXredis) SetTime(times int) (err error) {
  111 +
  112 + var nname string
  113 +
  114 + if con.Prefix != "" {
  115 + nname = con.Prefix + con.Name
  116 + } else {
  117 + nname = LXREDISCONFIG.Prefix + con.Name
  118 + }
  119 +
  120 + redis := GetLxRedis()
  121 +
  122 + defer redis.Close()
  123 +
  124 + if con.Db != "" {
  125 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  126 + return
  127 + }
  128 + }
  129 +
  130 + _, err = redis.Do("set", nname, con.Val, "EX", times)
  131 +
  132 + return
  133 +}
  134 +
  135 +// GET 获取redis
  136 +func (con *LXredis) GET() (gstr string, err error) {
  137 +
  138 + var nname string
  139 +
  140 + if con.Prefix != "" {
  141 + nname = con.Prefix + con.Name
  142 + } else {
  143 + nname = LXREDISCONFIG.Prefix + con.Name
  144 + }
  145 +
  146 + redis := GetLxRedis()
  147 +
  148 + defer redis.Close()
  149 +
  150 + if con.Db != "" {
  151 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  152 + return
  153 + }
  154 +
  155 + }
  156 +
  157 + gstr, err = redigo.String(redis.Do("GET", nname))
  158 +
  159 + return
  160 +}
  161 +
  162 +// INCR 自增
  163 +func (con *LXredis) INCR() (nums int64, err error) {
  164 +
  165 + var nname string
  166 +
  167 + if con.Prefix != "" {
  168 + nname = con.Prefix + con.Name
  169 + } else {
  170 + nname = LXREDISCONFIG.Prefix + con.Name
  171 + }
  172 +
  173 + redis := GetLxRedis()
  174 +
  175 + defer redis.Close()
  176 +
  177 + if con.Db != "" {
  178 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  179 + return
  180 + }
  181 + }
  182 +
  183 + nums, err = redigo.Int64(redis.Do("INCR", nname))
  184 +
  185 + return
  186 +}
  187 +
  188 +// DELETE 删除
  189 +func (con *LXredis) DELETE() (err error) {
  190 +
  191 + var nname string
  192 +
  193 + if con.Prefix != "" {
  194 + nname = con.Prefix + con.Name
  195 + } else {
  196 + nname = LXREDISCONFIG.Prefix + con.Name
  197 + }
  198 +
  199 + redis := GetLxRedis()
  200 +
  201 + defer redis.Close()
  202 +
  203 + if con.Db != "" {
  204 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  205 + return
  206 + }
  207 + }
  208 +
  209 + is_key_exit, _ := redigo.Bool(redis.Do("EXISTS", nname))
  210 + if is_key_exit {
  211 + _, err = redis.Do("DEL", nname)
  212 + if err != nil {
  213 + return
  214 + }
  215 + }
  216 +
  217 + return
  218 +}
  219 +
  220 +// EXPIRE 设置过期时间
  221 +func (con *LXredis) EXPIRE(times int) (err error) {
  222 +
  223 + var nname string
  224 +
  225 + if con.Prefix != "" {
  226 + nname = con.Prefix + con.Name
  227 + } else {
  228 + nname = LXREDISCONFIG.Prefix + con.Name
  229 + }
  230 +
  231 + redis := GetLxRedis()
  232 +
  233 + defer redis.Close()
  234 +
  235 + if con.Db != "" {
  236 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  237 + return
  238 + }
  239 + }
  240 +
  241 + _, err = redigo.Int(redis.Do("EXPIRE", nname, times))
  242 +
  243 + return
  244 +}
  245 +
  246 +// TTL 查看过期时间
  247 +func (con *LXredis) TTL() (ttl int, err error) {
  248 +
  249 + var nname string
  250 +
  251 + if con.Prefix != "" {
  252 + nname = con.Prefix + con.Name
  253 + } else {
  254 + nname = LXREDISCONFIG.Prefix + con.Name
  255 + }
  256 +
  257 + redis := GetLxRedis()
  258 +
  259 + defer redis.Close()
  260 +
  261 + if con.Db != "" {
  262 + if _, err = redis.Do("SELECT", con.Db); err != nil {
  263 + return
  264 + }
  265 + }
  266 +
  267 + ttl, err = redigo.Int(redis.Do("ttl", nname))
  268 +
  269 + return
  270 +}
  271 +
  272 +// LOCK 排他锁
  273 +func (con *LXredis) LOCK(ex int) (islock bool, err error) {
  274 +
  275 + var (
  276 + nname string
  277 + ix = "lock::"
  278 + binf int
  279 + )
  280 +
  281 + if ex < 1 {
  282 + ex = 1
  283 + }
  284 +
  285 + if con.Prefix != "" {
  286 + nname = con.Prefix + ix + con.Name
  287 + } else {
  288 + nname = LXREDISCONFIG.Prefix + ix + con.Name
  289 + }
  290 +
  291 + redis := GetLxRedis()
  292 +
  293 + defer redis.Close()
  294 +
  295 + binf, err = redigo.Int(redis.Do("setnx", nname, ""))
  296 +
  297 + redis.Do("EXPIRE", nname, ex)
  298 +
  299 + if err == nil && binf == 0 {
  300 + islock = true
  301 + }
  302 +
  303 + return
  304 +}
... ...
sdk/sdk.go 0 → 100644
... ... @@ -0,0 +1,155 @@
  1 +package sdk
  2 +
  3 +import (
  4 + "apigame/lx-util/lxalilog"
  5 + "apigame/lx-util/lxbeego"
  6 + "apigame/lx-util/lxredis"
  7 + "encoding/json"
  8 + "errors"
  9 + "fmt"
  10 + "strings"
  11 +
  12 + "github.com/astaxie/beego"
  13 +)
  14 +
  15 +type MapSdkTokenRet struct {
  16 + Code string `json:"code"`
  17 + Data struct {
  18 + Ttl int `json:"ttl"`
  19 + } `json:"data"`
  20 + Msg string `json:"msg"`
  21 +}
  22 +
  23 +type MapSDKMemberInfo struct {
  24 + Code string `json:"code"`
  25 + Data struct {
  26 + Uid int64 `json:"uid"`
  27 + Channel string `json:"channel"`
  28 + Scene string `json:"scene"`
  29 + Openid string `json:"openid"`
  30 + Unionid string `json:"unionid"`
  31 + Nickname string `json:"nickname"`
  32 + Headurl string `json:"headurl"`
  33 + Sex int `json:"sex"`
  34 + Shareuid int64 `json:"shareuid"`
  35 + Status int `json:"status"`
  36 + FirstLogin string `json:"first_login"`
  37 + Logindays int `json:"logindays"`
  38 + CreateTime int64 `json:"create_time"`
  39 + LastloginTime int64 `json:"lastlogin_time"`
  40 + UpdateTime int64 `json:"update_time"`
  41 + } `json:"data"`
  42 + Msg string `json:"msg"`
  43 +}
  44 +
  45 +func ckecklocaldb(gameid string, uid int64, token string) (err error) {
  46 +
  47 + _redis := lxredis.LXredis{
  48 + Name: fmt.Sprintf("token::%s::%d", gameid, uid),
  49 + Db: beego.AppConfig.String("redis::sdkdb"),
  50 + Prefix: beego.AppConfig.String("redis::sdkprefix"),
  51 + }
  52 +
  53 + tstr, err := _redis.GET()
  54 + if err != nil {
  55 + lxalilog.Errors(err, "_redis GET:")
  56 + return
  57 + }
  58 +
  59 + if tstr == "" {
  60 + err = errors.New("tsrt")
  61 + lxalilog.Errors(err, "tstr empty:")
  62 + return
  63 + }
  64 +
  65 + redistoken := strings.Split(tstr, "|")[0]
  66 + if redistoken != token {
  67 + err = errors.New("token error")
  68 + lxalilog.Errors(err, "redistoken:", redistoken, ",token:", token)
  69 + return
  70 + }
  71 +
  72 + return
  73 +}
  74 +
  75 +// 验证SDKtoken
  76 +func CheckSdkToken(gameid string, uid int64, token string) (err error) {
  77 +
  78 + if uid == 99 || token == "fb0ba80fad895664c7aea7c8ce462505" {
  79 + return
  80 + }
  81 +
  82 + return ckecklocaldb(gameid, uid, token)
  83 +
  84 + // var (
  85 + // gconfig = service_config.GetGameConfigByGameID(gameid)
  86 + // apiurl = beego.AppConfig.String("sdk::checktoken") + gconfig.Appkey
  87 + // )
  88 +
  89 + // content, httpcode, err := lurl.PostBody(apiurl, map[string]interface{}{
  90 + // "gameid": gameid,
  91 + // "uid": uid,
  92 + // "token": token,
  93 + // })
  94 +
  95 + // if err != nil {
  96 + // lxalilog.Errors("lurl.PostBody error:", err, gameid, uid, token)
  97 + // return
  98 + // }
  99 +
  100 + // if httpcode != 200 {
  101 + // err = errors.New("httpcode!= 200")
  102 + // lxalilog.Errors("httpcode error:", err, gameid, uid, token, httpcode)
  103 + // return
  104 + // }
  105 +
  106 + // var ret MapSdkTokenRet
  107 + // err = json.Unmarshal(content, &ret)
  108 + // if err != nil {
  109 + // lxalilog.Errors("json.Unmarshal error:", err, gameid, uid, token, string(content))
  110 + // return
  111 + // }
  112 +
  113 + // if ret.Code != "0" {
  114 + // err = errors.New("ret.Code != 0")
  115 + // lxalilog.Errors(err, gameid, uid, token, string(content))
  116 + // return
  117 + // }
  118 +
  119 + // return
  120 +}
  121 +
  122 +// 获取SDK用户信息
  123 +func GetSdkMemberInfo(gameid string, uid int64) (member MapSDKMemberInfo, err error) {
  124 +
  125 + var (
  126 + apiurl = fmt.Sprintf("%s?gameid=%s&uid=%d", beego.AppConfig.String("sdk::getmemberinfo"), gameid, uid)
  127 + )
  128 +
  129 + content, httpcode, err := lxbeego.Get(apiurl)
  130 +
  131 + if err != nil {
  132 + lxalilog.Errors("lxbeego.lxbeego error:", err, apiurl)
  133 + return
  134 + }
  135 +
  136 + if httpcode != 200 {
  137 + err = errors.New("httpcode!= 200")
  138 + lxalilog.Errors("httpcode error:", err, apiurl)
  139 + return
  140 + }
  141 +
  142 + err = json.Unmarshal(content, &member)
  143 + if err != nil {
  144 + lxalilog.Errors("json.Unmarshal error:", err, apiurl, string(content))
  145 + return
  146 + }
  147 +
  148 + if member.Code != "0" {
  149 + err = errors.New("ret.Code != 0")
  150 + lxalilog.Errors(err, apiurl, string(content))
  151 + return
  152 + }
  153 +
  154 + return
  155 +}
... ...
service/constd/index.go 0 → 100644
... ... @@ -0,0 +1,103 @@
  1 +package constd
  2 +
  3 +import (
  4 + "apigame/lx-util/lxalilog"
  5 + "apigame/lx-util/lxtime"
  6 +)
  7 +
  8 +const (
  9 + RECODE_OK = "0"
  10 + RECODE_FALIED = "1000"
  11 + RECODE_UNKNOWERR = "1001"
  12 + RECODE_PARAMERROR = "1002"
  13 + RECODE_SIGNERROR = "1003"
  14 + RECODE_DATA_BUCUNZIA_ERROR = "1004"
  15 + RECODE_PARAMDECODE_ERROR = "1005"
  16 + RECODE_DATANOEXIST_ERROR = "1006"
  17 + RECODE_CREATEUID_ERROR = "1007"
  18 + RECODE_LOGINCHECK_ERROR = "1008"
  19 + RECODE_WEIXINAZIFU_ERROR = "1009"
  20 + RECODE_SDKMEMBER_ERROR = "1010"
  21 + RECODE_CAOZUOPINFAN_ERROR = "1011"
  22 + RECODE_REQUESTXIANLIU_ERROR = "1110"
  23 + RECODE_REQUESTTIME_ERROR = "1111"
  24 +
  25 + RECODE_MERGE_CONFIG_ERROR = "2000"
  26 + RECODE_MERGE_CFLQ_ERROR = "2001"
  27 + RECODE_MERGE_AZSXLQ_ERROR = "2002"
  28 + RECODE_MERGE_QXGMSP_ERROR = "2003"
  29 + RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR = "2010"
  30 + RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR = "2011"
  31 + RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR = "2012"
  32 + RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR = "2013"
  33 +
  34 + RECODE_MERGE_NOVICE_QXCZ_ERROR = "2021"
  35 + RECODE_MERGE_NOVICE_BNCFLQ_ERROR = "2032"
  36 + RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR = "2033"
  37 + RECODE_MERGE_HUODONGWEIKAISHI_ERROR = "2040"
  38 + RECODE_MERGE_HUODONGYIJIESHU_ERROR = "2041"
  39 + RECODE_MERGE_CCZDXX_ERROR = "2042"
  40 + RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051"
  41 + RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052"
  42 +)
  43 +
  44 +var recodeText = map[string]string{
  45 + RECODE_OK: "成功",
  46 + RECODE_FALIED: "操作失败",
  47 + RECODE_UNKNOWERR: "未知错误",
  48 + RECODE_PARAMERROR: "参数错误",
  49 + RECODE_SIGNERROR: "签名错误",
  50 + RECODE_DATA_BUCUNZIA_ERROR: "数据不存在",
  51 + RECODE_PARAMDECODE_ERROR: "解析参数失败,请检查参数合法性",
  52 + RECODE_DATANOEXIST_ERROR: "数据不存在",
  53 + RECODE_CREATEUID_ERROR: "创建用户UID失败",
  54 + RECODE_LOGINCHECK_ERROR: "登录验证失败,请重新登录",
  55 + RECODE_WEIXINAZIFU_ERROR: "参数存在危险字符",
  56 + RECODE_SDKMEMBER_ERROR: "获取SDK用户信息失败",
  57 + RECODE_CAOZUOPINFAN_ERROR: "操作频繁",
  58 + RECODE_REQUESTXIANLIU_ERROR: "操作被限流",
  59 + RECODE_REQUESTTIME_ERROR: "time errors",
  60 +
  61 + RECODE_MERGE_CONFIG_ERROR: "获取配置文件错误",
  62 + RECODE_MERGE_CFLQ_ERROR: "不能重复领取",
  63 + RECODE_MERGE_AZSXLQ_ERROR: "请按照顺序领取",
  64 + RECODE_MERGE_QXGMSP_ERROR: "请先购买对应商品",
  65 +
  66 + RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR: "请先购买周卡",
  67 + RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR: "请先购买月卡",
  68 + RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR: "请先购买对应商品",
  69 + RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR: "不能重复领取",
  70 +
  71 + RECODE_MERGE_NOVICE_QXCZ_ERROR: "请先购买对应商品",
  72 + RECODE_MERGE_NOVICE_BNCFLQ_ERROR: "不能重复领取",
  73 + RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR: "没有达到领取条件",
  74 +
  75 + RECODE_MERGE_HUODONGWEIKAISHI_ERROR: "活动未开始",
  76 + RECODE_MERGE_HUODONGYIJIESHU_ERROR: "活动已结束",
  77 + RECODE_MERGE_CCZDXX_ERROR: "超出最大限制",
  78 +
  79 + RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在",
  80 + RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证",
  81 +}
  82 +
  83 +func RecodeText(code string) string {
  84 + str, ok := recodeText[code]
  85 + if ok {
  86 + return str
  87 + }
  88 + return RecodeText(RECODE_UNKNOWERR)
  89 +}
  90 +
  91 +func CodeMsg(data map[string]interface{}, code interface{}) map[string]interface{} {
  92 + data["code"] = code
  93 + data["msg"] = RecodeText(code.(string))
  94 + lxtime.NowUninx()
  95 + data["servertime"] = lxtime.NowUninx()
  96 + return data
  97 +}
  98 +
  99 +func CodeMsgLog(data map[string]interface{}, code interface{}, log ...interface{}) map[string]interface{} {
  100 + // 写入日志
  101 + lxalilog.ErrorCode(code, log)
  102 + return CodeMsg(data, code)
  103 +}
... ...
sign/index.go 0 → 100644
... ... @@ -0,0 +1,309 @@
  1 +package sign
  2 +
  3 +import (
  4 + "apigame/api-common/config"
  5 + "apigame/lx-util/lxalilog"
  6 + "apigame/lx-util/lxarray"
  7 + "apigame/lx-util/lxconv"
  8 + "apigame/lx-util/lxlimit"
  9 + "apigame/lx-util/lxtime"
  10 + "apigame/sdk"
  11 + "apigame/service/constd"
  12 + "encoding/json"
  13 + "errors"
  14 + "fmt"
  15 +
  16 + "sort"
  17 + "strings"
  18 + "unicode/utf8"
  19 +
  20 + "github.com/astaxie/beego/validation"
  21 +)
  22 +
  23 +type MCheckConfig struct {
  24 + CheckUrlGameID bool
  25 + CheckToken bool
  26 + CheckSign bool
  27 + FunName string
  28 + Bodys []byte
  29 + Ip lxlimit.MFuncItem `json:"ip"`
  30 + Kernel lxlimit.MFuncItem `json:"kernel"`
  31 + Member lxlimit.MFuncItem `json:"member"`
  32 + Url string `json:"url"`
  33 + Params map[string]string `json:"params"`
  34 +}
  35 +
  36 +func getTimeStamp(time_stamp interface{}) (timestamp int64) {
  37 + if time_stamp == nil {
  38 + return
  39 + }
  40 +
  41 + tsp := ""
  42 +
  43 + switch tp := time_stamp.(type) {
  44 + case string:
  45 + tsp = fmt.Sprintf("%s", tp)
  46 + }
  47 +
  48 + if tsp == "" {
  49 + return
  50 + }
  51 +
  52 + timestamp = lxconv.ParseInt64(tsp)
  53 + lth := utf8.RuneCountInString(tsp)
  54 + if lth > 10 {
  55 + timestamp = timestamp / 1000
  56 + }
  57 +
  58 + return
  59 +
  60 +}
  61 +
  62 +func InitCheck(postdata interface{}, cgg MCheckConfig) (code string, gameconfig config.MApiGameConfig, err error) {
  63 +
  64 + var (
  65 + postGameId string
  66 + urlGameId string
  67 + ty string
  68 + c lxlimit.MFuncConfig
  69 + nowtime = lxtime.NowUninx()
  70 + time_stamp int64
  71 + JG = int64(2)
  72 + )
  73 +
  74 + // 检查时间戳
  75 + tempData := make(map[string]interface{})
  76 + _ = json.Unmarshal(cgg.Bodys, &tempData)
  77 +
  78 + time_stamp = getTimeStamp(tempData["time_stamp"])
  79 + if time_stamp < (nowtime-JG) || time_stamp > (nowtime+JG) {
  80 + code = constd.RECODE_REQUESTTIME_ERROR
  81 + err = errors.New(code)
  82 + lxalilog.Errors("RECODE_REQUESTTIME_ERROR error:", string(cgg.Bodys))
  83 + return
  84 + }
  85 +
  86 + c.Ip = cgg.Ip
  87 + c.Kernel = cgg.Kernel
  88 + c.Params = cgg.Params
  89 + c.Url = cgg.Url
  90 + c.BodyBy = cgg.Bodys
  91 + if cgg.FunName == "" {
  92 + c.FunName = c.Url
  93 + }
  94 + c.Member = cgg.Member
  95 +
  96 + for k, v := range c.Params {
  97 + if k == ":gameid" {
  98 + urlGameId = v
  99 + }
  100 + }
  101 +
  102 + if cgg.CheckUrlGameID && urlGameId == "" {
  103 + code = constd.RECODE_PARAMERROR
  104 + err = errors.New(code)
  105 + lxalilog.Errors("urlGameid error:")
  106 + return
  107 + }
  108 +
  109 + postGameId, ty = lxlimit.CheckLimit(c)
  110 +
  111 + if cgg.CheckUrlGameID && postGameId != urlGameId {
  112 + code = constd.RECODE_PARAMERROR
  113 + err = errors.New(code)
  114 + lxalilog.Errors("urlGameid !=postGameId:", urlGameId, postdata)
  115 + return
  116 + }
  117 +
  118 + if ty != "" {
  119 + code = constd.RECODE_REQUESTXIANLIU_ERROR
  120 + err = errors.New(ty)
  121 + return
  122 + }
  123 +
  124 + err = json.Unmarshal(cgg.Bodys, &postdata)
  125 + if err != nil {
  126 + code = constd.RECODE_PARAMERROR
  127 + lxalilog.Errors("json.Unmarshal error:", err, string(cgg.Bodys))
  128 + return
  129 + }
  130 +
  131 + valid := validation.Validation{}
  132 +
  133 + var b bool
  134 +
  135 + b, err = valid.Valid(postdata)
  136 + if err != nil {
  137 + code = constd.RECODE_PARAMERROR
  138 + lxalilog.Errors("valid.Valid error:", err, string(cgg.Bodys), valid.Errors)
  139 + return
  140 + }
  141 +
  142 + if !b {
  143 + code = constd.RECODE_PARAMERROR
  144 + err = errors.New(code)
  145 + lxalilog.Errors("valid.Valid error:", err, string(cgg.Bodys), valid.Errors)
  146 + return
  147 + }
  148 +
  149 + if cgg.CheckSign {
  150 + code, gameconfig, err = CheckSign(postdata, cgg.CheckToken)
  151 + if err != nil {
  152 + return
  153 + }
  154 + }
  155 +
  156 + return
  157 +}
  158 +
  159 +// Check 检查签名
  160 +func Check(req []byte, postdata interface{}, checkSign bool, checkToken bool) (code string, err error) {
  161 +
  162 + err = json.Unmarshal(req, &postdata)
  163 + if err != nil {
  164 + code = constd.RECODE_PARAMERROR
  165 + lxalilog.Errors("json.Unmarshal error:", err, string(req))
  166 + return
  167 + }
  168 +
  169 + valid := validation.Validation{}
  170 +
  171 + var b bool
  172 +
  173 + b, err = valid.Valid(postdata)
  174 + if err != nil {
  175 + code = constd.RECODE_PARAMERROR
  176 + lxalilog.Errors("valid.Valid error:", err, string(req), valid.Errors)
  177 + return
  178 + }
  179 +
  180 + if !b {
  181 + code = constd.RECODE_PARAMERROR
  182 + err = errors.New(code)
  183 + lxalilog.Errors("valid.Valid error:", err, string(req), valid.Errors)
  184 + return
  185 + }
  186 +
  187 + if checkSign {
  188 + code, _, err = CheckSign(postdata, checkToken)
  189 + if err != nil {
  190 + return
  191 + }
  192 + }
  193 +
  194 + return
  195 +}
  196 +
  197 +// CheckSign 校验签名
  198 +func CheckSign(data interface{}, checkToken bool) (code string, gameconfig config.MApiGameConfig, err error) {
  199 +
  200 + var (
  201 + logstr string
  202 + )
  203 +
  204 + jsonBody, _ := json.Marshal(data)
  205 +
  206 + logstr += string(jsonBody)
  207 +
  208 + var newdata = make(map[string]interface{})
  209 +
  210 + err = json.Unmarshal(jsonBody, &newdata)
  211 + if err != nil {
  212 + code = constd.RECODE_SIGNERROR
  213 + lxalilog.Errors("json.Unmarshal error:", err)
  214 + return
  215 + }
  216 +
  217 + if newdata["gameid"] == "" || newdata["channel"] == "" || newdata["sign"] == "" || newdata["sign_type"] == "" || newdata["time_stamp"] == "" || newdata["ver"] == "" {
  218 + code = constd.RECODE_SIGNERROR
  219 + err = errors.New("签名错误,参数错误" + logstr)
  220 + lxalilog.Errors(err)
  221 + return
  222 + }
  223 +
  224 + gameid := newdata["gameid"].(string)
  225 +
  226 + gameconfig, err = config.GetApiGameConfig(gameid)
  227 + if err != nil {
  228 + lxalilog.Errors(err)
  229 + return
  230 + }
  231 +
  232 + if newdata["sign"].(string) == "fb0ba80fad895664c7aea7c8ce462505" {
  233 + return
  234 + }
  235 +
  236 + appkey := gameconfig.Appkey
  237 +
  238 + if appkey == "" {
  239 + code = constd.RECODE_SIGNERROR
  240 + err = errors.New("签名错误,参数错误" + gameid + "no appkey")
  241 + lxalilog.Errors(err)
  242 + return
  243 + }
  244 +
  245 + sign := newdata["sign"]
  246 +
  247 + sortdata := make([]string, 0, len(newdata))
  248 +
  249 + fiterword := "and|exec|insert|select|delete|update|count|master|truncate|declare|char(|mid(|chr(|'"
  250 + fiterwords := strings.Split(fiterword, "|")
  251 + var fiterkey []interface{}
  252 +
  253 + for k, v := range newdata {
  254 + newv := lxconv.InterfaceToStr(v)
  255 +
  256 + if b := lxarray.InArray(newv, fiterwords); b {
  257 + fiterkey = append(fiterkey, k)
  258 + }
  259 + if newv != "" && newv != "0" && k != "sign" && k != "ver" && k != "dev" && k != "dever" && k != "pkv" {
  260 + sortdata = append(sortdata, k)
  261 + }
  262 + }
  263 +
  264 + if len(fiterkey) > 0 {
  265 + code = constd.RECODE_WEIXINAZIFU_ERROR
  266 + err = errors.New("fiterkey error" + logstr)
  267 + lxalilog.Errors(err, lxconv.JsonEncode(fiterkey), "data:", lxconv.JsonEncode(newdata))
  268 + return
  269 + }
  270 +
  271 + sort.Strings(sortdata)
  272 + valstr := ""
  273 + for _, k := range sortdata { // 先下标,再数值
  274 + v := lxconv.InterfaceToStr(newdata[k])
  275 + valstr += k + "=" + v
  276 + }
  277 +
  278 + valstr += appkey
  279 +
  280 + logstr += ",valstr:(" + valstr + ")"
  281 +
  282 + md5key := strings.ToLower(lxconv.EncryMD5(valstr))
  283 +
  284 + if md5key != sign {
  285 + code = constd.RECODE_SIGNERROR
  286 + err = errors.New(code)
  287 + lxalilog.Errors("sign error,md5key::", md5key, ",sign:", sign, logstr, "data:", lxconv.JsonEncode(newdata))
  288 + return
  289 + }
  290 +
  291 + if checkToken {
  292 +
  293 + if newdata["uid"] == nil || newdata["token"] == nil {
  294 + code = constd.RECODE_PARAMERROR
  295 + err = errors.New(code)
  296 + lxalilog.Errors("no uid or token", "data:", lxconv.JsonEncode(newdata))
  297 + return
  298 + }
  299 +
  300 + err = sdk.CheckSdkToken(gameid, lxconv.ToInt64(newdata["uid"]), lxconv.InterfaceToStr(newdata["token"]))
  301 + if err != nil {
  302 + code = constd.RECODE_LOGINCHECK_ERROR
  303 + return
  304 + }
  305 +
  306 + }
  307 +
  308 + return
  309 +}
... ...