+
+func (rh *Resthook) DeletePolicyType(policyTypeId models.PolicyTypeID) error {
+ a1.Logger.Debug("DeletePolicyType")
+
+ policyinstances, err := rh.GetAllPolicyInstance(policyTypeId)
+ if err != nil {
+ a1.Logger.Error("error in retrieving policy. err: %v", err)
+ return err
+ }
+
+ var keys [1]string
+ key := a1PolicyPrefix + strconv.FormatInt((int64(policyTypeId)), 10)
+ keys[0] = key
+ if len(policyinstances) == 0 {
+ err := rh.db.Remove(a1MediatorNs, keys[:])
+ if err != nil {
+ a1.Logger.Error("error in deleting policy type err: %v", err)
+ return err
+ }
+ } else {
+ a1.Logger.Error("tried to delete a type that isn't empty")
+ return policyTypeCanNotBeDeletedError
+ }
+ return nil
+}
+
+func (rh *Resthook) typeValidity(policyTypeId models.PolicyTypeID) error {
+ var keys [1]string
+
+ typekey := a1PolicyPrefix + strconv.FormatInt((int64(policyTypeId)), 10)
+ keys[0] = typekey
+
+ a1.Logger.Debug("key1 : %+v", typekey)
+ valmap, err := rh.db.Get(a1MediatorNs, keys[:])
+ if err != nil {
+ a1.Logger.Error("error in retrieving policytype err: %v", err)
+ return err
+ }
+ if len(valmap) == 0 {
+ a1.Logger.Error("policy type Not Present for policyid : %v", policyTypeId)
+ return policyTypeNotFoundError
+ }
+}
+
+func (rh *Resthook) instanceValidity(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) error {
+ err := rh.typeValidity(policyTypeId)
+ if err != nil {
+ return err
+ }
+ policyTypeInstances, err := rh.GetPolicyInstance(policyTypeId, policyInstanceID)
+ if err != nil {
+ a1.Logger.Error("policy instance error : %v", err)
+ return err
+ }
+ if len(policyTypeInstances.(string)) == 0 {
+ a1.Logger.Debug("policy instance Not Present ")
+ return policyInstanceNotFoundError
+ }
+}
+
+func (rh *Resthook) getMetaData(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) (map[string]interface{}, error) {
+ instanceMetadataKey := a1InstanceMetadataPrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "." + string(policyInstanceID)
+ a1.Logger.Debug("instanceMetadata key : %+v", instanceMetadataKey)
+ var keys [1]string
+ keys[0] = instanceMetadataKey
+ instanceMetadataMap, err := rh.db.Get(a1MediatorNs, keys[:])
+ if err != nil {
+ a1.Logger.Error("policy instance error : %v", err)
+ }
+ a1.Logger.Debug("instanceMetadata map : %+v", instanceMetadataMap)
+ if instanceMetadataMap[instanceMetadataKey] == nil {
+ a1.Logger.Error("policy instance Not Present for policyinstaneid : %v", policyInstanceID)
+ return map[string]interface{}{}, policyInstanceNotFoundError
+ }
+ return instanceMetadataMap, nil
+}
+
+func (rh *Resthook) GetPolicyInstanceStatus(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) (*a1_mediator.A1ControllerGetPolicyInstanceStatusOKBody, error) {
+ err := rh.instanceValidity(policyTypeId, policyInstanceID)
+ if err != nil && err == policyInstanceNotFoundError || err == policyTypeNotFoundError {
+ policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
+ return &policyInstanceStatus, err
+ }
+ policyInstanceStatus := a1_mediator.A1ControllerGetPolicyInstanceStatusOKBody{}
+ 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)
+ if err != nil {
+ a1.Logger.Error("marshal error : %v", err)
+ return &policyInstanceStatus, err
+ }
+
+ if err := json.Unmarshal(jsonbody, &policyInstanceStatus); err != nil {
+ a1.Logger.Error("unmarshal error : %v", err)
+ //this error maps to 503 error but can be mapped to 500: internal error
+ return &policyInstanceStatus, err
+ }
+ if policyInstanceStatus.HasBeenDeleted == false {
+ policyInstanceStatus.InstanceStatus = "IN EFFECT"
+ } else {
+ policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
+ }
+ return &policyInstanceStatus, nil
+}