mgo_config.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package mgodb
  2. import (
  3. "context"
  4. "eta_gn/eta_api/utils"
  5. "github.com/qiniu/qmgo"
  6. "github.com/qiniu/qmgo/options"
  7. "go.mongodb.org/mongo-driver/bson"
  8. "go.mongodb.org/mongo-driver/event"
  9. mgoptions "go.mongodb.org/mongo-driver/mongo/options"
  10. "sync"
  11. )
  12. var (
  13. ConnectTimeoutMS = int64(3000)
  14. SocketTimeoutMS = int64(500000)
  15. MaxPoolSize = uint64(50)
  16. MinPoolSize = uint64(0)
  17. )
  18. type MgoConfig struct {
  19. Host string `json:"host"`
  20. Url string `json:"url"`
  21. Port string `json:"port"`
  22. Username string `json:"username"`
  23. Password string `json:"password"`
  24. AuthSource string `json:"authSource"`
  25. AuthMechanism string `json:"auth_mechanism"`
  26. Database string `json:"database"`
  27. }
  28. func MgoNewClient(mgoConfig MgoConfig) *qmgo.Client {
  29. startedCommands := sync.Map{} // map[int64]bson.Raw
  30. cmdMonitor := &event.CommandMonitor{
  31. Started: func(_ context.Context, evt *event.CommandStartedEvent) {
  32. startedCommands.Store(evt.RequestID, evt.Command)
  33. },
  34. Succeeded: func(_ context.Context, evt *event.CommandSucceededEvent) {
  35. var commands bson.Raw
  36. v, ok := startedCommands.Load(evt.RequestID)
  37. if ok {
  38. commands = v.(bson.Raw)
  39. }
  40. utils.MongoLog.Info("\n【MongoDB】[%.3fms] [%v] \n", float64(evt.Duration)/1e6, commands)
  41. },
  42. Failed: func(_ context.Context, evt *event.CommandFailedEvent) {
  43. var commands bson.Raw
  44. v, ok := startedCommands.Load(evt.RequestID)
  45. if ok {
  46. commands = v.(bson.Raw)
  47. }
  48. utils.MongoLog.Info("\n【MongoDB】[%.3fms] [%v] \n %v \n", float64(evt.Duration)/1e6, commands, evt.Failure)
  49. },
  50. }
  51. ops := options.ClientOptions{ClientOptions: &mgoptions.ClientOptions{}}
  52. ops.SetMonitor(cmdMonitor)
  53. ctx := context.Background()
  54. client, err := qmgo.NewClient(ctx, &qmgo.Config{
  55. Uri: mgoConfig.Url,
  56. Auth: &qmgo.Credential{
  57. AuthMechanism: mgoConfig.AuthMechanism,
  58. AuthSource: mgoConfig.AuthSource,
  59. Username: mgoConfig.Username,
  60. Password: mgoConfig.Password,
  61. },
  62. Database: mgoConfig.Database,
  63. ConnectTimeoutMS: &ConnectTimeoutMS,
  64. SocketTimeoutMS: &SocketTimeoutMS,
  65. MaxPoolSize: &MaxPoolSize,
  66. MinPoolSize: &MinPoolSize,
  67. }, ops)
  68. if err != nil {
  69. panic("MongoDB连接异常:" + err.Error())
  70. }
  71. return client
  72. }
  73. func MgoGetColl(collName string) (cli *qmgo.QmgoClient, err error) {
  74. ctx := context.Background()
  75. config := &qmgo.Config{
  76. Coll: collName,
  77. ConnectTimeoutMS: &ConnectTimeoutMS,
  78. SocketTimeoutMS: &SocketTimeoutMS,
  79. MaxPoolSize: &MaxPoolSize,
  80. MinPoolSize: &MinPoolSize,
  81. }
  82. cli, err = qmgo.Open(ctx, config)
  83. return
  84. }