RmrSendToXapp modified to use policyTypeId as subid - needed for a1/xapp communicatio...
[ric-plt/a1.git] / pkg / resthooks / resthooks.go
index 956ae47..79e52fa 100644 (file)
@@ -102,12 +102,9 @@ func createResthook(sdlInst iSdl, rmrSenderInst rmr.IRmrSender) *Resthook {
 }
 
 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
+       //TODO : Add database healthcheck
+       a1.Logger.Debug("A1 is healthy")
+       return true
 }
 
 func (rh *Resthook) GetAllPolicyType() []models.PolicyTypeID {
@@ -399,7 +396,7 @@ func (rh *Resthook) CreatePolicyInstance(policyTypeId models.PolicyTypeID, polic
                        a1.Logger.Error("error : %v", err)
                        return err
                }
-               isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1PolicyRequest)
+               isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1PolicyRequest, int(policyTypeId))
                if isSent {
                        a1.Logger.Debug("rmrSendToXapp : message sent")
                } else {
@@ -572,18 +569,34 @@ func (rh *Resthook) getMetaData(policyTypeId models.PolicyTypeID, policyInstance
        return instanceMetadataMap, nil
 }
 
+func (rh *Resthook) getPolicyInstanceStatus(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) (bool, error) {
+       instancehandlerKey := a1HandlerPrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "." + string(policyInstanceID)
+       var keys [1]string
+       keys[0] = instancehandlerKey
+       resp, err := rh.db.Get(a1MediatorNs, keys[:])
+       if err != nil {
+               a1.Logger.Error("error1 :%+v", err)
+               return false, err
+       }
+       for _, key := range resp {
+               if key == "OK" {
+                       return true, nil
+               }
+       }
+       return false, nil
+}
+
 func (rh *Resthook) GetPolicyInstanceStatus(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) (*a1_mediator.A1ControllerGetPolicyInstanceStatusOKBody, error) {
        err := rh.instanceValidity(policyTypeId, policyInstanceID)
        policyInstanceStatus := a1_mediator.A1ControllerGetPolicyInstanceStatusOKBody{}
+       policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
        if err != nil && err == policyInstanceNotFoundError || err == policyTypeNotFoundError {
-               policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
                return &policyInstanceStatus, err
        }
        metadata, err := rh.getMetaData(policyTypeId, policyInstanceID)
        a1.Logger.Debug(" metadata %v", metadata)
        if err != nil {
                a1.Logger.Error("policy instance error : %v", err)
-               policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
                return &policyInstanceStatus, err
        }
        jsonbody, err := json.Marshal(metadata)
@@ -597,10 +610,12 @@ func (rh *Resthook) GetPolicyInstanceStatus(policyTypeId models.PolicyTypeID, po
                //this error maps to 503 error but can be mapped to 500: internal error
                return &policyInstanceStatus, err
        }
-       if policyInstanceStatus.HasBeenDeleted == false {
+       resp, err := rh.getPolicyInstanceStatus(policyTypeId, policyInstanceID)
+       if err != nil || (err == nil && resp == false) {
+               a1.Logger.Error("marshal error : %v", err)
+               return &policyInstanceStatus, err
+       } else if policyInstanceStatus.HasBeenDeleted == true {
                policyInstanceStatus.InstanceStatus = "IN EFFECT"
-       } else {
-               policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
        }
        return &policyInstanceStatus, nil
 }
@@ -675,7 +690,10 @@ func (rh *Resthook) DeletePolicyInstance(policyTypeId models.PolicyTypeID, polic
        instanceMetadataKey := a1InstanceMetadataPrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "." + string(policyInstanceID)
        creation_metadata := createdmetadata[instanceMetadataKey]
        var metadata map[string]interface{}
-       if err = json.Unmarshal([]byte(creation_metadata.(string)), &metadata); err != nil {
+       creation_metadata_string := creation_metadata.(string)
+       creation_metadata_string = strings.TrimRight(creation_metadata_string, "]")
+       creation_metadata_string = strings.TrimLeft(creation_metadata_string, "[")
+       if err = json.Unmarshal([]byte(creation_metadata_string), &metadata); err != nil {
                a1.Logger.Error("unmarshal error : %v", err)
                return err
        }
@@ -695,7 +713,7 @@ func (rh *Resthook) DeletePolicyInstance(policyTypeId models.PolicyTypeID, polic
                a1.Logger.Error("error : %v", err1)
                return err1
        }
-       isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1PolicyRequest)
+       isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1PolicyRequest, int(policyTypeId))
        if isSent {
                a1.Logger.Debug("rmrSendToXapp : message sent")
        } else {
@@ -716,7 +734,7 @@ func (rh *Resthook) DataDelivery(httpBody interface{}) error {
                return err
        }
        a1.Logger.Debug("rmrSendToXapp :rmrMessage %+v", rmrMessage)
-       isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1EIDataDelivery)
+       isSent := rh.iRmrSenderInst.RmrSendToXapp(rmrMessage, a1EIDataDelivery, rmr.DefaultSubId)
        if isSent {
                a1.Logger.Debug("rmrSendToXapp : message sent")
        } else {