"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/sdlgo"
+
"github.com/santhosh-tekuri/jsonschema/v5"
"gopkg.in/yaml.v2"
)
a1PolicyPrefix = "a1.policy_type."
a1MediatorNs = "A1m_ns"
a1InstancePrefix = "a1.policy_instance."
+ a1InstanceMetadataPrefix = "a1.policy_inst_metadata."
+ a1HandlerPrefix = "a1.policy_handler."
)
var typeAlreadyError = errors.New("Policy Type already exists")
return nil
}
+
+
func toStringKeys(val interface{}) (interface{}, error) {
var err error
switch val := val.(type) {
return operation, nil
}
+func (rh *Resthook) storePolicyInstanceMetadata(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) (bool, error) {
+
+ creation_timestamp := time.Now()
+ instanceMetadataKey := a1InstanceMetadataPrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "." + string(policyInstanceID)
+
+ a1.Logger.Debug("key : %+v", instanceMetadataKey)
+
+ var metadatajson []interface{}
+ metadatajson = append(metadatajson, map[string]string{"created_at": creation_timestamp.Format("2006-01-02 15:04:05"), "has_been_deleted": "False"})
+ metadata, _ := json.Marshal(metadatajson)
+
+ a1.Logger.Debug("policyinstanceMetaData to create : %+v", string(metadata))
+
+ err := rh.db.Set(a1MediatorNs, instanceMetadataKey, string(metadata))
+
+ if err != nil {
+ a1.Logger.Error("error :%+v", err)
+ return false, err
+ }
+
+ a1.Logger.Debug("Policy Instance Meta Data created at :%+v", creation_timestamp)
+
+ return true, nil
+}
+
func (rh *Resthook) CreatePolicyInstance(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID, httpBody interface{}) error {
a1.Logger.Debug("CreatePolicyInstance function")
// validate the PUT against the schema
httpBodyString := fmt.Sprint((httpBody))
isvalid := validate(httpBodyString, schemaString)
if isvalid {
- operation, err := rh.StorePolicyInstance(policyTypeId, policyInstanceID, httpBody)
+ var operation string
+ operation, err = rh.StorePolicyInstance(policyTypeId, policyInstanceID, httpBody)
if err != nil {
a1.Logger.Error("error :%+v", err)
return err
}
a1.Logger.Debug("policy instance :%+v", operation)
+ iscreated,errmetadata := rh.StorePolicyInstanceMetadata(policyTypeId, policyInstanceID)
+ if errmetadata != nil {
+ a1.Logger.Error("error :%+v", errmetadata)
+ return errmetadata
+ }
+ if iscreated {
+ a1.Logger.Debug("policy instance metadata created")
+ }
} else {
a1.Logger.Error("%+v", invalidJsonSchema)
return invalidJsonSchema
valStr := fmt.Sprint(instanceMap[instancekey])
return valStr, nil
}
+
+func (rh *Resthook) GetAllPolicyInstance(policyTypeId models.PolicyTypeID) []models.PolicyInstanceID ,error {
+ a1.Logger.Debug("GetAllPolicyInstance")
+ var policyTypeInstances = []models.PolicyInstanceID{}
+
+ keys, err := rh.db.GetAll("A1m_ns")
+
+ if err != nil {
+ a1.Logger.Error("error in retrieving policy. err: %v", err)
+ return policyTypeInstances ,err
+ }
+ a1.Logger.Debug("keys : %+v", keys)
+ typekey := a1InstancePrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "."
+
+ for _, key := range keys {
+ if strings.HasPrefix(strings.TrimLeft(key, " "), typekey) {
+ pti := strings.Split(strings.Trim(key, " "), typekey)[1]
+ a1.Logger.Debug("pti %+v", pti)
+ policyTypeInstances = append(policyTypeInstances, models.PolicyInstanceID(pti))
+ }
+ }
+
+ if len(policyTypeInstances)==0{
+ a1.Logger.Debug("policy instance Not Present ")
+ }
+
+ a1.Logger.Debug("return : %+v", policyTypeInstances)
+ return policyTypeInstances ,nil
+}