优化代码

This commit is contained in:
1340691923@qq.com 2022-03-16 16:04:29 +08:00
parent 600a2d700e
commit 742458ee1d
51 changed files with 349 additions and 525 deletions

View File

@ -27,10 +27,10 @@ type App struct {
configFileName,
configFileExt,
appName string
cmdName string
InitFnObservers []InitFnObserver
err error
deferFuncs []func()
cmdName string
InitFnObservers []InitFnObserver
err error
deferFuncs []func()
}
// 设置配置文件格式 例如:json,conf 等等
@ -138,7 +138,7 @@ func (this *App) Error() (err error) {
return this.err
}
func(this *App) RunManager() {
func (this *App) RunManager() {
appServer := router.Init()
go func() {
@ -149,11 +149,11 @@ func(this *App) RunManager() {
}()
}
func(this *App) WaitForExitSign(exitFunc ...func()) {
func (this *App) WaitForExitSign(exitFunc ...func()) {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
<-c
for index := range exitFunc{
for index := range exitFunc {
exitFunc[index]()
}
}

View File

@ -233,7 +233,7 @@ func InitDebugSarama() (fn func(), err error) {
func RefreshTableId() (fn func(), err error) {
fn = func() {
go report.RefreshTableIdMap(5*time.Minute)
go report.RefreshTableIdMap(5 * time.Minute)
}
return
}

View File

@ -8,7 +8,6 @@ import (
"log"
)
//初始化clickhouse 表数据
func Init() {
var err error

View File

@ -44,7 +44,7 @@ func main() {
Error()
if err != nil {
log.Println(fmt.Sprintf("初始化失败%s",err.Error()))
log.Println(fmt.Sprintf("初始化失败%s", err.Error()))
panic(err)
}

View File

@ -100,13 +100,12 @@ func main() {
middleware.Cors(
middleware.WechatSpider(
controller.ReportController{}.ReportAction,
),
),
),
)
server := &fasthttp.Server{
Handler: router.Handler,
Handler: router.Handler,
}
if model.GlobConfig.Report.ReadTimeout != 0 {
server.ReadTimeout = time.Duration(model.GlobConfig.Report.ReadTimeout) * time.Second

View File

@ -36,20 +36,20 @@ var metaEventChan = make(chan metaEventModel, 10000)
type metaAttrRelationModel struct {
EventName string
EventAttr string
AppId string
AppId string
}
type attributeModel struct {
AttributeName string
DataType int
AttributeType int
AttributeName string
DataType int
AttributeType int
attribute_source int
App_id string
App_id string
}
type metaEventModel struct {
EventName string
AppId string
AppId string
}
func MysqlConsumer() {
@ -57,18 +57,18 @@ func MysqlConsumer() {
select {
case m := <-metaAttrRelationChan:
if _, err := db.Sqlx.Exec(`insert into meta_attr_relation(app_id,event_name,event_attr) values (?,?,?);`,
m.AppId,m.EventName,m.EventAttr); err != nil && !strings.Contains(err.Error(), "1062") {
logs.Logger.Sugar().Errorf("meta_attr_relation insert",m, err)
m.AppId, m.EventName, m.EventAttr); err != nil && !strings.Contains(err.Error(), "1062") {
logs.Logger.Sugar().Errorf("meta_attr_relation insert", m, err)
}
case m := <-attributeChan:
if _, err := db.Sqlx.Exec(`insert into attribute(app_id,attribute_source,attribute_type,data_type,attribute_name) values (?,?,?,?,?);`,
m.App_id,m.attribute_source,m.AttributeType,m.DataType,m.AttributeName); err != nil && !strings.Contains(err.Error(), "1062") {
logs.Logger.Sugar().Errorf("attribute insert",m, err)
m.App_id, m.attribute_source, m.AttributeType, m.DataType, m.AttributeName); err != nil && !strings.Contains(err.Error(), "1062") {
logs.Logger.Sugar().Errorf("attribute insert", m, err)
}
case m := <-metaEventChan:
_, err := db.Sqlx.Exec(`insert into meta_event(appid,event_name) values (?,?);`,m.AppId,m.EventName)
_, err := db.Sqlx.Exec(`insert into meta_event(appid,event_name) values (?,?);`, m.AppId, m.EventName)
if err != nil && !strings.Contains(err.Error(), "1062") {
logs.Logger.Sugar().Errorf("metaEvent insert",m, err)
logs.Logger.Sugar().Errorf("metaEvent insert", m, err)
}
default:
@ -99,7 +99,7 @@ func AddMetaEvent(kafkaData model.KafkaData) (err error) {
func AddTableColumn(kafkaData model.KafkaData, failFunc func(data consumer_data.ReportAcceptStatusData), tableName string, ReqDataObject *parser.FastjsonMetric) (err error) {
dims, err := sinker.GetDims(model.GlobConfig.Comm.ClickHouse.DbName, tableName, nil, db.ClickHouseSqlx,false)
dims, err := sinker.GetDims(model.GlobConfig.Comm.ClickHouse.DbName, tableName, nil, db.ClickHouseSqlx, false)
if err != nil {
logs.Logger.Error("sinker.GetDims", zap.Error(err))
return
@ -164,8 +164,8 @@ func AddTableColumn(kafkaData model.KafkaData, failFunc func(data consumer_data.
if !found {
metaAttrRelationChan <- metaAttrRelationModel{
EventName: kafkaData.EventName,
EventAttr: columnName,
AppId: kafkaData.TableId,
EventAttr: columnName,
AppId: kafkaData.TableId,
}
MetaAttrRelationSet.Store(bStr, struct{}{})
}
@ -206,9 +206,9 @@ func AddTableColumn(kafkaData model.KafkaData, failFunc func(data consumer_data.
}
attributeChan <- attributeModel{
AttributeName:columnName,
DataType: parser.FjDetectType(obj.Get(columnName)),
AttributeType: attributeType,
AttributeName: columnName,
DataType: parser.FjDetectType(obj.Get(columnName)),
AttributeType: attributeType,
attribute_source: attributeSource,
App_id: kafkaData.TableId,
}
@ -230,7 +230,7 @@ func AddTableColumn(kafkaData model.KafkaData, failFunc func(data consumer_data.
dimsCachekey := sinker.GetDimsCachekey(model.GlobConfig.Comm.ClickHouse.DbName, tableName)
_, err = redisConn.Do("unlink", dimsCachekey)
if err != nil {
_,err = redisConn.Do("del", dimsCachekey)
_, err = redisConn.Do("del", dimsCachekey)
if err != nil {
logs.Logger.Error("err", zap.Error(err))
}

View File

@ -154,8 +154,6 @@ func main() {
panic(err)
}
err = reportData2CKSarama.Init(
model.GlobConfig.Comm.Kafka,
model.GlobConfig.Comm.Kafka.ReportTopicName,
@ -294,7 +292,7 @@ func main() {
}
//添加数据到ck用于后台统计
if err := reportData2CK.Add(consumer_data.FastjsonMetricData{
TableName:tableName,
TableName: tableName,
FastjsonMetric: metric,
}); err != nil {
logs.Logger.Error("reportData2CK err", zap.Error(err))

View File

@ -72,7 +72,7 @@ func (this BehaviorAnalysisController) LoadPropQuotas(ctx *fiber.Ctx) error {
func (this BehaviorAnalysisController) GetValues(ctx *fiber.Ctx) error {
type ReqData struct {
Appid int32 `json:"appid"`
Appid int32 `json:"appid"`
Table string `json:"table"`
Col string `json:"col"`
}

View File

@ -27,7 +27,7 @@ func (this ManagerRoleController) RolesAction(ctx *Ctx) error {
return this.Error(ctx, err)
}
list, err := service.GetRoles(roles)
if err != nil {
return this.Error(ctx, err)
}

View File

@ -120,9 +120,7 @@ func (this ManagerUserController) LogoutAction(ctx *Ctx) error {
//BI用户列表
func (this ManagerUserController) UserListAction(ctx *Ctx) error {
appid := gjson.GetBytes(ctx.Body(),"appid").String()
appid := gjson.GetBytes(ctx.Body(), "appid").String()
var userModel model.GmUserModel
list, err := userModel.Select(appid)
@ -166,7 +164,7 @@ func (this ManagerUserController) GetUserByIdAction(ctx *Ctx) error {
if err != nil {
return this.Error(ctx, err)
}
var userModel model.GmUserModel
userModel.ID = reqData.Id
gmUser, err := userModel.GetUserById()
@ -187,7 +185,7 @@ func (this ManagerUserController) UserUpdateAction(ctx *Ctx) error {
return this.Error(ctx, err)
}
if strings.TrimSpace(reqData.Password) == ""{
if strings.TrimSpace(reqData.Password) == "" {
return this.Error(ctx, errors.New("密码不能为空"))
}
@ -247,7 +245,7 @@ func (this ManagerUserController) UserBanAction(ctx *Ctx) error {
id := reqData.Id
ban_typ := reqData.Typ
if id == 1 || id == 0 {
if id == 1 || id == 0 {
return this.Error(ctx, errors.New("您无权操作该用户!"))
}

View File

@ -33,7 +33,7 @@ func (this MetaDataController) MetaEventList(ctx *fiber.Ctx) error {
if err := metaData.UpdateYesterdayCount(); err != nil {
return this.Error(ctx, err)
}
res,err := metaData.MetaEventList()
res, err := metaData.MetaEventList()
if err != nil {
return this.Error(ctx, err)
}
@ -59,7 +59,7 @@ func (this MetaDataController) MetaEventListByAttr(ctx *fiber.Ctx) error {
metaData := meta_data.MetaDataService{Appid: appid}
res,err := metaData.MetaEventListByAttr(attr)
res, err := metaData.MetaEventListByAttr(attr)
if err != nil {
return this.Error(ctx, err)
@ -82,7 +82,7 @@ func (this MetaDataController) AttrManager(ctx *fiber.Ctx) error {
metaData := meta_data.MetaDataService{Appid: strconv.Itoa(appid)}
res,err := metaData.AttrManager(typ)
res, err := metaData.AttrManager(typ)
if err != nil {
return this.Error(ctx, err)
@ -126,7 +126,7 @@ func (this MetaDataController) AttrManagerByMeta(ctx *fiber.Ctx) error {
metaData := meta_data.MetaDataService{Appid: strconv.Itoa(reqData.Appid)}
res,err := metaData.AttrManagerByMeta(reqData)
res, err := metaData.AttrManagerByMeta(reqData)
if err != nil {
return this.Error(ctx, err)
@ -185,7 +185,7 @@ func (this MetaDataController) GetCalcuSymbolData(ctx *fiber.Ctx) error {
metaData := meta_data.MetaDataService{Appid: strconv.Itoa(reqData.Appid)}
res,err := metaData.GetCalcuSymbolData(reqData)
res, err := metaData.GetCalcuSymbolData(reqData)
if err != nil {
return this.Error(ctx, err)
@ -205,7 +205,7 @@ func (this MetaDataController) GetAnalyseSelectOptions(ctx *fiber.Ctx) error {
metaData := meta_data.MetaDataService{Appid: strconv.Itoa(reqData.Appid)}
res,err := metaData.GetAnalyseSelectOptions(reqData.Appid)
res, err := metaData.GetAnalyseSelectOptions(reqData.Appid)
if err != nil {
return this.Error(ctx, err)

View File

@ -25,7 +25,7 @@ func (this PanelController) ReportTableList(ctx *fiber.Ctx) error {
c, _ := jwt.ParseToken(this.GetToken(ctx))
pannelService := pannel.PannelService{}
list,err := pannelService.ReportTableList(req.Appid,req.RtType, c.UserID)
list, err := pannelService.ReportTableList(req.Appid, req.RtType, c.UserID)
if err != nil {
return this.Error(ctx, err)
}

View File

@ -19,13 +19,10 @@ import (
"time"
)
type ReportController struct {
BaseController
}
//上报接口
func (this ReportController) ReportAction(ctx *fasthttp.RequestCtx) {
@ -41,12 +38,12 @@ func (this ReportController) ReportAction(ctx *fasthttp.RequestCtx) {
eventName = ctx.UserValue("eventName").(string)
body = ctx.Request.Body()
)
if strings.TrimSpace(eventName) == ""{
if strings.TrimSpace(eventName) == "" {
this.FastError(ctx, errors.New("事件名 不能为空"))
return
}
if strings.TrimSpace(appid) == ""{
if strings.TrimSpace(appid) == "" {
this.FastError(ctx, errors.New("appid 不能为空"))
return
}
@ -66,7 +63,6 @@ func (this ReportController) ReportAction(ctx *fasthttp.RequestCtx) {
return
}
defer duck.Put()
gjsonArr := gjson.GetManyBytes(body, "xwl_distinct_id", "xwl_ip", "xwl_part_date")
@ -87,7 +83,6 @@ func (this ReportController) ReportAction(ctx *fasthttp.RequestCtx) {
xwlPartDate = time.Now().Format(util.TimeFormat)
}
duck.NewReportType(appid, tableId, debug, xwlPartDate, eventName, xwlIp, ctx.PostBody())
if reportService.IsDebugUser(debug, xwlDistinctId, tableId) {
@ -103,7 +98,7 @@ func (this ReportController) ReportAction(ctx *fasthttp.RequestCtx) {
return
}
dims, err := sinker.GetDims(model.GlobConfig.Comm.ClickHouse.DbName, kafkaData.GetTableName(), []string{}, db.ClickHouseSqlx,true)
dims, err := sinker.GetDims(model.GlobConfig.Comm.ClickHouse.DbName, kafkaData.GetTableName(), []string{}, db.ClickHouseSqlx, true)
if err != nil {
logs.Logger.Error("sinker.GetDims", zap.Error(err))
this.FastError(ctx, errors.New("服务异常"))

View File

@ -34,7 +34,7 @@ func (this UserGroupController) AddUserGroup(ctx *fiber.Ctx) error {
Appid: addUserGroup.Appid,
}
err := userGroupService.AddUserGroup(len(addUserGroup.Ids),addUserGroup.Ids,addUserGroup.Remark,addUserGroup.Name)
err := userGroupService.AddUserGroup(len(addUserGroup.Ids), addUserGroup.Ids, addUserGroup.Remark, addUserGroup.Name)
if err != nil {
return this.Error(ctx, err)
}
@ -64,7 +64,7 @@ func (this UserGroupController) ModifyUserGroup(ctx *fiber.Ctx) error {
Appid: modifyUserGroup.Appid,
}
err := userGroupService.ModifyUserGroup(modifyUserGroup.Id, modifyUserGroup.Remark,modifyUserGroup.Name)
err := userGroupService.ModifyUserGroup(modifyUserGroup.Id, modifyUserGroup.Remark, modifyUserGroup.Name)
if err != nil {
return this.Error(ctx, err)
}
@ -95,7 +95,6 @@ func (this UserGroupController) DeleteUserGroup(ctx *fiber.Ctx) error {
return this.Error(ctx, err)
}
return this.Success(ctx, response.OperateSuccess, nil)
}
@ -113,7 +112,7 @@ func (this UserGroupController) UserGroupList(ctx *fiber.Ctx) error {
Appid: userGroupList.Appid,
}
list,err := userGroupService.UserGroupList()
list, err := userGroupService.UserGroupList()
if err != nil {
return this.Error(ctx, err)
@ -136,7 +135,7 @@ func (this UserGroupController) UserGroupSelect(ctx *fiber.Ctx) error {
Appid: userGroupList.Appid,
}
list,err := userGroupService.Options()
list, err := userGroupService.Options()
if err != nil {
return this.Error(ctx, err)

View File

@ -42,7 +42,7 @@ type Word struct {
func GetWordParse(ctx *fasthttp.RequestCtx) {
if string(ctx.FormValue("word")) == "" {
util.WriteJSON(ctx,map[string]interface{}{
util.WriteJSON(ctx, map[string]interface{}{
"code": 500,
"msg": "请点击有效单词",
})
@ -261,9 +261,9 @@ func GetWordParse(ctx *fasthttp.RequestCtx) {
}
})
util.WriteJSON(ctx,map[string]interface{}{
"code":0,
"msg":"ok",
"data":word,
util.WriteJSON(ctx, map[string]interface{}{
"code": 0,
"msg": "ok",
"data": word,
})
}

73
go.mod
View File

@ -1,6 +1,6 @@
module github.com/1340691923/xwl_bi
go 1.16
go 1.18
require (
github.com/ClickHouse/clickhouse-go v1.5.1
@ -12,27 +12,13 @@ require (
github.com/casbin/xorm-adapter v1.0.0
github.com/garyburd/redigo v1.6.2
github.com/go-sql-driver/mysql v1.6.0
github.com/go-xorm/xorm v0.7.9 // indirect
github.com/gofiber/fiber/v2 v2.22.0
github.com/gofiber/websocket/v2 v2.0.13
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/golang/snappy v0.0.4 // indirect
github.com/jmoiron/sqlx v1.3.4
github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/json-iterator/go v1.1.12
github.com/kataras/iris v0.0.2
github.com/kataras/iris/v12 v12.1.8 // indirect
github.com/klauspost/compress v1.13.5 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/lestrrat-go/strftime v1.0.5 // indirect
github.com/lib/pq v1.10.2 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-sqlite3 v1.14.8 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/moul/http2curl v1.0.0 // indirect
github.com/olivere/elastic v6.2.37+incompatible
github.com/oschwald/maxminddb-golang v1.8.0
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
github.com/pkg/errors v0.9.1
github.com/sony/sonyflake v1.0.0
github.com/spf13/viper v1.9.0
@ -40,8 +26,61 @@ require (
github.com/tidwall/sjson v1.2.3
github.com/valyala/fasthttp v1.31.0
github.com/valyala/fastjson v1.6.3
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.7.0 // indirect
go.uber.org/zap v1.19.1
golang.org/x/text v0.3.7
)
require (
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
github.com/andybalholm/brotli v1.0.2 // indirect
github.com/andybalholm/cascadia v1.3.1 // indirect
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/eapache/go-resiliency v1.2.0 // indirect
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
github.com/eapache/queue v1.1.0 // indirect
github.com/fasthttp/websocket v1.4.3-rc.9 // indirect
github.com/fsnotify/fsnotify v1.5.1 // indirect
github.com/go-xorm/xorm v0.7.9 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/hashicorp/go-uuid v1.0.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
github.com/jcmturner/gofork v1.0.0 // indirect
github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/klauspost/compress v1.13.5 // indirect
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
github.com/lestrrat-go/strftime v1.0.5 // indirect
github.com/lib/pq v1.10.2 // indirect
github.com/magiconair/properties v1.8.5 // indirect
github.com/mattn/go-sqlite3 v1.14.8 // indirect
github.com/mitchellh/mapstructure v1.4.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml v1.9.4 // indirect
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4 // indirect
github.com/spf13/afero v1.6.0 // indirect
github.com/spf13/cast v1.4.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.7.0 // indirect
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8 // indirect
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf // indirect
gopkg.in/ini.v1 v1.63.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
xorm.io/builder v0.3.6 // indirect
xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb // indirect
)

188
go.sum
View File

@ -44,21 +44,10 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/ClickHouse/clickhouse-go v1.5.1 h1:I8zVFZTz80crCs0FFEBJooIxsPcV0xfthzK1YrkpJTc=
github.com/ClickHouse/clickhouse-go v1.5.1/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c=
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
github.com/CloudyKit/jet/v3 v3.0.0 h1:1PwO5w5VCtlUUl+KTOBsTGZlhjWkcybsGaAau52tOy8=
github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
github.com/CloudyKit/jet/v4 v4.1.0 h1:EvZLdRZYZ6iljADEhrfWSCSNOJRDntNqEJJmeP0Sjg0=
github.com/CloudyKit/jet/v4 v4.1.0/go.mod h1:DhUsGNEpjPmBD0zmGNP8DaSV1dGO8g9U4adIK8BCWmw=
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/Joker/hpp v1.0.0 h1:65+iuJYdRXv/XyN62C1uEmmOx3432rNG/rKlX6V7Kkc=
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Masterminds/squirrel v1.5.1 h1:kWAKlLLJFxZG7N2E0mBMNWVp5AuUX+JUrnhFN74Eg+w=
@ -66,18 +55,13 @@ github.com/Masterminds/squirrel v1.5.1/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA4
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398 h1:WDC6ySpJzbxGWFh4aMxFFC28wwGp5pEuoTtvA4q/qQ4=
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/sarama v1.29.1 h1:wBAacXbYVLmWieEA/0X/JagDdCZ8NVFOfS6l6+2u5S0=
github.com/Shopify/sarama v1.29.1/go.mod h1:mdtqvCSg8JOxk8PmpTNGyo6wzd4BMm4QXSfDnTXmgkE=
github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU=
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/andybalholm/brotli v1.0.1-0.20200619015827-c3da72aa01ed/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E=
github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
@ -85,14 +69,9 @@ github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEq
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible h1:Ppm0npCCsmuR9oQaBtRuZcmILVE74aXE+AmrJj8L2ns=
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@ -107,8 +86,6 @@ github.com/casbin/xorm-adapter v1.0.0 h1:AJq8+6BhmjD6Oajth8UUpuE/2RAX3PR+s/T98+4
github.com/casbin/xorm-adapter v1.0.0/go.mod h1:6sy40UQdWR0blO1DJdEzbcu6rcEW89odCMcEdoB1qdM=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/chris-ramon/douceur v0.2.0 h1:IDMEdxlEUUBYBKE4z/mJnFyVXox+MjuEVDJNN27glkU=
github.com/chris-ramon/douceur v0.2.0/go.mod h1:wDW5xjJdeoMm1mRt4sD4c/LbF/mWdEpRXQKjTR8nIBE=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@ -120,12 +97,8 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@ -134,11 +107,6 @@ github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9r
github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ=
github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4 h1:YcpmyvADGYw5LqMnHqSkyIELsHCGF6PkrmM31V8rF7o=
github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM=
github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q=
github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
@ -146,8 +114,6 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@ -156,13 +122,10 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
github.com/fasthttp/websocket v1.4.3-rc.9 h1:CWJH0vONrOatdKXZgkgbFKWllijD9aY50C5KfbSDcWk=
github.com/fasthttp/websocket v1.4.3-rc.9/go.mod h1:eXL2zqDbexYJxaCw8/PQlm7VcMK6uoGvwbYbTdt4dFo=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY=
@ -172,11 +135,7 @@ github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWp
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM=
github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8=
github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@ -192,10 +151,6 @@ github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:9wScpmSP5A3Bk
github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
github.com/go-xorm/xorm v0.7.9 h1:LZze6n1UvRmM5gpL9/U9Gucwqo6aWlFVlfcHKH10qA0=
github.com/go-xorm/xorm v0.7.9/go.mod h1:XiVxrMMIhFkwSkh96BW7PACl7UhLtx2iJIHMdmjh5sQ=
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
github.com/gobwas/ws v1.0.3/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofiber/fiber/v2 v2.22.0 h1:+iyKK4ooDH6z0lAHdaWO1AFIB/DZ9AVo6vz8VZIA0EU=
github.com/gofiber/fiber/v2 v2.22.0/go.mod h1:MR1usVH3JHYRyQwMe2eZXRSZHRX38fkV+A7CPB+DlDQ=
@ -236,15 +191,11 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@ -260,8 +211,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@ -282,22 +231,15 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2-0.20200519141726-cb32006e483f/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
@ -315,8 +257,6 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
@ -328,21 +268,6 @@ github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKEN
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk=
github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/iris-contrib/blackfriday v2.0.0+incompatible h1:o5sHQHHm0ToHUlAJSTjW9UWicjJSDDauOOQ2AHuIVp4=
github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
github.com/iris-contrib/httpexpect/v2 v2.0.5/go.mod h1:JpRu+DEVVCA6KHLKUAs72QoaevQESqLHuG5s1CQ+QiA=
github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk=
github.com/iris-contrib/jade v1.1.4 h1:WoYdfyJFfZIUgqNAeOyRfTNQZOksSlZ6+FnXR3AEpX0=
github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5UybogqrXvJTBE=
github.com/iris-contrib/pongo2 v0.0.1 h1:zGP7pW51oi5eQZMIlGA3I+FHY9/HOQWDB+572yin0to=
github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g=
github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw=
github.com/iris-contrib/schema v0.0.2 h1:qd3RU2sLPaTTamv6BGn+PDD5Gmny+i3jO8xDAmWnNLs=
github.com/iris-contrib/schema v0.0.2/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA=
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
github.com/jackc/pgx v3.6.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
@ -362,38 +287,14 @@ github.com/jmoiron/sqlx v1.3.4 h1:wv+0IJZfL5z0uZoUjlpKgHkgaFSYD+r9CfrXjEXsO7w=
github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kataras/blocks v0.0.2 h1:XSeCznI3UW8MJZj2rH2lQRVrsyahdJzagBcQf7N8OeE=
github.com/kataras/blocks v0.0.2/go.mod h1:KPyOYc1M3MgzsznVcdjErtcYWO3AZXQbQ8fMYWcr3oA=
github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8=
github.com/kataras/golog v0.0.18 h1:Td7hcKN25yzqB/0SO5iohOsMk5Mq5V9kDtM5apaJLY0=
github.com/kataras/golog v0.0.18/go.mod h1:jRYl7dFYqP8aQj9VkwdBUXYZSfUktm+YYg1arJILfyw=
github.com/kataras/iris v0.0.2 h1:Tteb6pXLN9QiXvTCXCP31LRHu1LHlVA6Rappr9vWa1c=
github.com/kataras/iris v0.0.2/go.mod h1:ab8yy1jWHFgoI+/B+zoIsQpVY/XUY+NNvVCXJ27Zat8=
github.com/kataras/iris/v12 v12.1.8 h1:O3gJasjm7ZxpxwTH8tApZsvf274scSGQAUpNe47c37U=
github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE=
github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE=
github.com/kataras/neffos v0.0.16/go.mod h1:BqWkF1c6cSyqw85dfCdqXxK5cMo/hyBGhtNuFkxHyMg=
github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro=
github.com/kataras/pio v0.0.8 h1:6pX6nHJk7DAV3x1dEimibQF2CmJLlo0jWVmM9yE9KY8=
github.com/kataras/pio v0.0.8/go.mod h1:NFfMp2kVP1rmV4N6gH6qgWpuoDKlrOeYi3VrAIWCGsE=
github.com/kataras/sitemap v0.0.5 h1:4HCONX5RLgVy6G4RkYOV3vKNcma9p236LdGOipJsaFE=
github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8=
github.com/kataras/tunnel v0.0.1 h1:VsphzEnN8es/0tw7lwxC94pHwUa60nE9SYojKhbWjME=
github.com/kataras/tunnel v0.0.1/go.mod h1:Gslr6f+Y0esb704OqMi8hNOfFImgXcmg4KiN2zScgvs=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.5 h1:9O69jUPDcsT9fEm74W92rZL9FQY7rCdaXVneq+yyzl4=
@ -423,11 +324,8 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8=
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
@ -441,14 +339,7 @@ github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsO
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU=
github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
github.com/mediocregopher/radix/v3 v3.5.0/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
github.com/mediocregopher/radix/v3 v3.5.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
github.com/microcosm-cc/bluemonday v1.0.3 h1:EjVH7OqbU219kdm8acbveoclh2zZFqPJTJw6VUlTLAQ=
github.com/microcosm-cc/bluemonday v1.0.3/go.mod h1:8iwZnFn2CDDNZ0r6UXhF4xawGvzaqzCRa1n3/lO3W2w=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
@ -465,19 +356,7 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs=
github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
github.com/nats-io/nats.go v1.9.2/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE=
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/olivere/elastic v6.2.37+incompatible h1:UfSGJem5czY+x/LqxgeCBgjDn6St+z8OnsCuxwD3L0U=
github.com/olivere/elastic v6.2.37+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
@ -485,7 +364,6 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ
github.com/oschwald/maxminddb-golang v1.8.0 h1:Uh/DSnGoxsyp/KYbY1AuP0tYEwfs0sCph9p/UMXK/Hk=
github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
@ -514,46 +392,26 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s=
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE=
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4 h1:ocK/D6lCgLji37Z2so4xhMl46se1ntReQQCUIU4BWI8=
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4/go.mod h1:oejLrk1Y/5zOF+c/aHtXqn3TFlzzbAgPWg8zBiAHDas=
github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk=
github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sony/sonyflake v1.0.0 h1:MpU6Ro7tfXwgn2l5eluf9xQvQJDROTBImNCfRXn/YeM=
github.com/sony/sonyflake v1.0.0/go.mod h1:Jv3cfhf/UFtolOTTRd3q4Nl6ENqM+KfyZ5PseKfZGF4=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk=
github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4=
github.com/square/go-jose/v3 v3.0.0-20200630053402-0a67ce9b0693/go.mod h1:6hSY48PjDm4UObWmGLyJE9DxYVKTgR9kbCspXXJEhcU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
@ -573,7 +431,6 @@ github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/sjson v1.2.3 h1:5+deguEhHSEjmuICXZ21uSSsXotWMA0orU783+Z7Cp8=
github.com/tidwall/sjson v1.2.3/go.mod h1:5WdjKx3AQMvCJ4RG6/2UYT7dLrGvJUV1x4jdTAyGvZs=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
@ -583,28 +440,8 @@ github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4x
github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
github.com/vmihailenco/msgpack/v4 v4.3.11/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1 h1:d71/KA0LhvkrJ/Ok+Wx9qK7bU8meKA1Hk0jpVI5kJjk=
github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1/go.mod h1:xlngVLeyQ/Qi05oQxhQ+oTuqa03RjMwMfk/7/TCs+QI=
github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY=
github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
github.com/xdg/scram v1.0.3/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY=
github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI=
github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA=
github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0=
github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA=
github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg=
github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M=
github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@ -612,7 +449,6 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
@ -638,20 +474,14 @@ go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
@ -697,12 +527,10 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@ -771,7 +599,6 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -780,7 +607,6 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -805,7 +631,6 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -842,17 +667,13 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
@ -941,7 +762,6 @@ google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@ -1035,7 +855,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@ -1045,22 +864,16 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c=
gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@ -1071,7 +884,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

View File

@ -35,7 +35,7 @@ func FTimer(handle fasthttp.RequestHandler) fasthttp.RequestHandler {
return func(ctx *fasthttp.RequestCtx) {
startT := time.Now()
handle(ctx)
logs.Logger.Info("handle lost time",zap.String("time",time.Now().Sub(startT).String()))
logs.Logger.Info("handle lost time", zap.String("time", time.Now().Sub(startT).String()))
}
}
@ -44,7 +44,7 @@ func WechatSpider(handle fasthttp.RequestHandler) fasthttp.RequestHandler {
UserAgent := strings.ToLower(util.Bytes2str(ctx.Request.Header.UserAgent()))
if util.InstrArr(model.GlobConfig.Report.UserAgentBanList,UserAgent) {
if util.InstrArr(model.GlobConfig.Report.UserAgentBanList, UserAgent) {
logs.Logger.Error("WechatSpider", zap.String("该UserAgent禁止访问接口", ctx.Request.Header.String()))
util.WriteJSON(ctx, map[string]interface{}{
"code": 500,

View File

@ -15,30 +15,30 @@ var CmdName string
//全局配置结构体
type Config struct {
Manager ManagerConfig `json:"manager"`
Report ReportConfig `json:"report"`
Sinker SinkerConfig `json:"sinker"`
Comm struct{
Log LogConfig `json:"log"`
Mysql MysqlConfig `json:"mysql"`
Report ReportConfig `json:"report"`
Sinker SinkerConfig `json:"sinker"`
Comm struct {
Log LogConfig `json:"log"`
Mysql MysqlConfig `json:"mysql"`
ClickHouse ClickHouseConfig `json:"clickhouse"`
Kafka KafkaCfg `json:"kafka"`
Redis RedisConfig `json:"redis"`
Kafka KafkaCfg `json:"kafka"`
Redis RedisConfig `json:"redis"`
} `json:"comm"`
}
type ManagerConfig struct{
Port uint16 `json:"port"` //铸龙分析系统http启动端口
CkQueryLimit int `json:"ckQueryLimit"` //clickhouse 查询限流器阈值
CkQueryExpiration int `json:"ckQueryExpiration"` //clickhouse 查询限流器阈值
JwtSecret string `json:"jwtSecret"`
DeBug bool `json:"deBug"`
type ManagerConfig struct {
Port uint16 `json:"port"` //铸龙分析系统http启动端口
CkQueryLimit int `json:"ckQueryLimit"` //clickhouse 查询限流器阈值
CkQueryExpiration int `json:"ckQueryExpiration"` //clickhouse 查询限流器阈值
JwtSecret string `json:"jwtSecret"`
DeBug bool `json:"deBug"`
}
type SinkerConfig struct {
ReportAcceptStatus BatchConfig `json:"reportAcceptStatus"`
ReportData2CK BatchConfig `json:"reportData2CK"`
RealTimeWarehousing BatchConfig `json:"realTimeWarehousing"`
PprofHttpPort uint16 `json:"pprofHttpPort"`
PprofHttpPort uint16 `json:"pprofHttpPort"`
}
type RedisConfig struct {
@ -73,18 +73,18 @@ type MysqlConfig struct {
}
type ReportConfig struct {
ReportPort uint16 `json:"reportPort"`//上报程序启动端口
ReadTimeout int `json:"readTimeout"`
WriteTimeout int `json:"writeTimeout"`
MaxConnsPerIP int `json:"maxConnsPerIP"`
MaxRequestsPerConn int `json:"maxRequestsPerConn"`
IdleTimeout int `json:"idleTimeout"`
ReportPort uint16 `json:"reportPort"` //上报程序启动端口
ReadTimeout int `json:"readTimeout"`
WriteTimeout int `json:"writeTimeout"`
MaxConnsPerIP int `json:"maxConnsPerIP"`
MaxRequestsPerConn int `json:"maxRequestsPerConn"`
IdleTimeout int `json:"idleTimeout"`
UserAgentBanList []string `json:"userAgentBanList"`
}
type LogConfig struct {
StorageDays int `json:"storageDays"` //日志保留天数
LogDir string `json:"logDir"` //日志保留文件夹地址
LogDir string `json:"logDir"` //日志保留文件夹地址
}
func (this *Config) GetCkQueryLimit() int {
@ -128,7 +128,7 @@ type BatchConfig struct {
}
//下载配置文件
func DownloadConfigFile(fname string)(err error){
func DownloadConfigFile(fname string) (err error) {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
var config Config
filePtr, err := os.Create(fname)
@ -141,6 +141,6 @@ func DownloadConfigFile(fname string)(err error){
if err != nil {
return errors.New(fmt.Sprintf("创建配置文件异常:%s", err.Error()))
}
_,err = filePtr.Write(data)
_, err = filePtr.Write(data)
return
}
}

View File

@ -85,7 +85,7 @@ func (this GmUserModel) Select(appid string) (gmUser []GmUserModel, err error) {
// Delete
func (this GmUserModel) Delete() (err error) {
_, err = db.Sqlx.Exec("delete from gm_user where id = ? ;", this.ID)
if err!=nil{
if err != nil {
return
}

View File

@ -18,7 +18,7 @@ type UserGroup struct {
UpdateTime string `db:"update_time" json:"update_time"`
}
func (this *UserGroup) Insert(managerUid int32, appid int,userCount int,userList []byte)(err error) {
func (this *UserGroup) Insert(managerUid int32, appid int, userCount int, userList []byte) (err error) {
_, err = db.SqlBuilder.Insert("user_group").SetMap(map[string]interface{}{
"group_name": this.GroupName,
"group_remark": this.GroupRemark,
@ -36,8 +36,7 @@ func (this *UserGroup) Insert(managerUid int32, appid int,userCount int,userList
return nil
}
func (this *UserGroup) ModifyUserGroup(managerUid int32, appid int)(err error) {
func (this *UserGroup) ModifyUserGroup(managerUid int32, appid int) (err error) {
_, err = db.SqlBuilder.
Update("user_group").
SetMap(map[string]interface{}{
@ -75,13 +74,13 @@ func (this *UserGroup) List(managerUid int32, appid int) (list []UserGroup, err
Where(db.Eq{"create_by": managerUid, "appid": appid}).
ToSql()
if err != nil {
return nil,err
return nil, err
}
if err := db.Sqlx.Select(&list, SQL, args...); err != nil {
return nil,err
return nil, err
}
return list,err
return list, err
}
func (this *UserGroup) GetSelectOptions(managerUid int32, appid int) (list []UserGroup, err error) {
@ -98,8 +97,8 @@ func (this *UserGroup) GetSelectOptions(managerUid int32, appid int) (list []Use
return
}
err = db.Sqlx.Select(&list, SQL, args...)
if err != nil {
err = db.Sqlx.Select(&list, SQL, args...)
if err != nil {
return
}

View File

@ -55,10 +55,10 @@ func getHandlerName(v interface{}) (controller string, action string) {
str := runtime.FuncForPC(reflect.ValueOf(v).Pointer()).Name()
strArr := strings.Split(str, "-")
tmp := strings.Split(strArr[0], ".")
if len(tmp) == 4{
if len(tmp) == 4 {
return tmp[2], tmp[3]
}else{
return "",""
} else {
return "", ""
}
}

View File

@ -215,24 +215,24 @@ type GetUserByIdReq struct {
type ReportCountReq struct {
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Appid int `json:"appid"`
Appid int `json:"appid"`
}
type EventFailDescReq struct {
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Appid int `json:"appid"`
Appid int `json:"appid"`
DataName string `json:"data_name"`
}
type AddDebugDeviceIDReq struct {
Appid int `json:"appid"`
Appid int `json:"appid"`
Remark string `json:"remark"`
DeviceID string `json:"deviceID"`
}
type DelDebugDeviceIDReq struct {
Appid int `json:"appid"`
Appid int `json:"appid"`
DeviceID string `json:"deviceID"`
}
@ -259,22 +259,21 @@ type UserBanReq struct {
Id int `json:"id"`
}
type AttrManagerReq struct {
Appid int `json:"appid"`
Typ int `json:"typ"`
}
type UpdateAttrInvisibleReq struct {
Appid int `json:"appid"`
AttributeSource int `json:"attribute_source"`
Appid int `json:"appid"`
AttributeSource int `json:"attribute_source"`
AttributeName string `json:"attribute_name"`
Status int `json:"status"`
}
type AttrManagerByMetaReq struct {
Appid int `json:"appid"`
Typ int `json:"typ"`
Appid int `json:"appid"`
Typ int `json:"typ"`
EventName string `json:"event_name"`
}
@ -285,14 +284,14 @@ type UpdateShowNameReq struct {
}
type UpdateAttrShowNameReq struct {
Appid int `json:"appid"`
Appid int `json:"appid"`
AttributeName string `json:"attribute_name"`
Typ int `json:"typ"`
Typ int `json:"typ"`
ShowName string `json:"show_name"`
}
type GetCalcuSymbolDataReq struct {
Appid int `json:"appid"`
Appid int `json:"appid"`
EventName string `json:"event_name"`
}
@ -307,4 +306,4 @@ type GmOperaterLogList struct {
RoleId int `json:"operater_role_id"`
OperaterAction string `json:"operater_action"`
Date []string `json:"date"`
}
}

View File

@ -14,20 +14,19 @@ import (
)
type BehaviorAnalysisService struct {
}
func(this *BehaviorAnalysisService)GetConfigs(appid int)(eventNameList []response.MetaEventListRes,attributeMap map[int][]response.AttributeRes,err error){
func (this *BehaviorAnalysisService) GetConfigs(appid int) (eventNameList []response.MetaEventListRes, attributeMap map[int][]response.AttributeRes, err error) {
attributeMap = map[int][]response.AttributeRes{}
if err := db.Sqlx.Select(&eventNameList, "select event_name,show_name from meta_event where appid = ?", appid); err != nil {
return eventNameList,attributeMap,err
return eventNameList, attributeMap, err
}
var attributeRes []response.AttributeRes
if err := db.Sqlx.Select(&attributeRes, "select attribute_name,show_name,data_type,attribute_type,attribute_source from attribute where app_id = ? and (status = 1 or attribute_type = 1) and attribute_name not in ('xwl_part_date','xwl_kafka_offset','xwl_part_event') order by attribute_type asc", appid); err != nil {
return eventNameList,attributeMap,err
return eventNameList, attributeMap, err
}
for k, v := range attributeRes {
@ -54,7 +53,7 @@ type AttributeName struct {
Analysis map[string]string `json:"analysis" db:"-"`
}
func(this *BehaviorAnalysisService) LoadPropQuotas(reqData request.LoadPropQuotasReq)(attributeNameList []AttributeName,err error){
func (this *BehaviorAnalysisService) LoadPropQuotas(reqData request.LoadPropQuotasReq) (attributeNameList []AttributeName, err error) {
if err := db.Sqlx.Select(&attributeNameList,
"select attribute_name,show_name,data_type from attribute "+
@ -65,7 +64,7 @@ func(this *BehaviorAnalysisService) LoadPropQuotas(reqData request.LoadPropQuota
reqData.Appid,
reqData.EventName,
); err != nil {
return nil,err
return nil, err
}
for index, v := range attributeNameList {
@ -85,21 +84,21 @@ func(this *BehaviorAnalysisService) LoadPropQuotas(reqData request.LoadPropQuota
attributeNameList[index].Analysis = utils.StringPropQuotas
}
}
return attributeNameList,nil
return attributeNameList, nil
}
type ValueStruct struct {
Value interface{} `json:"value" db:"value"`
}
func(this *BehaviorAnalysisService) GetValues(appid string,table string,col string,reqData []byte)(values []ValueStruct,err error){
func (this *BehaviorAnalysisService) GetValues(appid string, table string, col string, reqData []byte) (values []ValueStruct, err error) {
cache := NewCache(time.Minute*2, fmt.Sprintf("%s_%s_%s_%s", "GetValues", appid, table, col), reqData)
resData, redisErr := cache.LoadData()
if util.FilterRedisNilErr(redisErr) {
return values,err
return values, err
}
if len(resData) > 0 {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
@ -107,10 +106,10 @@ func(this *BehaviorAnalysisService) GetValues(appid string,table string,col stri
err := json.Unmarshal(resData, &values)
if err != nil {
return values,err
return values, err
}
return values,err
return values, err
}
tableName := ""
@ -125,7 +124,7 @@ func(this *BehaviorAnalysisService) GetValues(appid string,table string,col stri
err = db.ClickHouseSqlx.Select(&values, SQL)
if err != nil {
return values,err
return values, err
}
for index, v := range values {
@ -139,9 +138,9 @@ func(this *BehaviorAnalysisService) GetValues(appid string,table string,col stri
resB, err := json.Marshal(values)
if err != nil {
return values,err
return values, err
}
cache.SetData(resB)
return values,err
}
return values, err
}

View File

@ -21,7 +21,7 @@ func ClearCacheByAppid(key string) (err error) {
defer conn.Close()
_, err = conn.Do("unlink", key)
if err != nil {
_,err = conn.Do("del", key)
_, err = conn.Do("del", key)
if err != nil {
logs.Logger.Error("err", zap.Error(err))
}

View File

@ -28,20 +28,18 @@ func (this *Trace) setSqlTyp(typ int) {
this.sqlTyp = typ
}
func (this *Trace) GetList() (interface{}, error) {
type Res1 struct {
Source string `json:"source"`
Target string `json:"target"`
Value int `json:"value"`
Value int `json:"value"`
}
type Res2 struct {
Name string `json:"name"`
}
this.setSqlTyp(TableSql)
SQL, args, err := this.GetExecSql()
@ -207,7 +205,7 @@ func (this *Trace) GetChartSql() (SQL string, allArgs []interface{}, err error)
with ` + this.eventNameMapStr + ` as eventMap
select result_chain as trace33,concat(mapValues(eventMap)[indexOf(mapKeys(eventMap), '`+this.req.ZhibiaoArr[0].EventName+`')],'(最终路径)') as str_link from
select result_chain as trace33,concat(mapValues(eventMap)[indexOf(mapKeys(eventMap), '` + this.req.ZhibiaoArr[0].EventName + `')],'(最终路径)') as str_link from
(
select
@ -226,7 +224,7 @@ func (this *Trace) GetChartSql() (SQL string, allArgs []interface{}, err error)
),
arrayWithConstant(
length(groupArray(toUnixTimestamp(part_date))),
maxIf(toUnixTimestamp(part_date) `+strings.ReplaceAll(windowSql,"xwl_part_event","event.1")+` )
maxIf(toUnixTimestamp(part_date) ` + strings.ReplaceAll(windowSql, "xwl_part_event", "event.1") + ` )
)
)
)
@ -274,54 +272,52 @@ func (this *Trace) GetChartSql() (SQL string, allArgs []interface{}, err error)
/*SQL = `select splitByString('->', arrayJoin(arrayMap( (x, y) -> concat(concat( x,'->'),y),arraySlice(trace, 1, length(trace) - 1),arraySlice(trace, 2, length(trace)) ))) as trace2,sum(1) as sum_user_count from (
select if(length(trace33)==1,arrayPushBack(trace33,str_link),arrayPushBack(arraySlice(trace33, 1, length(trace33) - 1),str_link)) as trace from (
select arrayMap((x, y) -> CONCAT(x, concat('(',concat(toString(y),')'))),result_chain,arrayEnumerateUniq(result_chain)) as trace33,concat(mapValues(eventMap)[indexOf(mapKeys(eventMap), '`+this.req.ZhibiaoArr[0].EventName+`')],'(最终路径)') as str_link from (
select if(length(trace33)==1,arrayPushBack(trace33,str_link),arrayPushBack(arraySlice(trace33, 1, length(trace33) - 1),str_link)) as trace from (
select arrayMap((x, y) -> CONCAT(x, concat('(',concat(toString(y),')'))),result_chain,arrayEnumerateUniq(result_chain)) as trace33,concat(mapValues(eventMap)[indexOf(mapKeys(eventMap), '`+this.req.ZhibiaoArr[0].EventName+`')],'(最终路径)') as str_link from (
select
xwl_distinct_id as user_id, ` + this.eventNameMapStr + ` as eventMap,
select
xwl_distinct_id as user_id, ` + this.eventNameMapStr + ` as eventMap,
arrayCompact(
arrayMap(
b -> tupleElement(b, 1),
arraySort(
y -> tupleElement(y, 2),
arrayFilter(
(x, y) -> y - x.2 <= ` + strconv.Itoa(this.req.WindowTime) + ` and y - x.2 >= 0,
arrayMap(
(x, y) -> (x, y),
groupArray(mapValues(eventMap)[indexOf(mapKeys(eventMap), xwl_part_event)]),
groupArray(toUnixTimestamp(xwl_part_date))
),
arrayWithConstant(
length(groupArray(toUnixTimestamp(xwl_part_date))),
maxIf(toUnixTimestamp(xwl_part_date)` + windowSql + ` )
arrayCompact(
arrayMap(
b -> tupleElement(b, 1),
arraySort(
y -> tupleElement(y, 2),
arrayFilter(
(x, y) -> y - x.2 <= ` + strconv.Itoa(this.req.WindowTime) + ` and y - x.2 >= 0,
arrayMap(
(x, y) -> (x, y),
groupArray(mapValues(eventMap)[indexOf(mapKeys(eventMap), xwl_part_event)]),
groupArray(toUnixTimestamp(xwl_part_date))
),
arrayWithConstant(
length(groupArray(toUnixTimestamp(xwl_part_date))),
maxIf(toUnixTimestamp(xwl_part_date)` + windowSql + ` )
)
)
)
)
)
)
)
)
result_chain
from
xwl_event` + strconv.Itoa(this.req.Appid) + `
prewhere
xwl_part_date >= toDateTime('` + startTime + `')
AND xwl_part_date <= toDateTime('` + endTime + `') and ` + whereFilterSql + ` ` + userFilterSql + `
group by
xwl_distinct_id
HAVING notEmpty(result_chain)
result_chain
from
xwl_event` + strconv.Itoa(this.req.Appid) + `
prewhere
xwl_part_date >= toDateTime('` + startTime + `')
AND xwl_part_date <= toDateTime('` + endTime + `') and ` + whereFilterSql + ` ` + userFilterSql + `
group by
xwl_distinct_id
HAVING notEmpty(result_chain)
)))
)))
group by trace2
`*/
group by trace2
`*/
return
}
func (this *Trace) GetExecSql() (SQL string, allArgs []interface{}, err error) {
if this.sqlTyp == ChartSql {
return this.GetChartSql()
@ -367,7 +363,6 @@ func NewTrace(reqData []byte) (Ianalysis, error) {
obj.sql, obj.args, err = utils.GetUserGroupSqlAndArgs(obj.req.UserGroup, obj.req.Appid)
if err != nil {
return nil, err
}

View File

@ -85,9 +85,9 @@ func (this *UserEventDetail) GetList() (interface{}, error) {
resList := []map[string][]map[string]interface{}{}
for index:= range tmp{
for index := range tmp {
val := res[tmp[index]]
m := map[string][]map[string]interface{}{tmp[index]:val}
m := map[string][]map[string]interface{}{tmp[index]: val}
resList = append(resList, m)
}

View File

@ -124,7 +124,7 @@ func getExpr(columnName, comparator string, ftv interface{}) squirrel.Sqlizer {
return squirrel.Expr(fmt.Sprintf(" ( %v >= ? and %v <= ? ) ", columnName, columnName), ftv.([]interface{})[0], ftv.([]interface{})[1])
}
if util.InstrArr(rangeTimeSymbolArr, comparator) {
if len(ftv.([]interface{})) != 2{
if len(ftv.([]interface{})) != 2 {
return squirrel.Expr(" 1 = 1 ")
}
return squirrel.Expr(fmt.Sprintf(" ( %v >= toDateTime(?) and %v <= toDateTime(?) ) ", columnName, columnName), ftv.([]interface{})[0], ftv.([]interface{})[1])

View File

@ -123,14 +123,14 @@ func (this *AppService) Create(app model.App, managerUid int32) (err error) {
return
}
func(this AppService) ChangeStatus(app model.App, managerUid int32)(err error){
func (this AppService) ChangeStatus(app model.App, managerUid int32) (err error) {
if !util.InArr([]int{1, 0}, *app.IsClose) {
return errors.New("无效操作")
}
_, err = db.SqlBuilder.Update("app").
SetMap(map[string]interface{}{
"is_close": *app.IsClose,
"update_by": managerUid}).
"is_close": *app.IsClose,
"update_by": managerUid}).
Where(db.Eq{"app_id": app.AppId}).
RunWith(db.Sqlx).
Exec()
@ -190,7 +190,7 @@ func (this *AppService) List(managerUid int32, app model.App) (list []model.App,
return
}
func(this *AppService) ResetAppkey(managerUid int32,app model.App)(err error){
func (this *AppService) ResetAppkey(managerUid int32, app model.App) (err error) {
app.AppKey = util.MD5HexHash(util.Str2bytes(util.GetUUid()))
@ -210,4 +210,4 @@ func(this *AppService) ResetAppkey(managerUid int32,app model.App)(err error){
return
}
return
}
}

View File

@ -11,9 +11,9 @@ import (
)
type RealTimeWarehousingData struct {
Appid int64
EventName string
CreateTime string
Appid int64
EventName string
CreateTime string
Data []byte
}

View File

@ -6,11 +6,9 @@ import (
)
type DebugData struct {
}
func(this *DebugData) AddDebugDeviceID(appid,deviceID,remark string,managerUid int32)(err error){
func (this *DebugData) AddDebugDeviceID(appid, deviceID, remark string, managerUid int32) (err error) {
_, err = db.SqlBuilder.Insert("debug_device").SetMap(map[string]interface{}{
"remark": remark,
@ -35,7 +33,7 @@ func(this *DebugData) AddDebugDeviceID(appid,deviceID,remark string,managerUid i
return
}
func(this *DebugData) DelDebugDeviceID(appid,deviceID string,managerUid int32)(err error){
func (this *DebugData) DelDebugDeviceID(appid, deviceID string, managerUid int32) (err error) {
_, err = db.SqlBuilder.
Delete("debug_device").
@ -57,7 +55,7 @@ func(this *DebugData) DelDebugDeviceID(appid,deviceID string,managerUid int32)(e
return
}
func(this *DebugData) DebugDeviceIDList(appid int,managerUid int32)(res []model.DebugDevice,err error){
func (this *DebugData) DebugDeviceIDList(appid int, managerUid int32) (res []model.DebugDevice, err error) {
sql, args, err := db.SqlBuilder.
Select("*").
@ -74,4 +72,4 @@ func(this *DebugData) DebugDeviceIDList(appid int,managerUid int32)(res []model.
}
return
}
}

View File

@ -9,10 +9,9 @@ import (
)
type GmOperaterLogService struct {
}
func(this *GmOperaterLogService)List(reqData request.GmOperaterLogList)(list []model.GmOperaterLog,count int,err error){
func (this *GmOperaterLogService) List(reqData request.GmOperaterLogList) (list []model.GmOperaterLog, count int, err error) {
if reqData.Page <= 0 {
reqData.Page = 1
}
@ -52,4 +51,4 @@ func(this *GmOperaterLogService)List(reqData request.GmOperaterLogList)(list []m
list[index].BodyStr = body
}
return
}
}

View File

@ -51,7 +51,7 @@ func (this GmRoleService) Delete(id int) (err error) {
return
}
func(this GmRoleService) GetRoles(roles []model.GmRoleModel)(list []request.GmRoleModel,err error){
func (this GmRoleService) GetRoles(roles []model.GmRoleModel) (list []request.GmRoleModel, err error) {
for _, v := range roles {
roleRes := request.GmRoleModel{
ID: v.ID,
@ -80,4 +80,4 @@ func(this GmRoleService) GetRoles(roles []model.GmRoleModel)(list []request.GmRo
list = append(list, roleRes)
}
return
}
}

View File

@ -108,24 +108,24 @@ func (this *MetaDataService) GetEventNameShowMap() (mapStr string, err error) {
return buff.String(), err
}
func(this *MetaDataService)MetaEventList()(res []response.MetaEventListRes,err error){
func (this *MetaDataService) MetaEventList() (res []response.MetaEventListRes, err error) {
if err := db.Sqlx.Select(&res, "select event_name,show_name,yesterday_count from meta_event where appid = ?", this.Appid); err != nil {
return res,err
return res, err
}
return res,err
return res, err
}
func(this *MetaDataService) MetaEventListByAttr(attr string)(res []response.MetaEventListRes,err error){
func (this *MetaDataService) MetaEventListByAttr(attr string) (res []response.MetaEventListRes, err error) {
eventNameList := []string{}
if err := db.Sqlx.Select(&eventNameList, "select event_name from meta_attr_relation where app_id = ? and event_attr = ? ", this.Appid, attr); err != nil {
return res,err
return res, err
}
var resTmp []response.MetaEventListRes
if err := db.Sqlx.Select(&resTmp, "select event_name,show_name,yesterday_count from meta_event where appid = ?", this.Appid); err != nil {
return res,err
return res, err
}
for _, v := range resTmp {
@ -133,12 +133,12 @@ func(this *MetaDataService) MetaEventListByAttr(attr string)(res []response.Meta
res = append(res, v)
}
}
return res,err
return res, err
}
func(this *MetaDataService)AttrManager(typ int)(res []response.AttributeRes,err error){
func (this *MetaDataService) AttrManager(typ int) (res []response.AttributeRes, err error) {
if err := db.Sqlx.Select(&res, "select attribute_name,show_name,data_type,attribute_type,status from attribute where app_id = ? and attribute_source =?", this.Appid, typ); err != nil {
return res,err
return res, err
}
for k, v := range res {
if _, ok := parser.TypeRemarkMap[v.DataType]; ok {
@ -149,10 +149,10 @@ func(this *MetaDataService)AttrManager(typ int)(res []response.AttributeRes,err
res[k].AttributeType = 1
}
}
return res,err
return res, err
}
func(this *MetaDataService) UpdateAttrInvisible(reqData request.UpdateAttrInvisibleReq)(err error){
func (this *MetaDataService) UpdateAttrInvisible(reqData request.UpdateAttrInvisibleReq) (err error) {
appid := reqData.Appid
attributeSource := reqData.AttributeSource
attributeName := reqData.AttributeName
@ -164,21 +164,21 @@ func(this *MetaDataService) UpdateAttrInvisible(reqData request.UpdateAttrInvisi
return nil
}
func(this *MetaDataService) AttrManagerByMeta(reqData request.AttrManagerByMetaReq) (res []response.AttributeRes,err error) {
func (this *MetaDataService) AttrManagerByMeta(reqData request.AttrManagerByMetaReq) (res []response.AttributeRes, err error) {
appid := reqData.Appid
typ :=reqData.Typ
typ := reqData.Typ
eventName := reqData.EventName
eventAttrList := []string{}
if err := db.Sqlx.Select(&eventAttrList, "select event_attr from meta_attr_relation where app_id = ? and event_name = ? ", appid, eventName); err != nil {
return nil,err
return nil, err
}
var resTmp []response.AttributeRes
if err := db.Sqlx.Select(&resTmp, "select attribute_name,show_name,data_type,attribute_type from attribute where app_id = ? and attribute_source =?", appid, typ); err != nil {
return nil,err
return nil, err
}
for k, v := range resTmp {
@ -193,10 +193,10 @@ func(this *MetaDataService) AttrManagerByMeta(reqData request.AttrManagerByMetaR
res = append(res, resTmp[k])
}
}
return res,err
return res, err
}
func(this *MetaDataService)UpdateAttrShowName(reqData request.UpdateAttrShowNameReq)(err error){
func (this *MetaDataService) UpdateAttrShowName(reqData request.UpdateAttrShowNameReq) (err error) {
appid := reqData.Appid
attributeName := reqData.AttributeName
attributeSource := reqData.Typ
@ -207,7 +207,7 @@ func(this *MetaDataService)UpdateAttrShowName(reqData request.UpdateAttrShowName
return nil
}
func(this *MetaDataService)UpdateEventShowName(reqData request.UpdateShowNameReq)(err error){
func (this *MetaDataService) UpdateEventShowName(reqData request.UpdateShowNameReq) (err error) {
appid := reqData.Appid
eventName := reqData.EventName
showName := reqData.ShowName
@ -217,20 +217,20 @@ func(this *MetaDataService)UpdateEventShowName(reqData request.UpdateShowNameReq
return nil
}
func(this *MetaDataService)GetCalcuSymbolData(reqData request.GetCalcuSymbolDataReq)(res []response.AttributeRes,err error){
func (this *MetaDataService) GetCalcuSymbolData(reqData request.GetCalcuSymbolDataReq) (res []response.AttributeRes, err error) {
appid := reqData.Appid
eventName := reqData.EventName
eventAttrList := []string{}
if err := db.Sqlx.Select(&eventAttrList, "select event_attr from meta_attr_relation where app_id = ? and event_name = ? ", appid, eventName); err != nil {
return nil,err
return nil, err
}
var resTmp []response.AttributeRes
if err := db.Sqlx.Select(&resTmp, "select attribute_name,show_name,data_type,attribute_type from attribute where app_id = ? and (status = 1 or attribute_type = 1) and attribute_source =2", appid); err != nil {
return nil,err
return nil, err
}
for k, v := range resTmp {
@ -246,7 +246,7 @@ func(this *MetaDataService)GetCalcuSymbolData(reqData request.GetCalcuSymbolData
}
}
return res,nil
return res, nil
}
@ -259,7 +259,7 @@ type EventNameAndTheAttr struct {
AttributeType string `json:"attribute_type" db:"attribute_type"`
}
func(this *MetaDataService) GetAnalyseSelectOptions(appid int)(eventNameAndTheAttrList []EventNameAndTheAttr,err error){
func (this *MetaDataService) GetAnalyseSelectOptions(appid int) (eventNameAndTheAttrList []EventNameAndTheAttr, err error) {
getEventNameAndTheAttrSql := `
SELECT e.show_name as event_name_desc,
@ -282,4 +282,3 @@ FROM
}
return
}

View File

@ -99,7 +99,7 @@ func (this *PannelService) MovePannel2Dir(id, folderId int, managerUid int32) (e
func (this *PannelService) Rename(pannelName string, id int, managerUid int32) (err error) {
_, err = db.SqlBuilder.
Update("pannel").
SetMap(map[string]interface{}{"pannel_name": pannelName,}).
SetMap(map[string]interface{}{"pannel_name": pannelName}).
Where(db.Eq{"id": id, "create_by": managerUid}).
RunWith(db.Sqlx).
Exec()
@ -184,7 +184,7 @@ FROM
return
}
func(this *PannelService) FindRtById(id int,managerUid int32)(reportTable model.ReportTable,err error){
func (this *PannelService) FindRtById(id int, managerUid int32) (reportTable model.ReportTable, err error) {
sqls, args, err := db.SqlBuilder.
Select("*").
From("report_table").
@ -192,36 +192,34 @@ func(this *PannelService) FindRtById(id int,managerUid int32)(reportTable model.
ToSql()
if err != nil {
return reportTable,err
return reportTable, err
}
if err := db.Sqlx.Get(&reportTable, sqls, args...); err != nil {
if err == sql.ErrNoRows {
return reportTable,errors.New("您无权限操作该报表或该报表已被删除")
return reportTable, errors.New("您无权限操作该报表或该报表已被删除")
}
return reportTable,err
return reportTable, err
}
return reportTable,err
return reportTable, err
}
func(this *PannelService)FindNameCount(data request.FindNameCount,managerUid int32)(count int,err error){
func (this *PannelService) FindNameCount(data request.FindNameCount, managerUid int32) (count int, err error) {
if err := db.SqlBuilder.
Select("count(1)").
From("report_table").
Where(db.Eq{"name": data.Name, "rt_type": data.RtType, "appid": data.Appid, "user_id": managerUid}).
RunWith(db.Sqlx).
QueryRow().
Scan(&count);
err != nil {
return 0,err
Scan(&count); err != nil {
return 0, err
}
return count,nil
return count, nil
}
func(this *PannelService) DeleteReportTableByID(data model.ReportTable,managerUid int32)(err error){
if _, err := db.SqlBuilder.Delete("report_table").Where(db.Eq{"id": data.Id, "user_id":managerUid}).RunWith(db.Sqlx).Exec(); err != nil {
func (this *PannelService) DeleteReportTableByID(data model.ReportTable, managerUid int32) (err error) {
if _, err := db.SqlBuilder.Delete("report_table").Where(db.Eq{"id": data.Id, "user_id": managerUid}).RunWith(db.Sqlx).Exec(); err != nil {
return err
}
@ -233,8 +231,7 @@ func(this *PannelService) DeleteReportTableByID(data model.ReportTable,managerUi
return nil
}
func(this *PannelService) ReportTableList(appid int,rtType int8,managerUid int32)(list []model.ReportTable,err error){
func (this *PannelService) ReportTableList(appid int, rtType int8, managerUid int32) (list []model.ReportTable, err error) {
where := db.Eq{
"appid": appid,
@ -248,13 +245,13 @@ func(this *PannelService) ReportTableList(appid int,rtType int8,managerUid int32
sql, args, err := db.SqlBuilder.Select("*").From("report_table").Where(where).OrderBy("rt_type").ToSql()
if err != nil {
return nil,err
return nil, err
}
if err := db.Sqlx.Select(&list, sql, args...); err != nil {
return nil,err
return nil, err
}
return list,nil
return list, nil
}
}

View File

@ -9,11 +9,10 @@ import (
)
type RealDataService struct {
}
//错误数据列表
func (this RealDataService) FailDataList(minutes int,appid int) (failDataResList []response.FailDataRes,err error) {
func (this RealDataService) FailDataList(minutes int, appid int) (failDataResList []response.FailDataRes, err error) {
err = db.ClickHouseSqlx.Select(&failDataResList, `
select
@ -23,12 +22,12 @@ func (this RealDataService) FailDataList(minutes int,appid int) (failDataResList
from (select * from xwl_acceptance_status prewhere table_id = ? and status = ? order by part_date desc limit 1000 ) a
group by interval_date,a.error_reason,a.error_handling,report_type
order by interval_date desc;
`,minutes,appid,consumer_data.FailStatus)
`, minutes, appid, consumer_data.FailStatus)
return
}
func(this RealDataService) FailDataDesc(appid ,startTime ,endTime ,errorReason ,errorHandling ,reportType string )(data string ,err error){
func (this RealDataService) FailDataDesc(appid, startTime, endTime, errorReason, errorHandling, reportType string) (data string, err error) {
err = db.ClickHouseSqlx.Get(&data, `
select report_data from xwl_acceptance_status prewhere
table_id = `+appid+`
@ -42,7 +41,7 @@ func(this RealDataService) FailDataDesc(appid ,startTime ,endTime ,errorReason ,
return
}
func(this RealDataService)ReportCount(appid string,startTime string,endTime string)(res []response.ReportCountRes,err error){
func (this RealDataService) ReportCount(appid string, startTime string, endTime string) (res []response.ReportCountRes, err error) {
type count struct {
DataName string `db:"data_name"`
Count int `db:"count"`
@ -59,20 +58,20 @@ func(this RealDataService)ReportCount(appid string,startTime string,endTime stri
var showNameTmpArr []ShowNameTmp
mysqlErr := db.Sqlx.Select(&showNameTmpArr, "select event_name,show_name from meta_event where appid = ?", appid)
if util.FilterMysqlNilErr(mysqlErr) {
return nil,mysqlErr
return nil, mysqlErr
}
err = db.ClickHouseSqlx.Select(&allCountArr, `select data_name,count() as count from xwl_acceptance_status xas prewhere table_id = `+appid+` and part_date >= '`+startTime+`' and part_date <= '`+endTime+`' group by data_name`)
if err != nil {
return nil,err
return nil, err
}
err = db.ClickHouseSqlx.Select(&failCountArr, `select data_name,count() as count from xwl_acceptance_status xas prewhere status = 0 and table_id = `+appid+` and part_date >= '`+startTime+`' and part_date <= '`+endTime+`' group by data_name`)
if err != nil {
return nil,err
return nil, err
}
err = db.ClickHouseSqlx.Select(&succCountArr, `select data_name,count() as count from xwl_acceptance_status xas prewhere status = 1 and table_id = `+appid+` and part_date >= '`+startTime+`' and part_date <= '`+endTime+`' group by data_name`)
if err != nil {
return nil,err
return nil, err
}
resMap := map[string]response.ReportCountRes{}
@ -111,10 +110,10 @@ func(this RealDataService)ReportCount(appid string,startTime string,endTime stri
for _, data := range resMap {
res = append(res, data)
}
return res,nil
return res, nil
}
func(this RealDataService)EventFailDesc(appid ,startTime ,endTime,dataName string)(res []response.EventFailDescRes,err error){
func (this RealDataService) EventFailDesc(appid, startTime, endTime, dataName string) (res []response.EventFailDescRes, err error) {
err = db.ClickHouseSqlx.Select(&res, `select error_reason,count() as count,any(report_data) as report_data from xwl_acceptance_status prewhere
table_id = `+appid+`
and part_date >= '`+startTime+`'
@ -123,7 +122,7 @@ func(this RealDataService)EventFailDesc(appid ,startTime ,endTime,dataName strin
and status = `+strconv.Itoa(consumer_data.FailStatus)+`
group by error_reason`)
if err != nil {
return nil,err
return nil, err
}
return res,nil
}
return res, nil
}

View File

@ -17,7 +17,6 @@ import (
)
type ReportService struct {
}
var tableIdMap sync.Map

View File

@ -40,18 +40,18 @@ func (this *UserGroupService) UserGroupList() (list []model.UserGroup, err error
userGroup := model.UserGroup{}
list, err = userGroup.List(this.ManagerID, this.Appid)
if err != nil {
return nil,err
return nil, err
}
for index := range list {
userListData, err := util.GzipUnCompress(list[index].UserList)
if err != nil {
return nil,err
return nil, err
}
list[index].UserListData = strings.Split(userListData, ",")
}
return list,err
return list, err
}
@ -59,4 +59,4 @@ func (this *UserGroupService) Options() (list []model.UserGroup, err error) {
userGroup := model.UserGroup{}
list, err = userGroup.GetSelectOptions(this.ManagerID, this.Appid)
return
}
}

View File

@ -41,9 +41,9 @@ func GetDimsCachekey(database, table string) string {
var dimsCacheMap sync.Map
func ClearDimsCacheByTime(clearTime time.Duration){
func ClearDimsCacheByTime(clearTime time.Duration) {
for{
for {
time.Sleep(clearTime)
dimsCacheMap.Range(func(key, value interface{}) bool {
ClearDimsCacheByRedis(key.(string))
@ -54,9 +54,9 @@ func ClearDimsCacheByTime(clearTime time.Duration){
}
}
func ClearDimsCacheByTimeBylocal(clearTime time.Duration){
func ClearDimsCacheByTimeBylocal(clearTime time.Duration) {
for{
for {
time.Sleep(clearTime)
dimsCacheMap.Range(func(key, value interface{}) bool {
ClearDimsCacheByRedis(key.(string))
@ -67,30 +67,30 @@ func ClearDimsCacheByTimeBylocal(clearTime time.Duration){
}
}
func ClearDimsCacheByRedis(key string){
func ClearDimsCacheByRedis(key string) {
redisConn := db.RedisPool.Get()
defer redisConn.Close()
_, err := redisConn.Do("unlink", key)
if err != nil {
_,err = redisConn.Do("del", key)
if err!=nil{
_, err = redisConn.Do("del", key)
if err != nil {
logs.Logger.Error("err", zap.Error(err))
}
}
}
func ClearDimsCacheByKey(key string){
func ClearDimsCacheByKey(key string) {
dimsCacheMap.Delete(key)
}
func GetDims(database, table string, excludedColumns []string, conn *sqlx.DB,onlyRedis bool) (dims []*model2.ColumnWithType, err error) {
func GetDims(database, table string, excludedColumns []string, conn *sqlx.DB, onlyRedis bool) (dims []*model2.ColumnWithType, err error) {
dimsCachekey := GetDimsCachekey(database, table)
if !onlyRedis{
cache,load := dimsCacheMap.Load(dimsCachekey)
if !onlyRedis {
cache, load := dimsCacheMap.Load(dimsCachekey)
if load {
return cache.([]*model2.ColumnWithType),nil
return cache.([]*model2.ColumnWithType), nil
}
}
@ -101,15 +101,15 @@ func GetDims(database, table string, excludedColumns []string, conn *sqlx.DB,onl
dimsBytes, redisErr := redis.Bytes(redisConn.Do("get", dimsCachekey))
if redisErr == nil && len(dimsBytes) != 0 {
dimsCache,err:=util.GzipUnCompressByte(dimsBytes)
if err==nil{
dimsCache, err := util.GzipUnCompressByte(dimsBytes)
if err == nil {
jsonErr := json.Unmarshal(dimsCache, &dims)
if jsonErr == nil {
dimsCacheMap.Store(dimsCachekey,dims)
return dims,err
dimsCacheMap.Store(dimsCachekey, dims)
return dims, err
}
logs.Logger.Error("jsonErr", zap.Error(jsonErr))
}else{
} else {
logs.Logger.Error("GzipUnCompressByte Err", zap.Error(err))
}
@ -120,7 +120,7 @@ func GetDims(database, table string, excludedColumns []string, conn *sqlx.DB,onl
var rs *sql.Rows
if rs, err = conn.Query(fmt.Sprintf(selectSQLTemplate, database, table)); err != nil {
err = errors.Wrapf(err, "")
return dims,err
return dims, err
}
defer rs.Close()
@ -128,7 +128,7 @@ func GetDims(database, table string, excludedColumns []string, conn *sqlx.DB,onl
for rs.Next() {
if err = rs.Scan(&name, &typ, &defaultKind); err != nil {
err = errors.Wrapf(err, "")
return dims,err
return dims, err
}
typ = lowCardinalityRegexp.ReplaceAllString(typ, "$1")
if !util.InstrArr(excludedColumns, name) && defaultKind != "MATERIALIZED" {
@ -138,18 +138,18 @@ func GetDims(database, table string, excludedColumns []string, conn *sqlx.DB,onl
}
if len(dims) == 0 {
err = errors.Wrapf(ErrTblNotExist, "%s.%s", database, table)
return dims,err
return dims, err
}
dimsCacheMap.Store(dimsCachekey,dims)
dimsCacheMap.Store(dimsCachekey, dims)
res, _ := json.Marshal(dims)
s,err:=util.GzipCompressByte(res)
if err!=nil{
return dims,err
s, err := util.GzipCompressByte(res)
if err != nil {
return dims, err
}
_, err = redisConn.Do("SETEX", dimsCachekey, 60*60*6, s)
return dims,err
return dims, err
}
func GetSourceName(name string) (sourcename string) {

View File

@ -19,7 +19,6 @@ type DimMetrics struct {
Fields []*ColumnWithType
}
type ColumnWithType struct {
Name string
Type int

View File

@ -21,7 +21,7 @@ func (p *FastjsonParser) Parse(bs []byte) (metric *FastjsonMetric, err error) {
err = errors.Wrapf(err, "")
return
}
metric = &FastjsonMetric{ value: value}
metric = &FastjsonMetric{value: value}
return
}
@ -113,7 +113,6 @@ func (c *FastjsonMetric) GetDateTime(key string, nullable bool) (val interface{}
return
}
func (c *FastjsonMetric) ParseDateTime(val string) (t time.Time, err error) {
var t2 time.Time

View File

@ -26,9 +26,9 @@ type Parser interface {
// Pool may be used for pooling Parsers for similarly typed JSONs.
type Pool struct {
name string
timeZone *time.Location
pool sync.Pool
name string
timeZone *time.Location
pool sync.Pool
}
// NewParserPool creates a parser pool
@ -89,7 +89,7 @@ func parseInLocation(val string, loc *time.Location) (t time.Time, err error) {
return
}
return t,err
return t, err
}
func UnixFloat(sec float64) (t time.Time) {

View File

@ -79,7 +79,6 @@ func Str2bytes(s string) (b []byte) {
return b
}
// SplitInt 分割字符串并转为INT
func SplitInt(s, sep string) ([]int, error) {
var tmpStr = strings.Split(s, sep)

View File

@ -15,7 +15,7 @@ func FilterMysqlNilErr(err error) bool {
}
func IsMysqlRepeatError(err error) bool {
if err != nil && strings.Contains(err.Error(), "Error 1062") {
if err != nil && strings.Contains(err.Error(), "Error 1062") {
return true
}
return false

View File

@ -30,7 +30,6 @@ func CtxClientIP(ctx *fasthttp.RequestCtx) string {
return ctx.RemoteIP().String()
}
// PostJSON POST请求 BODY为JSON格式 ContentType=application/json
func PostJSON(URL string, v interface{}) ([]byte, error) {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
@ -48,11 +47,11 @@ func PostJSON(URL string, v interface{}) ([]byte, error) {
}
// WriteJSON 写入json字符串
func WriteJSON(ctx *fasthttp.RequestCtx, v interface{}) (error) {
func WriteJSON(ctx *fasthttp.RequestCtx, v interface{}) error {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
b, err := json.Marshal(v)
if err != nil {
return err
return err
}
ctx.Response.Header.Add("Content-Type", "application/json")
ctx.Response.SetBody(b)
@ -63,7 +62,6 @@ var regIPv4 = regexp.MustCompile(
`^(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))$`,
)
func GetToken(ctx *Ctx) (token string) {
return ctx.Get("X-Token")
}

View File

@ -31,4 +31,3 @@ func isSlice(arg interface{}) (val reflect.Value, ok bool) {
return
}

View File

@ -6,21 +6,21 @@ import (
)
type Tutil struct {
startT time.Time
tag string
startT time.Time
tag string
logFloag bool
logger *zap.Logger
logger *zap.Logger
}
func NewTutil(tagP string,logFloag bool,logger *zap.Logger) *Tutil {
return &Tutil{startT: time.Now(), tag: tagP,logFloag:logFloag,logger:logger}
func NewTutil(tagP string, logFloag bool, logger *zap.Logger) *Tutil {
return &Tutil{startT: time.Now(), tag: tagP, logFloag: logFloag, logger: logger}
}
func (this *Tutil) EndT(tagC string, haveNext ...bool) {
if len(haveNext) == 0 {
this.startT = time.Now()
} else {
if this.logFloag{
if this.logFloag {
this.logger.Sugar().Infof("%s(%s):lost time:%v", this.tag, tagC, time.Now().Sub(this.startT).String())
}
}

View File

@ -7,7 +7,7 @@ const (
TimeFormatDay = "20060102"
TimeFormatDay2 = "2006-01-02"
TimeFormatDay3 = "2006/01/02"
TimeFormatDay4 = "2006.01.02_15"
TimeFormatDay4 = "2006.01.02_15"
)
/**
@ -24,8 +24,8 @@ func IsSameDay(oldDay, anotherDay int64) bool {
}
/**字符串->时间对象*/
func Str2Time(formatTimeStr,timeFormat string) time.Time {
func Str2Time(formatTimeStr, timeFormat string) time.Time {
loc, _ := time.LoadLocation("Local")
theTime, _ := time.ParseInLocation(timeFormat, formatTimeStr, loc) //使用模板在对应时区转化为time.time类型
return theTime
}
}

View File

@ -1,19 +1,19 @@
package util
import (
"github.com/sony/sonyflake"
"log"
"strconv"
"sync"
"github.com/sony/sonyflake"
)
var TokenBucket sync.Map
func GetUUid()string{
func GetUUid() string {
flake := sonyflake.NewSonyflake(sonyflake.Settings{})
id, err := flake.NextID()
if err != nil {
log.Println("err", err)
}
return strconv.Itoa(int(id))
}
}

View File

@ -16,9 +16,9 @@ import (
func Init() *App {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
app := New(Config{
AppName: "铸龙-BI",
JSONDecoder:json.Unmarshal,
JSONEncoder:json.Marshal,
AppName: "铸龙-BI",
JSONDecoder: json.Unmarshal,
JSONEncoder: json.Marshal,
})
app.Use(compress.New(compress.Config{
@ -32,7 +32,7 @@ func Init() *App {
app.Use(
cors.New(),
pprof.New(),
)
)
app.Post("/api/gm_user/login", ManagerUserController{}.Login)
routerWebsocket(app)
@ -40,7 +40,7 @@ func Init() *App {
Timer,
JwtMiddleware,
Rbac,
)
)
return runRouterGroupFn(
app,

View File

@ -25,7 +25,7 @@
style="height: 50px;line-height: 50px;display: flex;align-items: center;justify-content: space-between;border-bottom: 1px solid #f0f2f5"
>
<div>
<el-tabs v-model="refreshtActiveName" @tab-click="handleClick">
<el-tabs size="small" v-model="refreshtActiveName" @tab-click="handleClick">
<el-tab-pane label="实时入库" name="realTime2Es" />
<el-tab-pane label="错误数据" name="failData" />
</el-tabs>
@ -72,6 +72,8 @@
<script>
import moment from "_moment@2.29.1@moment";
export default {
name: 'RealTime',
components: {
@ -81,7 +83,10 @@ export default {
},
data() {
return {
date: [],
date: [
moment().startOf('day').format('YYYY-MM-DD HH:mm:ss'),
moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')
],
downloading: false,
timeSecend: 30,
input: '',
@ -91,6 +96,9 @@ export default {
showRealData: true,
searchKw: ''
}
},
mounted() {
},
computed: {
dateFormart() {