mongo unfatal

This commit is contained in:
mr 2024-07-31 16:06:47 +02:00
parent 78bef28a21
commit c4448fd3af
2 changed files with 54 additions and 21 deletions

View File

@ -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)

View File

@ -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 {