Register model error handling 70/12070/1
authorSANDEEP KUMAR JAISAWAL <s.jaisawal@samsung.com>
Tue, 21 Nov 2023 11:12:36 +0000 (16:42 +0530)
committerSANDEEP KUMAR JAISAWAL <s.jaisawal@samsung.com>
Tue, 21 Nov 2023 11:14:31 +0000 (16:44 +0530)
Issue-Id: AIMLFW-64

Change-Id: I37be89de3c417e6e7001b1fc114cbf8e1c23fe63
Signed-off-by: SANDEEP KUMAR JAISAWAL <s.jaisawal@samsung.com>
apis/mmes_apis.go
core/s3_manager.go

index 32d7133..479c23c 100644 (file)
@@ -52,6 +52,9 @@ func init() {
 }
 
 func RegisterModel(cont *gin.Context) {
+       var returnCode int = http.StatusCreated
+       var responseMsg string = "Model registered successfully"
+
        fmt.Println("Creating model...")
        bodyBytes, _ := io.ReadAll(cont.Request.Body)
 
@@ -65,21 +68,25 @@ func RegisterModel(cont *gin.Context) {
                        "code":    http.StatusBadRequest,
                        "message": string("Can not parse input data, provide mandatory details"),
                })
-               return
+               //return
+       } else {
+               fmt.Println(modelInfo.ModelName, modelInfo.RAppId, modelInfo.Metainfo)
+               modelInfoBytes, _ := json.Marshal(modelInfo)
+
+               //TODO Create singleton for s3_manager
+               s3_manager := core.NewS3Manager()
+               s3Err := s3_manager.CreateBucket(modelInfo.ModelName)
+               if s3Err == nil {
+                       s3_manager.UploadFile(modelInfoBytes, modelInfo.ModelName+os.Getenv("INFO_FILE_PREFIX"), modelInfo.ModelName)
+               } else {
+                       returnCode = http.StatusInternalServerError
+                       responseMsg = s3Err.Error()
+               }
+               cont.JSON(returnCode, gin.H{
+                       "code":    returnCode,
+                       "message": responseMsg,
+               })
        }
-       fmt.Println(modelInfo.ModelName, modelInfo.RAppId, modelInfo.Metainfo)
-       modelInfoBytes, err := json.Marshal(modelInfo)
-
-       //TODO Create singleton for s3_manager
-       s3_manager := core.NewS3Manager()
-       s3_manager.CreateBucket(modelInfo.ModelName)
-
-       s3_manager.UploadFile(modelInfoBytes, modelInfo.ModelName+os.Getenv("INFO_FILE_PREFIX"), modelInfo.ModelName)
-
-       cont.JSON(http.StatusCreated, gin.H{
-               "code":    http.StatusCreated,
-               "message": string("Model details stored sucessfully"),
-       })
 }
 
 /*
@@ -104,7 +111,6 @@ func GetModelInfo(cont *gin.Context) {
                "code":    http.StatusOK,
                "message": string(model_info),
        })
-
 }
 
 /*
index 206a182..6059165 100644 (file)
@@ -19,11 +19,13 @@ package core
 
 import (
        "bytes"
+       "errors"
        "fmt"
        "io"
        "os"
 
        "github.com/aws/aws-sdk-go/aws"
+       "github.com/aws/aws-sdk-go/aws/awserr"
        "github.com/aws/aws-sdk-go/aws/credentials"
        "github.com/aws/aws-sdk-go/aws/session"
        "github.com/aws/aws-sdk-go/service/s3"
@@ -36,6 +38,11 @@ type S3Manager struct {
        S3Client *s3.S3
 }
 
+type S3Error struct {
+       msg  string
+       code int
+}
+
 /*
 This function return an pointer to instance of S3_manager struct
 the struct instance hold pointer to s3.S3 connection, which is
@@ -63,12 +70,21 @@ func NewS3Manager() *S3Manager {
 
 }
 
-func (s3manager *S3Manager) CreateBucket(bucketName string) {
-       _, err := s3manager.S3Client.CreateBucket(&s3.CreateBucketInput{Bucket: aws.String(bucketName)})
-       if err != nil {
-               panic(err)
+// Creates s3 bucket for given bucketName, optionally
+// returns named error err
+func (s3manager *S3Manager) CreateBucket(bucketName string) (err error) {
+       _, s3Err := s3manager.S3Client.CreateBucket(&s3.CreateBucketInput{Bucket: aws.String(bucketName)})
+
+       if s3Err != nil {
+               fmt.Println(s3Err)
+               //Convert the aws to get the code/error msg for api response
+               if aerr, ok := s3Err.(awserr.Error); ok {
+                       err = errors.New(aerr.Message())
+                       return
+               }
        }
        println("Bucket created : ", bucketName)
+       return nil
 }
 
 // objectName : Name of file/object under given bucket