78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package mongo
|
|
|
|
import (
|
|
commonConfig "common/config"
|
|
"common/log"
|
|
"context"
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"fmt"
|
|
"go.mongodb.org/mongo-driver/event"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
"io/ioutil"
|
|
)
|
|
|
|
var (
|
|
MDB *mongo.Client
|
|
DefaultDB *mongo.Database
|
|
ChatDB *mongo.Database
|
|
ErrNoDocuments = mongo.ErrNoDocuments
|
|
)
|
|
|
|
func Init(cfg *commonConfig.MongoConfig) error {
|
|
dialect := ""
|
|
if len(cfg.User) > 0 && len(cfg.Password) > 0 {
|
|
dialect = fmt.Sprintf("mongodb://%s:%s@%s:%d/admin?appname=MongoDB", cfg.User, cfg.Password, cfg.Host, cfg.Port)
|
|
} else {
|
|
dialect = fmt.Sprintf("mongodb://%s:%d/admin?readPreference=primary&appname=MongoDB&ssl=false", cfg.Host, cfg.Port)
|
|
}
|
|
var clientOptions *options.ClientOptions
|
|
if len(cfg.SSLCaFile) > 0 {
|
|
data, err := ioutil.ReadFile(cfg.SSLCaFile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dialect += "&ssl=true"
|
|
roots := x509.NewCertPool()
|
|
roots.AppendCertsFromPEM(data)
|
|
clientOptions = options.Client().ApplyURI(dialect).SetTLSConfig(&tls.Config{
|
|
RootCAs: roots,
|
|
//InsecureSkipVerify: true,
|
|
}).SetRetryWrites(false)
|
|
} else {
|
|
dialect += "&ssl=false"
|
|
clientOptions = options.Client().ApplyURI(dialect).SetRetryWrites(false)
|
|
}
|
|
monitor := &event.CommandMonitor{
|
|
Started: func(ctx context.Context, startedEvent *event.CommandStartedEvent) {
|
|
log.Infof("mongoDB Command started %v %v", startedEvent.CommandName, startedEvent.Command.String())
|
|
},
|
|
Failed: func(ctx context.Context, failedEvent *event.CommandFailedEvent) {
|
|
log.Errorf("mongoDB Command error %v %v", failedEvent.CommandName, failedEvent.Failure)
|
|
},
|
|
}
|
|
clientOptions.SetMonitor(monitor)
|
|
client, err := mongo.Connect(context.Background(), clientOptions)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = client.Ping(context.Background(), nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
MDB = client
|
|
DefaultDB = MDB.Database("ecosmos")
|
|
ChatDB = MDB.Database("ecosmos_chat")
|
|
return nil
|
|
}
|
|
|
|
func Close() error {
|
|
if MDB != nil {
|
|
return MDB.Disconnect(context.Background())
|
|
}
|
|
return nil
|
|
}
|