mongo unfatal
This commit is contained in:
parent
78bef28a21
commit
c4448fd3af
@ -23,7 +23,8 @@ var (
|
||||
cancel context.CancelFunc
|
||||
|
||||
existingCollections []string
|
||||
|
||||
mngoCollections []string
|
||||
mngoConfig MongoConf
|
||||
ResourceMap map[string]interface{}
|
||||
)
|
||||
|
||||
@ -46,20 +47,27 @@ func (m *MongoDB) Init(collections []string, config MongoConf) {
|
||||
m.Logger.Info().Msg("Connecting to" + config.GetUrl())
|
||||
MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
m.createClient(config.GetUrl())
|
||||
|
||||
m.Logger.Info().Msg("Connecting mongo client to db " + config.GetDatabase())
|
||||
m.prepareDB(collections, config)
|
||||
|
||||
m.Logger.Info().Msg("Database is READY")
|
||||
|
||||
mngoCollections = collections
|
||||
mngoConfig = config
|
||||
if err := m.createClient(config.GetUrl()); err == nil {
|
||||
m.connect()
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MongoDB) createClient(MongoURL string) {
|
||||
func (m *MongoDB) connect() error {
|
||||
if mngoClient == nil {
|
||||
m.Logger.Info().Msg("Connecting mongo client to db " + mngoConfig.GetDatabase())
|
||||
m.prepareDB(mngoCollections, mngoConfig)
|
||||
|
||||
m.Logger.Info().Msg("Database is READY")
|
||||
return nil
|
||||
} else {
|
||||
return m.createClient(mngoConfig.GetUrl())
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MongoDB) createClient(MongoURL string) error {
|
||||
var err error
|
||||
|
||||
// Allows us to use marshal and unmarshall with results of FindOne() and others
|
||||
bsonOpts := &options.BSONOptions{
|
||||
UseJSONStructTags: true,
|
||||
@ -69,21 +77,21 @@ func (m *MongoDB) createClient(MongoURL string) {
|
||||
clientOptions := options.Client().ApplyURI(MongoURL).SetBSONOptions(bsonOpts)
|
||||
mngoClient, err = mongo.Connect(MngoCtx, clientOptions)
|
||||
if err != nil {
|
||||
m.Logger.Fatal().Msg("Mongodb NewClient " + MongoURL + ":" + "err")
|
||||
panic(err)
|
||||
mngoClient = nil
|
||||
return errors.New("Mongodb NewClient " + MongoURL + ":" + "err")
|
||||
}
|
||||
|
||||
// Ping the primary
|
||||
if mngoClient, err = mongo.Connect(MngoCtx, clientOptions); err != nil {
|
||||
m.Logger.Fatal().Msg("Mongodb connect " + MongoURL + ":" + "err")
|
||||
panic(err)
|
||||
mngoClient = nil
|
||||
return errors.New("Mongodb connect " + MongoURL + ":" + "err")
|
||||
}
|
||||
|
||||
if err = mngoClient.Ping(MngoCtx, nil); err != nil {
|
||||
m.Logger.Fatal().Msg("Mongodb ping " + MongoURL + ":" + "err")
|
||||
panic(err)
|
||||
mngoClient = nil
|
||||
return errors.New("Mongodb connect " + MongoURL + ":" + "err")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MongoDB) prepareDB(list_collection []string, config MongoConf) {
|
||||
@ -133,6 +141,9 @@ func (m *MongoDB) createCollection(collection_name string, new_collection *mongo
|
||||
}
|
||||
|
||||
func (m *MongoDB) DeleteOne(id string, collection_name string) (int64, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return 0, 503, err
|
||||
}
|
||||
filter := bson.M{"_id": id}
|
||||
targetDBCollection := CollectionMap[collection_name]
|
||||
opts := options.Delete().SetHint(bson.D{{Key: "_id", Value: 1}})
|
||||
@ -148,6 +159,9 @@ func (m *MongoDB) DeleteOne(id string, collection_name string) (int64, int, erro
|
||||
}
|
||||
|
||||
func (m *MongoDB) DeleteMultiple(f map[string]interface{}, collection_name string) (int64, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return 0, 503, err
|
||||
}
|
||||
filter := bson.D{}
|
||||
for k, v := range f {
|
||||
filter = append(filter, bson.E{Key: k, Value: v})
|
||||
@ -166,13 +180,15 @@ func (m *MongoDB) DeleteMultiple(f map[string]interface{}, collection_name strin
|
||||
}
|
||||
|
||||
func (m *MongoDB) UpdateMultiple(set interface{}, filter map[string]interface{}, collection_name string) (int64, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return 0, 503, err
|
||||
}
|
||||
var doc map[string]interface{}
|
||||
b, _ := bson.Marshal(set)
|
||||
bson.Unmarshal(b, &doc)
|
||||
f := bson.D{}
|
||||
for k, v := range filter {
|
||||
f = append(f, bson.E{Key: k, Value: v})
|
||||
|
||||
}
|
||||
targetDBCollection := CollectionMap[collection_name]
|
||||
MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
|
||||
@ -186,6 +202,9 @@ func (m *MongoDB) UpdateMultiple(set interface{}, filter map[string]interface{},
|
||||
}
|
||||
|
||||
func (m *MongoDB) UpdateOne(set interface{}, id string, collection_name string) (string, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return "", 503, err
|
||||
}
|
||||
var doc map[string]interface{}
|
||||
b, _ := bson.Marshal(set)
|
||||
bson.Unmarshal(b, &doc)
|
||||
@ -202,6 +221,9 @@ func (m *MongoDB) UpdateOne(set interface{}, id string, collection_name string)
|
||||
}
|
||||
|
||||
func (m *MongoDB) StoreOne(obj interface{}, id string, collection_name string) (string, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return "", 503, err
|
||||
}
|
||||
var doc map[string]interface{}
|
||||
b, _ := bson.Marshal(obj)
|
||||
bson.Unmarshal(b, &doc)
|
||||
@ -221,6 +243,9 @@ func (m *MongoDB) StoreOne(obj interface{}, id string, collection_name string) (
|
||||
}
|
||||
|
||||
func (m *MongoDB) LoadOne(id string, collection_name string) (*mongo.SingleResult, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return nil, 503, err
|
||||
}
|
||||
filter := bson.M{"_id": id}
|
||||
targetDBCollection := CollectionMap[collection_name]
|
||||
|
||||
@ -237,6 +262,9 @@ func (m *MongoDB) LoadOne(id string, collection_name string) (*mongo.SingleResul
|
||||
}
|
||||
|
||||
func (m *MongoDB) Search(search string, filter []string, collection_name string) (*mongo.Cursor, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return nil, 503, err
|
||||
}
|
||||
opts := options.Find()
|
||||
opts.SetLimit(100)
|
||||
if strings.TrimSpace(search) == "*" {
|
||||
@ -263,6 +291,9 @@ func (m *MongoDB) Search(search string, filter []string, collection_name string)
|
||||
}
|
||||
|
||||
func (m *MongoDB) LoadFilter(filter map[string]interface{}, collection_name string) (*mongo.Cursor, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return nil, 503, err
|
||||
}
|
||||
f := bson.D{}
|
||||
for k, v := range filter {
|
||||
f = append(f, bson.E{Key: k, Value: v})
|
||||
@ -281,6 +312,9 @@ func (m *MongoDB) LoadFilter(filter map[string]interface{}, collection_name stri
|
||||
}
|
||||
|
||||
func (m *MongoDB) LoadAll(collection_name string) (*mongo.Cursor, int, error) {
|
||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||
return nil, 503, err
|
||||
}
|
||||
targetDBCollection := CollectionMap[collection_name]
|
||||
|
||||
MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
|
||||
|
@ -18,7 +18,6 @@ type AbstractResource struct {
|
||||
Price string `json:"price,omitempty" bson:"price,omitempty"`
|
||||
License string `json:"license,omitempty" bson:"license,omitempty"`
|
||||
ResourceModel *ResourceModel `json:"resource_model,omitempty" bson:"resource_model,omitempty"`
|
||||
//Proxy *ResourceProxy `json:"proxy,omitempty" bson:"proxy,omitempty"`
|
||||
}
|
||||
|
||||
type Model struct {
|
||||
|
Loading…
Reference in New Issue
Block a user