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)
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{
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{
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,
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
"io"
"os"
+ "sync"
+
"example.com/mmes/logging"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"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,
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
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")
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)