RMR handler for A1-EI Job Creation 32/9932/7
authornaman.gupta <naman.gupta@samsung.com>
Sat, 3 Dec 2022 15:57:36 +0000 (21:27 +0530)
committernaman.gupta <naman.gupta@samsung.com>
Tue, 6 Dec 2022 08:59:29 +0000 (14:29 +0530)
RMR handler for A1-EI Job Creation (messagetype 20015)

Signed-off-by: naman.gupta <naman.gupta@samsung.com>
Change-Id: I091bf291fe83600cece54f520315b9d024854976

a1-go/pkg/rmr/rmr.go

index 2bb2f1b..b7cac0e 100644 (file)
@@ -22,7 +22,9 @@
 package rmr
 
 import (
+       "bytes"
        "encoding/json"
+       "fmt"
        "io/ioutil"
        "net/http"
        "strconv"
@@ -34,11 +36,14 @@ import (
 )
 
 const (
-       a1SourceName     = "service-ricplt-a1mediator-http"
-       a1PolicyRequest  = 20010
-       ecsServiceHost   = "http://ecs-service:8083"
-       ecsEiTypePath    = ecsServiceHost + "/A1-EI/v1/eitypes"
-       a1EiQueryAllResp = 20014
+       a1SourceName      = "service-ricplt-a1mediator-http"
+       a1PolicyRequest   = 20010
+       ecsServiceHost    = "http://ecs-service:8083"
+       ecsEiTypePath     = ecsServiceHost + "/A1-EI/v1/eitypes"
+       ecsEiJobPath      = ecsServiceHost + "/A1-EI/v1/eijobs/"
+       a1EiQueryAllResp  = 20014
+       a1EiCreateJobResp = 20016
+       jobCreationData   = `{"ei_job_id": %s.}`
 )
 
 type RmrSender struct {
@@ -193,6 +198,58 @@ func (rmr *RmrSender) Consume(msg *xapp.RMRParams) (err error) {
                } else {
                        a1.Logger.Error("rmrSendToXapp : message not sent")
                }
+       case "A1_EI_CREATE_JOB":
+               payload := msg.Payload
+               a1.Logger.Debug("message recieved : %s", payload)
+
+               var result map[string]interface{}
+
+               err := json.Unmarshal([]byte(payload), &result)
+               if err != nil {
+                       a1.Logger.Error("Unmarshal error : %+v", err)
+                       return err
+               }
+               a1.Logger.Debug("Unmarshaled message recieved : %s ", result)
+
+               jobIdStr := strconv.FormatInt((int64(result["job-id"].(float64))), 10)
+               jsonReq, err := json.Marshal(result)
+               if err != nil {
+                       a1.Logger.Error("marshal error : %v", err)
+                       return err
+               }
+
+               a1.Logger.Debug("url to send to :", ecsEiJobPath+jobIdStr)
+               req, err := http.NewRequest(http.MethodPut, ecsEiJobPath+jobIdStr, bytes.NewBuffer(jsonReq))
+               if err != nil {
+                       a1.Logger.Error("http error : %v", err)
+                       return err
+               }
+
+               req.Header.Set("Content-Type", "application/json; charset=utf-8")
+               client := &http.Client{}
+               resp, err3 := client.Do(req)
+               if err3 != nil {
+                       a1.Logger.Error("error:", err3)
+                       return err
+               }
+
+               defer resp.Body.Close()
+
+               a1.Logger.Debug("response status : ", resp.StatusCode)
+               if resp.StatusCode == 200 || resp.StatusCode == 201 {
+                       a1.Logger.Debug("received successful response for ei-job-id : ", jobIdStr)
+                       rmrData := fmt.Sprintf(jobCreationData, jobIdStr)
+                       a1.Logger.Debug("rmr_Data to send: ", rmrData)
+
+                       isSent := rmr.RmrSendToXapp(rmrData, a1EiCreateJobResp)
+                       if isSent {
+                               a1.Logger.Debug("rmrSendToXapp : message sent")
+                       } else {
+                               a1.Logger.Error("rmrSendToXapp : message not sent")
+                       }
+               } else {
+                       a1.Logger.Warning("failed to create EIJOB ")
+               }
 
        default:
                xapp.Logger.Error("Unknown message type '%d', discarding", msg.Mtype)