RMR handler for A1-EI Job Creation
[ric-plt/a1.git] / a1-go / pkg / resthooks / resthooks.go
index e0060f1..cb87040 100644 (file)
@@ -30,6 +30,8 @@ import (
 
        "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/a1"
        "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/models"
+       "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/policy"
+       "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/restapi/operations/a1_mediator"
        "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/rmr"
        "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
        "github.com/santhosh-tekuri/jsonschema/v5"
@@ -42,6 +44,8 @@ const (
        a1InstancePrefix         = "a1.policy_instance."
        a1InstanceMetadataPrefix = "a1.policy_inst_metadata."
        a1HandlerPrefix          = "a1.policy_handler."
+       a1PolicyRequest          = 20010
+       a1EIDataDelivery         = 20017
 )
 
 var typeAlreadyError = errors.New("Policy Type already exists")
@@ -83,14 +87,27 @@ func (rh *Resthook) IsValidJson(err error) bool {
        return err == invalidJsonSchema
 }
 func NewResthook() *Resthook {
-       return createResthook(sdlgo.NewSyncStorage(), rmr.NewRMRSender())
+       sdl := sdlgo.NewSyncStorage()
+       policyManager := policy.NewPolicyManager(sdl)
+       return createResthook(sdl, rmr.NewRMRSender(policyManager))
 }
 
 func createResthook(sdlInst iSdl, rmrSenderInst rmr.IRmrSender) *Resthook {
-       return &Resthook{
+       rh := &Resthook{
                db:             sdlInst,
                iRmrSenderInst: rmrSenderInst,
        }
+
+       return rh
+}
+
+func (rh *Resthook) GetA1Health() bool {
+       data, _ := rh.db.GetAll(a1MediatorNs)
+       if data != nil {
+               a1.Logger.Debug("Database connected and A1 is healthy")
+               return true
+       }
+       return false
 }
 
 func (rh *Resthook) GetAllPolicyType() []models.PolicyTypeID {
@@ -377,12 +394,12 @@ func (rh *Resthook) CreatePolicyInstance(policyTypeId models.PolicyTypeID, polic
                }
 
                message := rmr.Message{}
-               rmrMessage, err = message.PolicyMessage(strconv.FormatInt((int64(policyTypeId)), 10), string(policyInstanceID), httpBodyString, operation)
+               rmrMessage, err := message.PolicyMessage(strconv.FormatInt((int64(policyTypeId)), 10), string(policyInstanceID), httpBodyString, operation)
                if err != nil {
                        a1.Logger.Error("error : %v", err)
                        return err
                }
-               isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage)
+               isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1PolicyRequest)
                if isSent {
                        a1.Logger.Debug("rmrSendToXapp : message sent")
                } else {
@@ -666,18 +683,37 @@ func (rh *Resthook) DeletePolicyInstance(policyTypeId models.PolicyTypeID, polic
        rh.storeDeletedPolicyInstanceMetadata(policyTypeId, policyInstanceID, creation_timestamp.(string))
 
        message := rmr.Message{}
-       rmrMessage, err = message.PolicyMessage(strconv.FormatInt((int64(policyTypeId)), 10), string(policyInstanceID), "", "DELETE")
+       rmrMessage, err1 := message.PolicyMessage(strconv.FormatInt((int64(policyTypeId)), 10), string(policyInstanceID), "", "DELETE")
+       if err1 != nil {
+               a1.Logger.Error("error : %v", err1)
+               return err1
+       }
+       isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1PolicyRequest)
+       if isSent {
+               a1.Logger.Debug("rmrSendToXapp : message sent")
+       } else {
+               //TODO:if message not sent need to return error or just log it or retry sending
+               a1.Logger.Error("rmrSendToXapp : message not sent")
+       }
+
+       return nil
+}
+
+func (rh *Resthook) DataDelivery(httpBody interface{}) error {
+       a1.Logger.Debug("httpbody : %+v", httpBody)
+       mymap := httpBody.(map[string]interface{})
+       message := rmr.Message{}
+       rmrMessage, err := message.A1EIMessage(mymap["job"].(string), mymap["payload"].(string))
        if err != nil {
                a1.Logger.Error("error : %v", err)
                return err
        }
-       isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage)
+       a1.Logger.Debug("rmrSendToXapp :rmrMessage %+v", rmrMessage)
+       isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1EIDataDelivery)
        if isSent {
                a1.Logger.Debug("rmrSendToXapp : message sent")
        } else {
-               //TODO:if message not sent need to return error or just log it or retry sending
                a1.Logger.Error("rmrSendToXapp : message not sent")
        }
-
        return nil
 }