- update redis

master
李光春 2 years ago
parent 917a716c90
commit b53a7490ce

@ -6,10 +6,10 @@ require (
github.com/go-redis/redis/v9 v9.0.0-beta.2 github.com/go-redis/redis/v9 v9.0.0-beta.2
github.com/jasonlvhit/gocron v0.0.1 github.com/jasonlvhit/gocron v0.0.1
github.com/robfig/cron/v3 v3.0.1 github.com/robfig/cron/v3 v3.0.1
go.dtapp.net/dorm v1.0.32 go.dtapp.net/dorm v1.0.33
go.dtapp.net/goarray v1.0.1 go.dtapp.net/goarray v1.0.1
go.dtapp.net/goip v1.0.29 go.dtapp.net/goip v1.0.30
go.dtapp.net/golog v1.0.72 go.dtapp.net/golog v1.0.73
go.dtapp.net/gostring v1.0.10 go.dtapp.net/gostring v1.0.10
go.dtapp.net/gotime v1.0.5 go.dtapp.net/gotime v1.0.5
go.dtapp.net/gotrace_id v1.0.6 go.dtapp.net/gotrace_id v1.0.6

@ -503,14 +503,14 @@ github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.dtapp.net/dorm v1.0.32 h1:kMU2on0t8e87qDvXEt8DlaM1DJjLBvUOaIGc5fNsgzY= go.dtapp.net/dorm v1.0.33 h1:QRAVEQ6Uf3WENSOrXytzzH+PjH90JySowd3jbB9PQjw=
go.dtapp.net/dorm v1.0.32/go.mod h1:ocdIcMoJCLGngRNPSAa/1Hq+Mu1JDTxT0hH2QBlL2ik= go.dtapp.net/dorm v1.0.33/go.mod h1:4WNSzrUGs7YIudq1cRZQNkHOlPAbG6thI3mXX1tQcYY=
go.dtapp.net/goarray v1.0.1 h1:cHNHaJ2MFcuJPA1WKU2PM1EUZShS1vQqEH7n6YXsQVU= go.dtapp.net/goarray v1.0.1 h1:cHNHaJ2MFcuJPA1WKU2PM1EUZShS1vQqEH7n6YXsQVU=
go.dtapp.net/goarray v1.0.1/go.mod h1:/MPhlFCAhQyeNV1M0v1PAOOX33Sg705fVjUgMO12IBQ= go.dtapp.net/goarray v1.0.1/go.mod h1:/MPhlFCAhQyeNV1M0v1PAOOX33Sg705fVjUgMO12IBQ=
go.dtapp.net/goip v1.0.29 h1:yM+9m70EytQr8MzewlnQmb6tcNtADcrlt0Wx6Z2FPZQ= go.dtapp.net/goip v1.0.30 h1:/wP2ewSNWLzG2Oh2VsTfQCv/2rw1KKi9XerD4rQaMLM=
go.dtapp.net/goip v1.0.29/go.mod h1:ewEUMDUCcNwSUu6l10tnjcSMTCYfjNgxUFRZ1GDHxEs= go.dtapp.net/goip v1.0.30/go.mod h1:9l8e/slVanziGXfvrUwOMx6028EV/lzN5vVpixmtUYY=
go.dtapp.net/golog v1.0.72 h1:VApNW53mWAejCE+JTCZjnhhje7BQH0rlQYab6+PsL7Q= go.dtapp.net/golog v1.0.73 h1:1j7EU1iIM8b0UTMScxqUHZsgYFjKRy9SG/ArlpdcnfE=
go.dtapp.net/golog v1.0.72/go.mod h1:nZW04srPoTpCr92BydUFoytlxZQBvahfO4n3YZY4Hmw= go.dtapp.net/golog v1.0.73/go.mod h1:I1WfgHWcEikqxjhMdoyH+/VVi/9KmnZy11NnqpsugqY=
go.dtapp.net/gorandom v1.0.1 h1:IWfMClh1ECPvyUjlqD7MwLq4mZdUusD1qAwAdsvEJBs= go.dtapp.net/gorandom v1.0.1 h1:IWfMClh1ECPvyUjlqD7MwLq4mZdUusD1qAwAdsvEJBs=
go.dtapp.net/gorandom v1.0.1/go.mod h1:ZPdgalKpvFV/ATQqR0k4ns/F/IpITAZpx6WkWirr5Y8= go.dtapp.net/gorandom v1.0.1/go.mod h1:ZPdgalKpvFV/ATQqR0k4ns/F/IpITAZpx6WkWirr5Y8=
go.dtapp.net/gorequest v1.0.31 h1:r/OoU5Y00TbJjkQtpvwjsb/pllqO0UQQjFRY1veZYZc= go.dtapp.net/gorequest v1.0.31 h1:r/OoU5Y00TbJjkQtpvwjsb/pllqO0UQQjFRY1veZYZc=

@ -6,7 +6,6 @@ import (
"fmt" "fmt"
"go.dtapp.net/gojobs/jobs_gorm_model" "go.dtapp.net/gojobs/jobs_gorm_model"
"go.dtapp.net/gostring" "go.dtapp.net/gostring"
"go.dtapp.net/gotrace_id"
"math/rand" "math/rand"
"time" "time"
) )
@ -21,7 +20,6 @@ func (c *Client) GetIssueAddress(ctx context.Context, workers []string, v *jobs_
var ( var (
currentIp = "" // 当前Ip currentIp = "" // 当前Ip
appointIpStatus = false // 指定Ip状态 appointIpStatus = false // 指定Ip状态
traceId = gotrace_id.GetTraceIdContext(ctx)
) )
// 赋值ip // 赋值ip
@ -35,7 +33,7 @@ func (c *Client) GetIssueAddress(ctx context.Context, workers []string, v *jobs_
if appointIpStatus == true { if appointIpStatus == true {
// 判断是否指定某ip执行 // 判断是否指定某ip执行
if gostring.Contains(workers[0], currentIp) == true { if gostring.Contains(workers[0], currentIp) == true {
c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetIssueAddress]只有一个客户端在线指定某ip执行", traceId, workers[0], currentIp) c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetIssueAddress]只有一个客户端在线指定某ip执行", workers[0], currentIp)
return workers[0], nil return workers[0], nil
} }
return "", errors.New(fmt.Sprintf("需要执行的[%s]客户端不在线", currentIp)) return "", errors.New(fmt.Sprintf("需要执行的[%s]客户端不在线", currentIp))
@ -47,7 +45,7 @@ func (c *Client) GetIssueAddress(ctx context.Context, workers []string, v *jobs_
if appointIpStatus == true { if appointIpStatus == true {
for wk, wv := range workers { for wk, wv := range workers {
if gostring.Contains(wv, currentIp) == true { if gostring.Contains(wv, currentIp) == true {
c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetIssueAddress]优先处理指定某ip执行", traceId, workers[wk], currentIp) c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetIssueAddress]优先处理指定某ip执行", workers[wk], currentIp)
return workers[wk], nil return workers[wk], nil
} }
} }
@ -58,7 +56,7 @@ func (c *Client) GetIssueAddress(ctx context.Context, workers []string, v *jobs_
if address == "" { if address == "" {
return address, errors.New("获取执行的客户端异常") return address, errors.New("获取执行的客户端异常")
} }
c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetIssueAddress]随机返回一个", traceId, address, currentIp) c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetIssueAddress]随机返回一个", address, currentIp)
return address, nil return address, nil
} }
} }
@ -67,7 +65,7 @@ func (c *Client) GetIssueAddress(ctx context.Context, workers []string, v *jobs_
func (c *Client) GetSubscribeClientList(ctx context.Context) (client []string, err error) { func (c *Client) GetSubscribeClientList(ctx context.Context) (client []string, err error) {
if c.config.debug == true { if c.config.debug == true {
c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetSubscribeClientList] %s\n", c.cache.cornKeyPrefix+"_*") c.zapLog.WithTraceId(ctx).Sugar().Info("[jobs.GetSubscribeClientList]", c.cache.cornKeyPrefix+"_*")
} }
// 查询活跃的channel // 查询活跃的channel

@ -8,4 +8,3 @@
*.txt *.txt
*.text *.text
gomod.sh gomod.sh
/vendor/

@ -1,3 +1,3 @@
package dorm package dorm
const Version = "1.0.32" const Version = "1.0.33"

@ -81,7 +81,7 @@ func NewGormPostgresClient(config *ConfigGormClient) (*GormClient, error) {
// 设置了连接可复用的最大时间 // 设置了连接可复用的最大时间
if c.config.ConnSetConnMaxLifetime == 0 { if c.config.ConnSetConnMaxLifetime == 0 {
sqlDB.SetConnMaxLifetime(time.Second * 600) sqlDB.SetConnMaxLifetime(time.Hour)
} else { } else {
sqlDB.SetConnMaxLifetime(time.Duration(c.config.ConnSetConnMaxLifetime)) sqlDB.SetConnMaxLifetime(time.Duration(c.config.ConnSetConnMaxLifetime))
} }

@ -6,4 +6,3 @@
*.log *.log
*_test.go *_test.go
gomod.sh gomod.sh
/vendor/

@ -1,3 +1,3 @@
package goip package goip
const Version = "1.0.29" const Version = "1.0.30"

BIN
vendor/go.dtapp.net/goip/v4/ip.dat generated vendored

Binary file not shown.

4
vendor/go.dtapp.net/golog/api.go generated vendored

@ -135,10 +135,10 @@ func NewApiClient(config *ApiClientConfig) (*ApiClient, error) {
c.log.mongo = true c.log.mongo = true
// 创建时间序列集合 // 创建时间序列集合
c.mongoCreateCollection() c.mongoCreateCollection(ctx)
// 创建索引 // 创建索引
c.mongoCreateIndexes() c.mongoCreateIndexes(ctx)
} }

@ -6,6 +6,7 @@ import (
"go.dtapp.net/dorm" "go.dtapp.net/dorm"
"go.dtapp.net/goip" "go.dtapp.net/goip"
"go.dtapp.net/gorequest" "go.dtapp.net/gorequest"
"go.dtapp.net/gotime"
"go.dtapp.net/gotrace_id" "go.dtapp.net/gotrace_id"
"go.dtapp.net/gourl" "go.dtapp.net/gourl"
"gorm.io/gorm" "gorm.io/gorm"
@ -135,10 +136,15 @@ func (c *ApiClient) gormRecord(ctx context.Context, postgresqlLog apiPostgresqlL
} }
// GormQuery 查询 // GormQuery 查询
func (c *ApiClient) GormQuery() *gorm.DB { func (c *ApiClient) GormQuery(ctx context.Context) *gorm.DB {
return c.gormClient.Db.Table(c.gormConfig.tableName) return c.gormClient.Db.Table(c.gormConfig.tableName)
} }
// GormDelete 删除
func (c *ApiClient) GormDelete(ctx context.Context, hour int64) error {
return c.gormClient.Db.Table(c.gormConfig.tableName).Where("request_time < ?", gotime.Current().BeforeHour(hour).Format()).Delete(&apiPostgresqlLog{}).Error
}
// GormMiddleware 中间件 // GormMiddleware 中间件
func (c *ApiClient) GormMiddleware(ctx context.Context, request gorequest.Response, sdkVersion string) { func (c *ApiClient) GormMiddleware(ctx context.Context, request gorequest.Response, sdkVersion string) {
data := apiPostgresqlLog{ data := apiPostgresqlLog{

@ -6,6 +6,7 @@ import (
"go.dtapp.net/dorm" "go.dtapp.net/dorm"
"go.dtapp.net/goip" "go.dtapp.net/goip"
"go.dtapp.net/gorequest" "go.dtapp.net/gorequest"
"go.dtapp.net/gotime"
"go.dtapp.net/gotrace_id" "go.dtapp.net/gotrace_id"
"go.dtapp.net/gourl" "go.dtapp.net/gourl"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
@ -72,24 +73,24 @@ func NewApiMongoClient(config *ApiMongoClientConfig) (*ApiClient, error) {
c.log.mongo = true c.log.mongo = true
// 创建时间序列集合 // 创建时间序列集合
c.mongoCreateCollection() c.mongoCreateCollection(ctx)
// 创建索引 // 创建索引
c.mongoCreateIndexes() c.mongoCreateIndexes(ctx)
return c, nil return c, nil
} }
// 创建时间序列集合 // 创建时间序列集合
func (c *ApiClient) mongoCreateCollection() { func (c *ApiClient) mongoCreateCollection(ctx context.Context) {
var commandResult bson.M var commandResult bson.M
commandErr := c.mongoClient.Db.Database(c.mongoConfig.databaseName).RunCommand(context.TODO(), bson.D{{ commandErr := c.mongoClient.Db.Database(c.mongoConfig.databaseName).RunCommand(ctx, bson.D{{
"listCollections", 1, "listCollections", 1,
}}).Decode(&commandResult) }}).Decode(&commandResult)
if commandErr != nil { if commandErr != nil {
c.zapLog.WithLogger().Sugar().Errorf("检查时间序列集合:%s", commandErr) c.zapLog.WithLogger().Sugar().Errorf("检查时间序列集合:%s", commandErr)
} else { } else {
err := c.mongoClient.Db.Database(c.mongoConfig.databaseName).CreateCollection(context.TODO(), c.mongoConfig.collectionName, options.CreateCollection().SetTimeSeriesOptions(options.TimeSeries().SetTimeField("request_time"))) err := c.mongoClient.Db.Database(c.mongoConfig.databaseName).CreateCollection(ctx, c.mongoConfig.collectionName, options.CreateCollection().SetTimeSeriesOptions(options.TimeSeries().SetTimeField("log_time")))
if err != nil { if err != nil {
c.zapLog.WithLogger().Sugar().Errorf("创建时间序列集合:%s", err) c.zapLog.WithLogger().Sugar().Errorf("创建时间序列集合:%s", err)
} }
@ -97,41 +98,44 @@ func (c *ApiClient) mongoCreateCollection() {
} }
// 创建索引 // 创建索引
func (c *ApiClient) mongoCreateIndexes() { func (c *ApiClient) mongoCreateIndexes(ctx context.Context) {
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"trace_id", 1}, {"trace_id", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"log_time", -1},
}}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"request_time", -1}, {"request_time", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"request_method", 1}, {"request_method", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"response_status_code", 1}, {"response_status_code", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"response_time", -1}, {"response_time", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"system_host_name", 1}, {"system_host_name", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"system_inside_ip", 1}, {"system_inside_ip", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"system_os", -1}, {"system_os", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"system_arch", -1}, {"system_arch", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"system_cpu_quantity", 1}, {"system_cpu_quantity", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"go_version", -1}, {"go_version", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{Keys: bson.D{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{Keys: bson.D{
{"sdk_version", -1}, {"sdk_version", -1},
}})) }}))
} }
@ -139,8 +143,9 @@ func (c *ApiClient) mongoCreateIndexes() {
// 模型结构体 // 模型结构体
type apiMongolLog struct { type apiMongolLog struct {
LogId primitive.ObjectID `json:"log_id,omitempty" bson:"_id,omitempty"` //【记录】编号 LogId primitive.ObjectID `json:"log_id,omitempty" bson:"_id,omitempty"` //【记录】编号
TraceId string `json:"trace_id,omitempty" bson:"trace_id,omitempty"` //【系统】跟踪编号 LogTime primitive.DateTime `json:"log_time,omitempty" bson:"log_time,omitempty"` //【记录】时间
RequestTime primitive.DateTime `json:"request_time,omitempty" bson:"request_time,omitempty"` //【请求】时间 TraceId string `json:"trace_id,omitempty" bson:"trace_id,omitempty"` //【记录】跟踪编号
RequestTime dorm.BsonTime `json:"request_time,omitempty" bson:"request_time,omitempty"` //【请求】时间
RequestUri string `json:"request_uri,omitempty" bson:"request_uri,omitempty"` //【请求】链接 RequestUri string `json:"request_uri,omitempty" bson:"request_uri,omitempty"` //【请求】链接
RequestUrl string `json:"request_url,omitempty" bson:"request_url,omitempty"` //【请求】链接 RequestUrl string `json:"request_url,omitempty" bson:"request_url,omitempty"` //【请求】链接
RequestApi string `json:"request_api,omitempty" bson:"request_api,omitempty"` //【请求】接口 RequestApi string `json:"request_api,omitempty" bson:"request_api,omitempty"` //【请求】接口
@ -152,7 +157,7 @@ type apiMongolLog struct {
ResponseStatusCode int `json:"response_status_code,omitempty" bson:"response_status_code,omitempty"` //【返回】状态码 ResponseStatusCode int `json:"response_status_code,omitempty" bson:"response_status_code,omitempty"` //【返回】状态码
ResponseBody interface{} `json:"response_body,omitempty" bson:"response_body,omitempty"` //【返回】内容 ResponseBody interface{} `json:"response_body,omitempty" bson:"response_body,omitempty"` //【返回】内容
ResponseContentLength int64 `json:"response_content_length,omitempty" bson:"response_content_length,omitempty"` //【返回】大小 ResponseContentLength int64 `json:"response_content_length,omitempty" bson:"response_content_length,omitempty"` //【返回】大小
ResponseTime primitive.DateTime `json:"response_time,omitempty" bson:"response_time,omitempty"` //【返回】时间 ResponseTime dorm.BsonTime `json:"response_time,omitempty" bson:"response_time,omitempty"` //【返回】时间
SystemHostName string `json:"system_host_name,omitempty" bson:"system_host_name,omitempty"` //【系统】主机名 SystemHostName string `json:"system_host_name,omitempty" bson:"system_host_name,omitempty"` //【系统】主机名
SystemInsideIp string `json:"system_inside_ip,omitempty" bson:"system_inside_ip,omitempty"` //【系统】内网ip SystemInsideIp string `json:"system_inside_ip,omitempty" bson:"system_inside_ip,omitempty"` //【系统】内网ip
SystemOs string `json:"system_os,omitempty" bson:"system_os,omitempty"` //【系统】系统类型 SystemOs string `json:"system_os,omitempty" bson:"system_os,omitempty"` //【系统】系统类型
@ -165,19 +170,15 @@ type apiMongolLog struct {
// 记录日志 // 记录日志
func (c *ApiClient) mongoRecord(ctx context.Context, mongoLog apiMongolLog) (err error) { func (c *ApiClient) mongoRecord(ctx context.Context, mongoLog apiMongolLog) (err error) {
mongoLog.SystemHostName = c.mongoConfig.hostname mongoLog.SystemHostName = c.mongoConfig.hostname //【系统】主机名
mongoLog.SystemInsideIp = c.mongoConfig.insideIp mongoLog.SystemInsideIp = c.mongoConfig.insideIp //【系统】内网ip
mongoLog.GoVersion = c.mongoConfig.goVersion mongoLog.GoVersion = c.mongoConfig.goVersion //【程序】Go版本
mongoLog.TraceId = gotrace_id.GetTraceIdContext(ctx) //【记录】跟踪编号
mongoLog.TraceId = gotrace_id.GetTraceIdContext(ctx) mongoLog.RequestIp = c.currentIp //【请求】请求Ip
mongoLog.SystemOs = c.config.os //【系统】系统类型
mongoLog.RequestIp = c.currentIp mongoLog.SystemArch = c.config.arch //【系统】系统架构
mongoLog.SystemCpuQuantity = c.config.maxProCs //【系统】CPU核数
mongoLog.SystemOs = c.config.os mongoLog.LogId = primitive.NewObjectID() //【记录】编号
mongoLog.SystemArch = c.config.arch
mongoLog.SystemCpuQuantity = c.config.maxProCs
mongoLog.LogId = primitive.NewObjectID()
_, err = c.mongoClient.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).InsertOne(mongoLog) _, err = c.mongoClient.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).InsertOne(mongoLog)
if err != nil { if err != nil {
@ -188,25 +189,32 @@ func (c *ApiClient) mongoRecord(ctx context.Context, mongoLog apiMongolLog) (err
} }
// MongoQuery 查询 // MongoQuery 查询
func (c *ApiClient) MongoQuery() *dorm.MongoClient { func (c *ApiClient) MongoQuery(ctx context.Context) *mongo.Collection {
return c.mongoClient.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName) return c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName)
}
// MongoDelete 删除
func (c *ApiClient) MongoDelete(ctx context.Context, hour int64) (*mongo.DeleteResult, error) {
filter := bson.D{{"log_time", bson.D{{"$lt", primitive.NewDateTimeFromTime(gotime.Current().BeforeHour(hour).Time)}}}}
return c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).DeleteMany(ctx, filter)
} }
// MongoMiddleware 中间件 // MongoMiddleware 中间件
func (c *ApiClient) MongoMiddleware(ctx context.Context, request gorequest.Response, sdkVersion string) { func (c *ApiClient) MongoMiddleware(ctx context.Context, request gorequest.Response, sdkVersion string) {
data := apiMongolLog{ data := apiMongolLog{
RequestTime: primitive.NewDateTimeFromTime(request.RequestTime), //【请求】时间 LogTime: primitive.NewDateTimeFromTime(request.RequestTime), //【记录】时间
RequestUri: request.RequestUri, //【请求】链接 RequestTime: dorm.BsonTime(request.RequestTime), //【请求】时间
RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 RequestUri: request.RequestUri, //【请求】链接
RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口 RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接
RequestMethod: request.RequestMethod, //【请求】方式 RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口
RequestParams: request.RequestParams, //【请求】参数 RequestMethod: request.RequestMethod, //【请求】方式
RequestHeader: request.RequestHeader, //【请求】头部 RequestParams: request.RequestParams, //【请求】参数
ResponseHeader: request.ResponseHeader, //【返回】头部 RequestHeader: request.RequestHeader, //【请求】头部
ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 ResponseHeader: request.ResponseHeader, //【返回】头部
ResponseContentLength: request.ResponseContentLength, //【返回】大小 ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码
ResponseTime: primitive.NewDateTimeFromTime(request.ResponseTime), //【返回】时间 ResponseContentLength: request.ResponseContentLength, //【返回】大小
SdkVersion: sdkVersion, //【程序】Sdk版本 ResponseTime: dorm.BsonTime(request.ResponseTime), //【返回】时间
SdkVersion: sdkVersion, //【程序】Sdk版本
} }
if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" { if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" {
c.zapLog.WithTraceId(ctx).Sugar().Infof("[golog.api.MongoMiddleware.type]%s %s", data.RequestUri, request.ResponseHeader.Get("Content-Type")) c.zapLog.WithTraceId(ctx).Sugar().Infof("[golog.api.MongoMiddleware.type]%s %s", data.RequestUri, request.ResponseHeader.Get("Content-Type"))
@ -233,18 +241,19 @@ func (c *ApiClient) MongoMiddleware(ctx context.Context, request gorequest.Respo
// MongoMiddlewareXml 中间件 // MongoMiddlewareXml 中间件
func (c *ApiClient) MongoMiddlewareXml(ctx context.Context, request gorequest.Response, sdkVersion string) { func (c *ApiClient) MongoMiddlewareXml(ctx context.Context, request gorequest.Response, sdkVersion string) {
data := apiMongolLog{ data := apiMongolLog{
RequestTime: primitive.NewDateTimeFromTime(request.RequestTime), //【请求】时间 LogTime: primitive.NewDateTimeFromTime(request.RequestTime), //【记录】时间
RequestUri: request.RequestUri, //【请求】链接 RequestTime: dorm.BsonTime(request.RequestTime), //【请求】时间
RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 RequestUri: request.RequestUri, //【请求】链接
RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口 RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接
RequestMethod: request.RequestMethod, //【请求】方式 RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口
RequestParams: request.RequestParams, //【请求】参数 RequestMethod: request.RequestMethod, //【请求】方式
RequestHeader: request.RequestHeader, //【请求】头部 RequestParams: request.RequestParams, //【请求】参数
ResponseHeader: request.ResponseHeader, //【返回】头部 RequestHeader: request.RequestHeader, //【请求】头部
ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 ResponseHeader: request.ResponseHeader, //【返回】头部
ResponseContentLength: request.ResponseContentLength, //【返回】大小 ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码
ResponseTime: primitive.NewDateTimeFromTime(request.ResponseTime), //【返回】时间 ResponseContentLength: request.ResponseContentLength, //【返回】大小
SdkVersion: sdkVersion, //【程序】Sdk版本 ResponseTime: dorm.BsonTime(request.ResponseTime), //【返回】时间
SdkVersion: sdkVersion, //【程序】Sdk版本
} }
if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" { if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" {
c.zapLog.WithTraceId(ctx).Sugar().Infof("[golog.api.MongoMiddlewareXml.type]%s %s", data.RequestUri, request.ResponseHeader.Get("Content-Type")) c.zapLog.WithTraceId(ctx).Sugar().Infof("[golog.api.MongoMiddlewareXml.type]%s %s", data.RequestUri, request.ResponseHeader.Get("Content-Type"))
@ -271,18 +280,19 @@ func (c *ApiClient) MongoMiddlewareXml(ctx context.Context, request gorequest.Re
// MongoMiddlewareCustom 中间件 // MongoMiddlewareCustom 中间件
func (c *ApiClient) MongoMiddlewareCustom(ctx context.Context, api string, request gorequest.Response, sdkVersion string) { func (c *ApiClient) MongoMiddlewareCustom(ctx context.Context, api string, request gorequest.Response, sdkVersion string) {
data := apiMongolLog{ data := apiMongolLog{
RequestTime: primitive.NewDateTimeFromTime(request.RequestTime), //【请求】时间 LogTime: primitive.NewDateTimeFromTime(request.RequestTime), //【记录】时间
RequestUri: request.RequestUri, //【请求】链接 RequestTime: dorm.BsonTime(request.RequestTime), //【请求】时间
RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 RequestUri: request.RequestUri, //【请求】链接
RequestApi: api, //【请求】接口 RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接
RequestMethod: request.RequestMethod, //【请求】方式 RequestApi: api, //【请求】接口
RequestParams: request.RequestParams, //【请求】参数 RequestMethod: request.RequestMethod, //【请求】方式
RequestHeader: request.RequestHeader, //【请求】头部 RequestParams: request.RequestParams, //【请求】参数
ResponseHeader: request.ResponseHeader, //【返回】头部 RequestHeader: request.RequestHeader, //【请求】头部
ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 ResponseHeader: request.ResponseHeader, //【返回】头部
ResponseContentLength: request.ResponseContentLength, //【返回】大小 ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码
ResponseTime: primitive.NewDateTimeFromTime(request.ResponseTime), //【返回】时间 ResponseContentLength: request.ResponseContentLength, //【返回】大小
SdkVersion: sdkVersion, //【程序】Sdk版本 ResponseTime: dorm.BsonTime(request.ResponseTime), //【返回】时间
SdkVersion: sdkVersion, //【程序】Sdk版本
} }
if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" { if request.ResponseHeader.Get("Content-Type") == "image/jpeg" || request.ResponseHeader.Get("Content-Type") == "image/png" || request.ResponseHeader.Get("Content-Type") == "image/jpg" {
c.zapLog.WithTraceId(ctx).Sugar().Infof("[golog.api.MongoMiddlewareCustom.type]%s %s", data.RequestUri, request.ResponseHeader.Get("Content-Type")) c.zapLog.WithTraceId(ctx).Sugar().Infof("[golog.api.MongoMiddlewareCustom.type]%s %s", data.RequestUri, request.ResponseHeader.Get("Content-Type"))

@ -1,5 +1,5 @@
package golog package golog
const ( const (
Version = "1.0.72" Version = "1.0.73"
) )

4
vendor/go.dtapp.net/golog/gin.go generated vendored

@ -140,10 +140,10 @@ func NewGinClient(config *GinClientConfig) (*GinClient, error) {
c.log.mongo = true c.log.mongo = true
// 创建时间序列集合 // 创建时间序列集合
c.mongoCreateCollection() c.mongoCreateCollection(ctx)
// 创建索引 // 创建索引
c.mongoCreateIndexes() c.mongoCreateIndexes(ctx)
} }

@ -248,10 +248,15 @@ func (c *GinClient) gormRecordXml(ginCtx *gin.Context, traceId string, requestTi
} }
// GormQuery 查询 // GormQuery 查询
func (c *GinClient) GormQuery() *gorm.DB { func (c *GinClient) GormQuery(ctx context.Context) *gorm.DB {
return c.gormClient.Db.Table(c.gormConfig.tableName) return c.gormClient.Db.Table(c.gormConfig.tableName)
} }
// GormDelete 删除
func (c *GinClient) GormDelete(ctx context.Context, hour int64) error {
return c.gormClient.Db.Table(c.gormConfig.tableName).Where("request_time < ?", gotime.Current().BeforeHour(hour).Format()).Delete(&ginPostgresqlLog{}).Error
}
// GormMiddleware 中间件 // GormMiddleware 中间件
func (c *GinClient) GormMiddleware() gin.HandlerFunc { func (c *GinClient) GormMiddleware() gin.HandlerFunc {
return func(ginCtx *gin.Context) { return func(ginCtx *gin.Context) {

@ -75,24 +75,24 @@ func NewGinMongoClient(config *GinMongoClientConfig) (*GinClient, error) {
c.log.mongo = true c.log.mongo = true
// 创建时间序列集合 // 创建时间序列集合
c.mongoCreateCollection() c.mongoCreateCollection(ctx)
// 创建索引 // 创建索引
c.mongoCreateIndexes() c.mongoCreateIndexes(ctx)
return c, nil return c, nil
} }
// 创建时间序列集合 // 创建时间序列集合
func (c *GinClient) mongoCreateCollection() { func (c *GinClient) mongoCreateCollection(ctx context.Context) {
var commandResult bson.M var commandResult bson.M
commandErr := c.mongoClient.Db.Database(c.mongoConfig.databaseName).RunCommand(context.TODO(), bson.D{{ commandErr := c.mongoClient.Db.Database(c.mongoConfig.databaseName).RunCommand(ctx, bson.D{{
"listCollections", 1, "listCollections", 1,
}}).Decode(&commandResult) }}).Decode(&commandResult)
if commandErr != nil { if commandErr != nil {
c.zapLog.WithLogger().Sugar().Error("检查时间序列集合:", commandErr) c.zapLog.WithLogger().Sugar().Error("检查时间序列集合:", commandErr)
} else { } else {
err := c.mongoClient.Db.Database(c.mongoConfig.databaseName).CreateCollection(context.TODO(), c.mongoConfig.collectionName, options.CreateCollection().SetTimeSeriesOptions(options.TimeSeries().SetTimeField("request_time"))) err := c.mongoClient.Db.Database(c.mongoConfig.databaseName).CreateCollection(ctx, c.mongoConfig.collectionName, options.CreateCollection().SetTimeSeriesOptions(options.TimeSeries().SetTimeField("log_time")))
if err != nil { if err != nil {
c.zapLog.WithLogger().Sugar().Error("创建时间序列集合:", err) c.zapLog.WithLogger().Sugar().Error("创建时间序列集合:", err)
} }
@ -100,80 +100,84 @@ func (c *GinClient) mongoCreateCollection() {
} }
// 创建索引 // 创建索引
func (c *GinClient) mongoCreateIndexes() { func (c *GinClient) mongoCreateIndexes(ctx context.Context) {
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"trace_id", 1}, {"trace_id", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{
{"log_time", -1},
}}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_time", -1}, {"request_time", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_method", 1}, {"request_method", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_proto", 1}, {"request_proto", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_ip", 1}, {"request_ip", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_ip_country", 1}, {"request_ip_country", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_ip_region", 1}, {"request_ip_region", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_ip_province", 1}, {"request_ip_province", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_ip_city", 1}, {"request_ip_city", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"request_ip_isp", 1}, {"request_ip_isp", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"response_time", -1}, {"response_time", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"response_code", 1}, {"response_code", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"system_host_name", 1}, {"system_host_name", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"system_inside_ip", 1}, {"system_inside_ip", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"system_os", -1}, {"system_os", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"system_arch", -1}, {"system_arch", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"system_cpu_quantity", 1}, {"system_cpu_quantity", 1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"go_version", -1}, {"go_version", -1},
}})) }}))
c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(context.TODO(), mongo.IndexModel{ c.zapLog.WithLogger().Sugar().Infof(c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{ Keys: bson.D{
{"sdk_version", -1}, {"sdk_version", -1},
}})) }}))
@ -182,8 +186,9 @@ func (c *GinClient) mongoCreateIndexes() {
// 模型结构体 // 模型结构体
type ginMongoLog struct { type ginMongoLog struct {
LogId primitive.ObjectID `json:"log_id,omitempty" bson:"_id,omitempty"` //【记录】编号 LogId primitive.ObjectID `json:"log_id,omitempty" bson:"_id,omitempty"` //【记录】编号
TraceId string `json:"trace_id,omitempty" bson:"trace_id,omitempty"` //【系统】跟踪编号 LogTime primitive.DateTime `json:"log_time,omitempty" bson:"log_time,omitempty"` //【记录】时间
RequestTime primitive.DateTime `json:"request_time,omitempty" bson:"request_time,omitempty"` //【请求】时间 TraceId string `json:"trace_id,omitempty" bson:"trace_id,omitempty"` //【记录】跟踪编号
RequestTime dorm.BsonTime `json:"request_time,omitempty" bson:"request_time,omitempty"` //【请求】时间
RequestUri string `json:"request_uri,omitempty" bson:"request_uri,omitempty"` //【请求】请求链接 域名+路径+参数 RequestUri string `json:"request_uri,omitempty" bson:"request_uri,omitempty"` //【请求】请求链接 域名+路径+参数
RequestUrl string `json:"request_url,omitempty" bson:"request_url,omitempty"` //【请求】请求链接 域名+路径 RequestUrl string `json:"request_url,omitempty" bson:"request_url,omitempty"` //【请求】请求链接 域名+路径
RequestApi string `json:"request_api,omitempty" bson:"request_api,omitempty"` //【请求】请求接口 路径 RequestApi string `json:"request_api,omitempty" bson:"request_api,omitempty"` //【请求】请求接口 路径
@ -200,7 +205,7 @@ type ginMongoLog struct {
RequestIpCity string `json:"request_ip_city,omitempty" bson:"request_ip_city,omitempty"` //【请求】请求客户端城市 RequestIpCity string `json:"request_ip_city,omitempty" bson:"request_ip_city,omitempty"` //【请求】请求客户端城市
RequestIpIsp string `json:"request_ip_isp,omitempty" bson:"request_ip_isp,omitempty"` //【请求】请求客户端运营商 RequestIpIsp string `json:"request_ip_isp,omitempty" bson:"request_ip_isp,omitempty"` //【请求】请求客户端运营商
RequestHeader interface{} `json:"request_header,omitempty" bson:"request_header,omitempty"` //【请求】请求头 RequestHeader interface{} `json:"request_header,omitempty" bson:"request_header,omitempty"` //【请求】请求头
ResponseTime primitive.DateTime `json:"response_time,omitempty" bson:"response_time,omitempty"` //【返回】时间 ResponseTime dorm.BsonTime `json:"response_time,omitempty" bson:"response_time,omitempty"` //【返回】时间
ResponseCode int `json:"response_code,omitempty" bson:"response_code,omitempty"` //【返回】状态码 ResponseCode int `json:"response_code,omitempty" bson:"response_code,omitempty"` //【返回】状态码
ResponseMsg string `json:"response_msg,omitempty" bson:"response_msg,omitempty"` //【返回】描述 ResponseMsg string `json:"response_msg,omitempty" bson:"response_msg,omitempty"` //【返回】描述
ResponseData interface{} `json:"response_data,omitempty" bson:"response_data,omitempty"` //【返回】数据 ResponseData interface{} `json:"response_data,omitempty" bson:"response_data,omitempty"` //【返回】数据
@ -217,17 +222,14 @@ type ginMongoLog struct {
// 记录日志 // 记录日志
func (c *GinClient) mongoRecord(mongoLog ginMongoLog) (err error) { func (c *GinClient) mongoRecord(mongoLog ginMongoLog) (err error) {
mongoLog.SystemHostName = c.mongoConfig.hostname mongoLog.SystemHostName = c.mongoConfig.hostname //【系统】主机名
mongoLog.SystemInsideIp = c.mongoConfig.insideIp mongoLog.SystemInsideIp = c.mongoConfig.insideIp //【系统】内网ip
mongoLog.GoVersion = c.mongoConfig.goVersion mongoLog.GoVersion = c.mongoConfig.goVersion //【程序】Go版本
mongoLog.SdkVersion = Version //【程序】Sdk版本
mongoLog.SdkVersion = Version mongoLog.SystemOs = c.config.os //【系统】系统类型
mongoLog.SystemArch = c.config.arch //【系统】系统架构
mongoLog.SystemOs = c.config.os mongoLog.SystemCpuQuantity = c.config.maxProCs //【系统】CPU核数
mongoLog.SystemArch = c.config.arch mongoLog.LogId = primitive.NewObjectID() //【记录】编号
mongoLog.SystemCpuQuantity = c.config.maxProCs
mongoLog.LogId = primitive.NewObjectID()
_, err = c.mongoClient.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).InsertOne(mongoLog) _, err = c.mongoClient.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).InsertOne(mongoLog)
if err != nil { if err != nil {
@ -244,8 +246,9 @@ func (c *GinClient) mongoRecordJson(ginCtx *gin.Context, traceId string, request
} }
data := ginMongoLog{ data := ginMongoLog{
TraceId: traceId, //【系统】跟踪编号 TraceId: traceId, //【记录】跟踪编号
RequestTime: primitive.NewDateTimeFromTime(requestTime), //【请求】时间 LogTime: primitive.NewDateTimeFromTime(requestTime), //【记录】时间
RequestTime: dorm.BsonTime(requestTime), //【请求】时间
RequestUrl: ginCtx.Request.RequestURI, //【请求】请求链接 RequestUrl: ginCtx.Request.RequestURI, //【请求】请求链接
RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】请求接口 RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】请求接口
RequestMethod: ginCtx.Request.Method, //【请求】请求方式 RequestMethod: ginCtx.Request.Method, //【请求】请求方式
@ -260,7 +263,7 @@ func (c *GinClient) mongoRecordJson(ginCtx *gin.Context, traceId string, request
RequestIpCity: requestClientIpCity, //【请求】请求客户端城市 RequestIpCity: requestClientIpCity, //【请求】请求客户端城市
RequestIpIsp: requestClientIpIsp, //【请求】请求客户端运营商 RequestIpIsp: requestClientIpIsp, //【请求】请求客户端运营商
RequestHeader: ginCtx.Request.Header, //【请求】请求头 RequestHeader: ginCtx.Request.Header, //【请求】请求头
ResponseTime: primitive.NewDateTimeFromTime(gotime.Current().Time), //【返回】时间 ResponseTime: dorm.BsonTime(gotime.Current().Time), //【返回】时间
ResponseCode: responseCode, //【返回】状态码 ResponseCode: responseCode, //【返回】状态码
ResponseData: c.jsonUnmarshal(responseBody), //【返回】数据 ResponseData: c.jsonUnmarshal(responseBody), //【返回】数据
CostTime: endTime - startTime, //【系统】花费时间 CostTime: endTime - startTime, //【系统】花费时间
@ -296,8 +299,9 @@ func (c *GinClient) mongoRecordXml(ginCtx *gin.Context, traceId string, requestT
} }
data := ginMongoLog{ data := ginMongoLog{
TraceId: traceId, //【系统】跟踪编号 TraceId: traceId, //【记录】跟踪编号
RequestTime: primitive.NewDateTimeFromTime(requestTime), //【请求】时间 LogTime: primitive.NewDateTimeFromTime(requestTime), //【记录】时间
RequestTime: dorm.BsonTime(requestTime), //【请求】时间
RequestUrl: ginCtx.Request.RequestURI, //【请求】请求链接 RequestUrl: ginCtx.Request.RequestURI, //【请求】请求链接
RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】请求接口 RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】请求接口
RequestMethod: ginCtx.Request.Method, //【请求】请求方式 RequestMethod: ginCtx.Request.Method, //【请求】请求方式
@ -312,7 +316,7 @@ func (c *GinClient) mongoRecordXml(ginCtx *gin.Context, traceId string, requestT
RequestIpCity: requestClientIpCity, //【请求】请求客户端城市 RequestIpCity: requestClientIpCity, //【请求】请求客户端城市
RequestIpIsp: requestClientIpIsp, //【请求】请求客户端运营商 RequestIpIsp: requestClientIpIsp, //【请求】请求客户端运营商
RequestHeader: ginCtx.Request.Header, //【请求】请求头 RequestHeader: ginCtx.Request.Header, //【请求】请求头
ResponseTime: primitive.NewDateTimeFromTime(gotime.Current().Time), //【返回】时间 ResponseTime: dorm.BsonTime(gotime.Current().Time), //【返回】时间
ResponseCode: responseCode, //【返回】状态码 ResponseCode: responseCode, //【返回】状态码
ResponseData: c.jsonUnmarshal(responseBody), //【返回】数据 ResponseData: c.jsonUnmarshal(responseBody), //【返回】数据
CostTime: endTime - startTime, //【系统】花费时间 CostTime: endTime - startTime, //【系统】花费时间
@ -342,8 +346,14 @@ func (c *GinClient) mongoRecordXml(ginCtx *gin.Context, traceId string, requestT
} }
// MongoQuery 查询 // MongoQuery 查询
func (c *GinClient) MongoQuery() *dorm.MongoClient { func (c *GinClient) MongoQuery(ctx context.Context) *mongo.Collection {
return c.mongoClient.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName) return c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName)
}
// MongoDelete 删除
func (c *GinClient) MongoDelete(ctx context.Context, hour int64) (*mongo.DeleteResult, error) {
filter := bson.D{{"log_time", bson.D{{"$lt", primitive.NewDateTimeFromTime(gotime.Current().BeforeHour(hour).Time)}}}}
return c.mongoClient.Db.Database(c.mongoConfig.databaseName).Collection(c.mongoConfig.collectionName).DeleteMany(ctx, filter)
} }
// MongoMiddleware 中间件 // MongoMiddleware 中间件

@ -248,19 +248,19 @@ github.com/xdg-go/stringprep
# github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a # github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a
## explicit; go 1.12 ## explicit; go 1.12
github.com/youmark/pkcs8 github.com/youmark/pkcs8
# go.dtapp.net/dorm v1.0.32 # go.dtapp.net/dorm v1.0.33
## explicit; go 1.19 ## explicit; go 1.19
go.dtapp.net/dorm go.dtapp.net/dorm
# go.dtapp.net/goarray v1.0.1 # go.dtapp.net/goarray v1.0.1
## explicit; go 1.18 ## explicit; go 1.18
go.dtapp.net/goarray go.dtapp.net/goarray
# go.dtapp.net/goip v1.0.29 # go.dtapp.net/goip v1.0.30
## explicit; go 1.19 ## explicit; go 1.19
go.dtapp.net/goip go.dtapp.net/goip
go.dtapp.net/goip/ip2region go.dtapp.net/goip/ip2region
go.dtapp.net/goip/v4 go.dtapp.net/goip/v4
go.dtapp.net/goip/v6 go.dtapp.net/goip/v6
# go.dtapp.net/golog v1.0.72 # go.dtapp.net/golog v1.0.73
## explicit; go 1.19 ## explicit; go 1.19
go.dtapp.net/golog go.dtapp.net/golog
# go.dtapp.net/gorandom v1.0.1 # go.dtapp.net/gorandom v1.0.1

Loading…
Cancel
Save