First batch
This commit is contained in:
187
mongo.go
Normal file
187
mongo.go
Normal file
@@ -0,0 +1,187 @@
|
||||
package oclib
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
"go.mongodb.org/mongo-driver/x/bsonx"
|
||||
)
|
||||
|
||||
var (
|
||||
mngoClient *mongo.Client
|
||||
mngoDB *mongo.Database
|
||||
MngoCtx context.Context
|
||||
|
||||
MngoCollData *mongo.Collection
|
||||
MngoCollComputing *mongo.Collection
|
||||
MngoCollStorage *mongo.Collection
|
||||
MngoCollDatacenter *mongo.Collection
|
||||
MngoCollWorkspace *mongo.Collection
|
||||
MngoCollSchedule *mongo.Collection
|
||||
)
|
||||
|
||||
// Trying to get vscode to display this
|
||||
func MongoInit() {
|
||||
|
||||
// var baseConfig string
|
||||
var err error
|
||||
var cancel context.CancelFunc
|
||||
var conf map[string]string
|
||||
var MongoURL string
|
||||
var DBname string
|
||||
|
||||
db_conf, err := os.ReadFile("oclib_conf.json")
|
||||
if err != nil {
|
||||
logger.Fatal().Msg("Could not find configuration file")
|
||||
}
|
||||
|
||||
json.Unmarshal(db_conf,&conf)
|
||||
|
||||
|
||||
if len(os.Getenv("DOCKER_ENVIRONMENT")) == 0 {
|
||||
MongoURL = conf["DB_URL_LOCAL"]
|
||||
} else {
|
||||
MongoURL = conf["DB_URL_DOCKER"]
|
||||
}
|
||||
|
||||
DBname = conf["DCNAME"] + "-" + conf["DBPOINT"]
|
||||
|
||||
// MongoURL, err := beego.AppConfig.String(baseConfig + "::url")
|
||||
// if err != nil {
|
||||
// logger.Critical().Msg("MongoDB URI error: %v", err)
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
logger.Info().Msg("Connecting to" + MongoURL)
|
||||
MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
createClient(MongoURL)
|
||||
|
||||
logger.Info().Msg("Connecting mongo client to db " + DBname)
|
||||
prepareDB(conf["DCNAME"],conf["DBPOINT"])
|
||||
|
||||
logger.Info().Msg("Database is READY")
|
||||
|
||||
}
|
||||
|
||||
// TODO : Soit retourner MngoCtx, soit comprendre comment passer sa référence et la mettre à jour
|
||||
func createClient(MongoURL string){
|
||||
|
||||
var err error
|
||||
|
||||
clientOptions := options.Client().ApplyURI(MongoURL)
|
||||
|
||||
mngoClient, _ = mongo.NewClient(options.Client().ApplyURI(MongoURL))
|
||||
|
||||
if err = mngoClient.Connect(MngoCtx); err != nil {
|
||||
logger.Fatal().Msg("Mongodb NewClient " + MongoURL + ":" + "err" )
|
||||
panic(err)
|
||||
}
|
||||
|
||||
|
||||
// Ping the primary
|
||||
if mngoClient, err = mongo.Connect(MngoCtx, clientOptions); err != nil {
|
||||
logger.Fatal().Msg("Mongodb connect " + MongoURL + ":" + "err" )
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err = mngoClient.Ping(MngoCtx, nil); err != nil {
|
||||
logger.Fatal().Msg("Mongodb ping " + MongoURL + ":" + "err" )
|
||||
panic(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func prepareDB(dc_name string, db_point string) {
|
||||
|
||||
// var err error
|
||||
DBname := dc_name + "-" + db_point
|
||||
|
||||
mngoDB = mngoClient.Database(DBname)
|
||||
|
||||
MngoCollData = mngoDB.Collection("Data")
|
||||
MngoCollComputing = mngoDB.Collection("Computing")
|
||||
MngoCollStorage = mngoDB.Collection("Storage")
|
||||
MngoCollDatacenter = mngoDB.Collection("Datacenter")
|
||||
MngoCollWorkspace = mngoDB.Collection("Workspace")
|
||||
MngoCollSchedule = mngoDB.Collection("Schedule")
|
||||
|
||||
list_collection := [...]string{"Data","Computing","Storage","Datacenter","Workspace","Schedule"}
|
||||
|
||||
for _, collection_name := range(list_collection){
|
||||
new_collection := mngoDB.Collection(collection_name)
|
||||
createCollection(new_collection)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// if _, err = MngoCollComputing.Indexes().CreateMany(MngoCtx, []mongo.IndexModel{
|
||||
// {
|
||||
// Keys: bsonx.Doc{
|
||||
// {Key: "description", Value: bsonx.String("text")},
|
||||
// {Key: "owner", Value: bsonx.String("text")},
|
||||
// {Key: "license", Value: bsonx.String("text")},
|
||||
// },
|
||||
// },
|
||||
// }); err != nil && err.(mongo.CommandError).Code != 85 {
|
||||
// logger.Critical().Msg(err)
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
// if _, err = MngoCollStorage.Indexes().CreateMany(MngoCtx, []mongo.IndexModel{
|
||||
// {
|
||||
// Keys: bsonx.Doc{
|
||||
// {Key: "name", Value: bsonx.String("text")},
|
||||
// {Key: "description", Value: bsonx.String("text")},
|
||||
// },
|
||||
// },
|
||||
// }); err != nil && err.(mongo.CommandError).Code != 85 {
|
||||
// logger.Critical().Msg(err)
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
// if _, err = MngoCollDatacenter.Indexes().CreateMany(MngoCtx, []mongo.IndexModel{
|
||||
// {
|
||||
// Keys: bsonx.Doc{
|
||||
// {Key: "name", Value: bsonx.String("text")},
|
||||
// {Key: "description", Value: bsonx.String("text")},
|
||||
// {Key: "owner", Value: bsonx.String("text")},
|
||||
// },
|
||||
// },
|
||||
// }); err != nil && err.(mongo.CommandError).Code != 85 {
|
||||
// logger.Critical().Msg(err)
|
||||
// panic(err)
|
||||
// }
|
||||
}
|
||||
|
||||
func createCollection(new_collection *mongo.Collection) {
|
||||
|
||||
var err error
|
||||
|
||||
if _, err = new_collection.Indexes().CreateMany(MngoCtx, []mongo.IndexModel{
|
||||
{
|
||||
Keys: bsonx.Doc{
|
||||
{Key: "description", Value: bsonx.String("text")},
|
||||
{Key: "example", Value: bsonx.String("text")},
|
||||
},
|
||||
},
|
||||
}); err != nil {
|
||||
var cmdErr mongo.CommandError
|
||||
if errors.As(err, &cmdErr) && cmdErr.Code != 85 {
|
||||
logger.Fatal().Msg("It failed but I saw it: " + err.Error())
|
||||
panic(err)
|
||||
} else if !errors.As(err, &cmdErr) {
|
||||
logger.Fatal().Msg("Unexpected error: " + err.Error())
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user