12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package mgodb
- import (
- "context"
- "eta_gn/eta_api/utils"
- "github.com/qiniu/qmgo"
- "github.com/qiniu/qmgo/options"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/event"
- mgoptions "go.mongodb.org/mongo-driver/mongo/options"
- "sync"
- )
- var (
- ConnectTimeoutMS = int64(3000)
- SocketTimeoutMS = int64(500000)
- MaxPoolSize = uint64(50)
- MinPoolSize = uint64(0)
- )
- type MgoConfig struct {
- Host string `json:"host"`
- Url string `json:"url"`
- Port string `json:"port"`
- Username string `json:"username"`
- Password string `json:"password"`
- AuthSource string `json:"authSource"`
- AuthMechanism string `json:"auth_mechanism"`
- Database string `json:"database"`
- }
- func MgoNewClient(mgoConfig MgoConfig) *qmgo.Client {
- startedCommands := sync.Map{} // map[int64]bson.Raw
- cmdMonitor := &event.CommandMonitor{
- Started: func(_ context.Context, evt *event.CommandStartedEvent) {
- startedCommands.Store(evt.RequestID, evt.Command)
- },
- Succeeded: func(_ context.Context, evt *event.CommandSucceededEvent) {
- var commands bson.Raw
- v, ok := startedCommands.Load(evt.RequestID)
- if ok {
- commands = v.(bson.Raw)
- }
- utils.MongoLog.Info("\n【MongoDB】[%.3fms] [%v] \n", float64(evt.Duration)/1e6, commands)
- },
- Failed: func(_ context.Context, evt *event.CommandFailedEvent) {
- var commands bson.Raw
- v, ok := startedCommands.Load(evt.RequestID)
- if ok {
- commands = v.(bson.Raw)
- }
- utils.MongoLog.Info("\n【MongoDB】[%.3fms] [%v] \n %v \n", float64(evt.Duration)/1e6, commands, evt.Failure)
- },
- }
- ops := options.ClientOptions{ClientOptions: &mgoptions.ClientOptions{}}
- ops.SetMonitor(cmdMonitor)
- ctx := context.Background()
- client, err := qmgo.NewClient(ctx, &qmgo.Config{
- Uri: mgoConfig.Url,
- Auth: &qmgo.Credential{
- AuthMechanism: mgoConfig.AuthMechanism,
- AuthSource: mgoConfig.AuthSource,
- Username: mgoConfig.Username,
- Password: mgoConfig.Password,
- },
- Database: mgoConfig.Database,
- ConnectTimeoutMS: &ConnectTimeoutMS,
- SocketTimeoutMS: &SocketTimeoutMS,
- MaxPoolSize: &MaxPoolSize,
- MinPoolSize: &MinPoolSize,
- }, ops)
- if err != nil {
- panic("MongoDB连接异常:" + err.Error())
- }
- return client
- }
- func MgoGetColl(collName string) (cli *qmgo.QmgoClient, err error) {
- ctx := context.Background()
- config := &qmgo.Config{
- Coll: collName,
- ConnectTimeoutMS: &ConnectTimeoutMS,
- SocketTimeoutMS: &SocketTimeoutMS,
- MaxPoolSize: &MaxPoolSize,
- MinPoolSize: &MinPoolSize,
- }
- cli, err = qmgo.Open(ctx, config)
- return
- }
|