+func (pm *PolicyManager) GetPolicyInstanceStatus(policyTypeId int, policyInstanceID string) (bool, error) {
+ a1.Logger.Debug("In GetPolicyInstanceStatus message recieved for %d and %s", policyTypeId, policyInstanceID)
+ instancehandlerKey := a1HandlerPrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "." + policyInstanceID
+ keys := []string{instancehandlerKey}
+ resp, err := pm.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 (pm *PolicyManager) SendPolicyStatusNotification(policyTypeId int, policyInstanceID string, handler string, status string) error {
+ a1.Logger.Debug("In SendPolicyStatusNotification status message recieved for %d and %s", policyTypeId, policyInstanceID)
+ notificationDestinationkey := a1NotificationDestinationPrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "." + fmt.Sprint(policyInstanceID)
+ keys := [1]string{notificationDestinationkey}
+ data, err := pm.db.Get(a1MediatorNs, keys[:])
+ if err != nil {
+ a1.Logger.Error("error1 :%+v", err)
+ return err
+ }
+
+ if data[notificationDestinationkey] == nil {
+ // notificationDestination URL is not available. Not an error, non-RT RIC
+ // possibly not expecting any callback.
+ return nil
+ }
+
+ notificationDestination, ok := data[notificationDestinationkey].(string)
+ if !ok {
+ return errors.New("failed to process notificationDestination URL")
+ }
+
+ policyInstanceStatus := a1_mediator.A1ControllerGetPolicyInstanceStatusOKBody{EnforceStatus: "ENFORCED"}
+ enforced, err := pm.GetPolicyInstanceStatus(policyTypeId, policyInstanceID)
+ if err != nil {
+ return err
+ }
+
+ if !enforced {
+ policyInstanceStatus.EnforceStatus = "NOT ENFORCED"
+ policyInstanceStatus.EnforceReason = "OTHER_REASON"
+ }
+
+ jsonbody, err := json.Marshal(policyInstanceStatus)
+ if err != nil {
+ return err
+ }
+ err = notification.SendNotification(notificationDestination, string(jsonbody))
+ if err != nil {
+ return err
+ }
+ return nil
+}
+