From 89419a247e7ff379a52b9564d9a2b7c9e93f7d49 Mon Sep 17 00:00:00 2001 From: SANDEEP KUMAR JAISAWAL Date: Wed, 22 Nov 2023 22:30:12 +0530 Subject: [PATCH] Removing extra go calls, used to testing Issue-Id: AIMLFW-64 Change-Id: Ie07cc0f60ce85dcc2ac89e29686d58a1284f7f4b Signed-off-by: SANDEEP KUMAR JAISAWAL --- apis/mmes_apis.go | 10 +++++----- core/s3_manager.go | 22 +++++++++++++++++++++- logging/logging.go | 3 ++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/apis/mmes_apis.go b/apis/mmes_apis.go index 2acaec7..9b20521 100644 --- a/apis/mmes_apis.go +++ b/apis/mmes_apis.go @@ -73,7 +73,7 @@ func RegisterModel(cont *gin.Context) { modelInfoBytes, _ := json.Marshal(modelInfo) //TODO Create singleton for s3_manager - s3_manager := core.NewS3Manager() + s3_manager := core.GetS3ManagerInstance() s3Err := s3_manager.CreateBucket(modelInfo.ModelName) if s3Err == nil { s3_manager.UploadFile(modelInfoBytes, modelInfo.ModelName+os.Getenv("INFO_FILE_PREFIX"), modelInfo.ModelName) @@ -103,7 +103,7 @@ func GetModelInfo(cont *gin.Context) { model_name := jsonMap["model-name"].(string) logging.INFO("The request model name: ", model_name) - s3_manager := core.NewS3Manager() + s3_manager := core.GetS3ManagerInstance() model_info := s3_manager.GetBucketObject(model_name+os.Getenv("INFO_FILE_PREFIX"), model_name) cont.JSON(http.StatusOK, gin.H{ @@ -119,7 +119,7 @@ func GetModelInfoByName(cont *gin.Context) { logging.INFO("Get model info by name API ...") modelName := cont.Param("modelName") - s3_manager := core.NewS3Manager() + s3_manager := core.GetS3ManagerInstance() model_info := s3_manager.GetBucketObject(modelName+os.Getenv("INFO_FILE_PREFIX"), modelName) cont.JSON(http.StatusOK, gin.H{ @@ -143,7 +143,7 @@ func UploadModel(cont *gin.Context) { byteFile, _ := io.ReadAll((file)) logging.INFO("Uploading model : ", modelName) - s3_manager := core.NewS3Manager() + s3_manager := core.GetS3ManagerInstance() s3_manager.UploadFile(byteFile, modelName+os.Getenv("MODEL_FILE_PREFIX"), modelName) cont.JSON(http.StatusOK, gin.H{ "code": http.StatusOK, @@ -159,7 +159,7 @@ func DownloadModel(cont *gin.Context) { logging.INFO("Download model API ...") modelName := cont.Param("modelName") fileName := modelName + os.Getenv("MODEL_FILE_PREFIX") - s3_manager := core.NewS3Manager() + s3_manager := core.GetS3ManagerInstance() fileByes := s3_manager.GetBucketObject(fileName, modelName) //Return file in api reponse using byte slice diff --git a/core/s3_manager.go b/core/s3_manager.go index a8e39f3..acac295 100644 --- a/core/s3_manager.go +++ b/core/s3_manager.go @@ -23,6 +23,8 @@ import ( "io" "os" + "sync" + "example.com/mmes/logging" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" @@ -31,6 +33,9 @@ import ( "github.com/aws/aws-sdk-go/service/s3" ) +var Lock = &sync.Mutex{} +var s3MgrInstance *S3Manager + type S3Manager struct { //S3Client has s3 endpoint connection pointer, //Which will be used by all s3 bucket related operatios, @@ -38,6 +43,21 @@ type S3Manager struct { S3Client *s3.S3 } +// Singleton for S3Manager +func GetS3ManagerInstance() *S3Manager { + Lock.Lock() + defer Lock.Unlock() + + if s3MgrInstance == nil { + logging.INFO("Creating single instance for S3Manager") + s3MgrInstance = newS3Manager() + } else { + logging.WARN("S3Manager instance already exists") + } + + return s3MgrInstance +} + type S3Error struct { msg string code int @@ -49,7 +69,7 @@ the struct instance hold pointer to s3.S3 connection, which is preconfigured using enviroment variables, such as aws s3 endpoints connection details. */ -func NewS3Manager() *S3Manager { +func newS3Manager() *S3Manager { endpoint := os.Getenv("S3_URL") accessKey := os.Getenv("S3_ACCESS_KEY") secretAccessKey := os.Getenv("S3_SECRET_KEY") diff --git a/logging/logging.go b/logging/logging.go index f4cbcea..47c6de4 100644 --- a/logging/logging.go +++ b/logging/logging.go @@ -10,11 +10,12 @@ var warnLogger *log.Logger var errorLogger *log.Logger func init() { + //TODO add current timestamp as file prefix to retain the old log file logFile, fileErr := os.Create(os.Getenv("LOG_FILE_NAME")) if fileErr != nil { log.Fatal("Can not start MMES service,issue in creating log file") } - flags := log.Ldate | log.Ltime + flags := log.Ldate | log.Ltime infoLogger = log.New(logFile, "INFO:", flags) warnLogger = log.New(logFile, "WARN:", flags) errorLogger = log.New(logFile, "ERROR:", flags) -- 2.16.6