diff --git a/api/kyverno/v1/policy_interface.go b/api/kyverno/v1/policy_interface.go
index 009e430dd8..752359ff24 100644
--- a/api/kyverno/v1/policy_interface.go
+++ b/api/kyverno/v1/policy_interface.go
@@ -17,4 +17,5 @@ type PolicyInterface interface {
 	Validate(sets.String) field.ErrorList
 	GetKind() string
 	CreateDeepCopy() PolicyInterface
+	IsReady() bool
 }
diff --git a/pkg/metrics/admissionrequests/admissionRequests.go b/pkg/metrics/admissionrequests/admissionRequests.go
index c5c813d0fc..e31f808183 100644
--- a/pkg/metrics/admissionrequests/admissionRequests.go
+++ b/pkg/metrics/admissionrequests/admissionRequests.go
@@ -9,7 +9,8 @@ import (
 	prom "github.com/prometheus/client_golang/prometheus"
 )
 
-func (pc PromConfig) registerAdmissionRequestsMetric(
+func registerAdmissionRequestsMetric(
+	pc *metrics.PromConfig,
 	resourceKind, resourceNamespace string,
 	resourceRequestOperation metrics.ResourceRequestOperation,
 ) error {
@@ -30,14 +31,13 @@ func (pc PromConfig) registerAdmissionRequestsMetric(
 	return nil
 }
 
-func (pc PromConfig) ProcessEngineResponses(engineResponses []*response.EngineResponse, resourceRequestOperation metrics.ResourceRequestOperation) error {
+func ProcessEngineResponses(pc *metrics.PromConfig, engineResponses []*response.EngineResponse, resourceRequestOperation metrics.ResourceRequestOperation) error {
 	if len(engineResponses) == 0 {
 		return nil
 	}
 	resourceNamespace, resourceKind := engineResponses[0].PolicyResponse.Resource.Namespace, engineResponses[0].PolicyResponse.Resource.Kind
-	totalValidateRulesCount, totalMutateRulesCount, totalGenerateRulesCount := 0, 0, 0
+	validateRulesCount, mutateRulesCount, generateRulesCount := 0, 0, 0
 	for _, e := range engineResponses {
-		validateRulesCount, mutateRulesCount, generateRulesCount := 0, 0, 0
 		for _, rule := range e.PolicyResponse.Rules {
 			switch rule.Type {
 			case "Validation":
@@ -48,17 +48,9 @@ func (pc PromConfig) ProcessEngineResponses(engineResponses []*response.EngineRe
 				generateRulesCount++
 			}
 		}
-		// no rules triggered
-		if validateRulesCount+mutateRulesCount+generateRulesCount == 0 {
-			continue
-		}
-
-		totalValidateRulesCount += validateRulesCount
-		totalMutateRulesCount += mutateRulesCount
-		totalGenerateRulesCount += generateRulesCount
 	}
-	if totalValidateRulesCount+totalMutateRulesCount+totalGenerateRulesCount == 0 {
+	if validateRulesCount == 0 && mutateRulesCount == 0 && generateRulesCount == 0 {
 		return nil
 	}
-	return pc.registerAdmissionRequestsMetric(resourceKind, resourceNamespace, resourceRequestOperation)
+	return registerAdmissionRequestsMetric(pc, resourceKind, resourceNamespace, resourceRequestOperation)
 }
diff --git a/pkg/metrics/admissionrequests/parsers.go b/pkg/metrics/admissionrequests/parsers.go
deleted file mode 100644
index e1fcdc7a6b..0000000000
--- a/pkg/metrics/admissionrequests/parsers.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package admissionrequests
-
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-func ParsePromMetrics(pm metrics.PromMetrics) PromMetrics {
-	return PromMetrics(pm)
-}
-
-func ParsePromConfig(pc metrics.PromConfig) PromConfig {
-	return PromConfig(pc)
-}
diff --git a/pkg/metrics/admissionrequests/types.go b/pkg/metrics/admissionrequests/types.go
deleted file mode 100644
index 953561b09b..0000000000
--- a/pkg/metrics/admissionrequests/types.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package admissionrequests
-
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-type PromMetrics metrics.PromMetrics
-
-type PromConfig metrics.PromConfig
diff --git a/pkg/metrics/admissionreviewduration/admissionReviewDuration.go b/pkg/metrics/admissionreviewduration/admissionReviewDuration.go
index a89796ef1e..55d2e70a69 100644
--- a/pkg/metrics/admissionreviewduration/admissionReviewDuration.go
+++ b/pkg/metrics/admissionreviewduration/admissionReviewDuration.go
@@ -9,7 +9,8 @@ import (
 	prom "github.com/prometheus/client_golang/prometheus"
 )
 
-func (pc PromConfig) registerAdmissionReviewDurationMetric(
+func registerAdmissionReviewDurationMetric(
+	pc *metrics.PromConfig,
 	resourceKind, resourceNamespace string,
 	resourceRequestOperation metrics.ResourceRequestOperation,
 	admissionRequestLatency float64,
@@ -31,14 +32,13 @@ func (pc PromConfig) registerAdmissionReviewDurationMetric(
 	return nil
 }
 
-func (pc PromConfig) ProcessEngineResponses(engineResponses []*response.EngineResponse, admissionReviewLatencyDuration int64, resourceRequestOperation metrics.ResourceRequestOperation) error {
+func ProcessEngineResponses(pc *metrics.PromConfig, engineResponses []*response.EngineResponse, admissionReviewLatencyDuration int64, resourceRequestOperation metrics.ResourceRequestOperation) error {
 	if len(engineResponses) == 0 {
 		return nil
 	}
 	resourceNamespace, resourceKind := engineResponses[0].PolicyResponse.Resource.Namespace, engineResponses[0].PolicyResponse.Resource.Kind
-	totalValidateRulesCount, totalMutateRulesCount, totalGenerateRulesCount := 0, 0, 0
+	validateRulesCount, mutateRulesCount, generateRulesCount := 0, 0, 0
 	for _, e := range engineResponses {
-		validateRulesCount, mutateRulesCount, generateRulesCount := 0, 0, 0
 		for _, rule := range e.PolicyResponse.Rules {
 			switch rule.Type {
 			case "Validation":
@@ -49,18 +49,10 @@ func (pc PromConfig) ProcessEngineResponses(engineResponses []*response.EngineRe
 				generateRulesCount++
 			}
 		}
-		// no rules triggered
-		if validateRulesCount+mutateRulesCount+generateRulesCount == 0 {
-			continue
-		}
-
-		totalValidateRulesCount += validateRulesCount
-		totalMutateRulesCount += mutateRulesCount
-		totalGenerateRulesCount += generateRulesCount
 	}
-	if totalValidateRulesCount+totalMutateRulesCount+totalGenerateRulesCount == 0 {
+	if validateRulesCount == 0 && mutateRulesCount == 0 && generateRulesCount == 0 {
 		return nil
 	}
 	admissionReviewLatencyDurationInSeconds := float64(admissionReviewLatencyDuration) / float64(1000*1000*1000)
-	return pc.registerAdmissionReviewDurationMetric(resourceKind, resourceNamespace, resourceRequestOperation, admissionReviewLatencyDurationInSeconds)
+	return registerAdmissionReviewDurationMetric(pc, resourceKind, resourceNamespace, resourceRequestOperation, admissionReviewLatencyDurationInSeconds)
 }
diff --git a/pkg/metrics/admissionreviewduration/parsers.go b/pkg/metrics/admissionreviewduration/parsers.go
deleted file mode 100644
index bd0f79baab..0000000000
--- a/pkg/metrics/admissionreviewduration/parsers.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package admissionreviewduration
-
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-func ParsePromMetrics(pm metrics.PromMetrics) PromMetrics {
-	return PromMetrics(pm)
-}
-
-func ParsePromConfig(pc metrics.PromConfig) PromConfig {
-	return PromConfig(pc)
-}
diff --git a/pkg/metrics/admissionreviewduration/types.go b/pkg/metrics/admissionreviewduration/types.go
deleted file mode 100644
index 9130bdffb9..0000000000
--- a/pkg/metrics/admissionreviewduration/types.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package admissionreviewduration
-
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-type PromMetrics metrics.PromMetrics
-
-type PromConfig metrics.PromConfig
diff --git a/pkg/metrics/parsers.go b/pkg/metrics/parsers.go
index d66e4e568a..a947296e2d 100644
--- a/pkg/metrics/parsers.go
+++ b/pkg/metrics/parsers.go
@@ -5,6 +5,7 @@ import (
 	"reflect"
 
 	kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
+	"github.com/kyverno/kyverno/pkg/engine/response"
 )
 
 func ParsePolicyValidationMode(validationFailureAction kyverno.ValidationFailureAction) (PolicyValidationMode, error) {
@@ -52,3 +53,29 @@ func ParseResourceRequestOperation(requestOperationStr string) (ResourceRequestO
 		return "", fmt.Errorf("unknown request operation made by resource: %s. Allowed requests: 'CREATE', 'UPDATE', 'DELETE', 'CONNECT'", requestOperationStr)
 	}
 }
+
+func ParseRuleTypeFromEngineRuleResponse(rule response.RuleResponse) RuleType {
+	switch rule.Type {
+	case "Validation":
+		return Validate
+	case "Mutation":
+		return Mutate
+	case "Generation":
+		return Generate
+	default:
+		return EmptyRuleType
+	}
+}
+
+func GetPolicyInfos(policy kyverno.PolicyInterface) (string, string, PolicyType, PolicyBackgroundMode, PolicyValidationMode, error) {
+	name := policy.GetName()
+	namespace := ""
+	policyType := Cluster
+	if policy.IsNamespaced() {
+		namespace = policy.GetNamespace()
+		policyType = Namespaced
+	}
+	backgroundMode := ParsePolicyBackgroundMode(policy)
+	validationMode, err := ParsePolicyValidationMode(policy.GetSpec().GetValidationFailureAction())
+	return name, namespace, policyType, backgroundMode, validationMode, err
+}
diff --git a/pkg/metrics/policychanges/parsers.go b/pkg/metrics/policychanges/parsers.go
deleted file mode 100644
index b8de3e0605..0000000000
--- a/pkg/metrics/policychanges/parsers.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package policychanges
-
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-func ParsePromMetrics(pm metrics.PromMetrics) PromMetrics {
-	return PromMetrics(pm)
-}
-
-func ParsePromConfig(pc metrics.PromConfig) PromConfig {
-	return PromConfig(pc)
-}
diff --git a/pkg/metrics/policychanges/policyChanges.go b/pkg/metrics/policychanges/policyChanges.go
index d61a59f3bd..c271912112 100644
--- a/pkg/metrics/policychanges/policyChanges.go
+++ b/pkg/metrics/policychanges/policyChanges.go
@@ -9,7 +9,8 @@ import (
 	prom "github.com/prometheus/client_golang/prometheus"
 )
 
-func (pc PromConfig) registerPolicyChangesMetric(
+func registerPolicyChangesMetric(
+	pc *metrics.PromConfig,
 	policyValidationMode metrics.PolicyValidationMode,
 	policyType metrics.PolicyType,
 	policyBackgroundMode metrics.PolicyBackgroundMode,
@@ -39,35 +40,13 @@ func (pc PromConfig) registerPolicyChangesMetric(
 	return nil
 }
 
-func (pc PromConfig) RegisterPolicy(policy interface{}, policyChangeType PolicyChangeType) error {
-	switch inputPolicy := policy.(type) {
-	case *kyverno.ClusterPolicy:
-		policyValidationMode, err := metrics.ParsePolicyValidationMode(inputPolicy.Spec.GetValidationFailureAction())
-		if err != nil {
-			return err
-		}
-		policyBackgroundMode := metrics.ParsePolicyBackgroundMode(inputPolicy)
-		policyType := metrics.Cluster
-		policyNamespace := "" // doesn't matter for cluster policy
-		policyName := inputPolicy.GetName()
-		if err = pc.registerPolicyChangesMetric(policyValidationMode, policyType, policyBackgroundMode, policyNamespace, policyName, policyChangeType); err != nil {
-			return err
-		}
-		return nil
-	case *kyverno.Policy:
-		policyValidationMode, err := metrics.ParsePolicyValidationMode(inputPolicy.Spec.GetValidationFailureAction())
-		if err != nil {
-			return err
-		}
-		policyBackgroundMode := metrics.ParsePolicyBackgroundMode(inputPolicy)
-		policyType := metrics.Namespaced
-		policyNamespace := inputPolicy.GetNamespace()
-		policyName := inputPolicy.GetName()
-		if err = pc.registerPolicyChangesMetric(policyValidationMode, policyType, policyBackgroundMode, policyNamespace, policyName, policyChangeType); err != nil {
-			return err
-		}
-		return nil
-	default:
-		return fmt.Errorf("wrong input type provided %T. Only kyverno.Policy and kyverno.ClusterPolicy allowed", inputPolicy)
+func RegisterPolicy(pc *metrics.PromConfig, policy kyverno.PolicyInterface, policyChangeType PolicyChangeType) error {
+	name, namespace, policyType, backgroundMode, validationMode, err := metrics.GetPolicyInfos(policy)
+	if err != nil {
+		return err
 	}
+	if err = registerPolicyChangesMetric(pc, validationMode, policyType, backgroundMode, namespace, name, policyChangeType); err != nil {
+		return err
+	}
+	return nil
 }
diff --git a/pkg/metrics/policychanges/types.go b/pkg/metrics/policychanges/types.go
index bf17ea3dff..2387aad625 100644
--- a/pkg/metrics/policychanges/types.go
+++ b/pkg/metrics/policychanges/types.go
@@ -1,9 +1,5 @@
 package policychanges
 
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
 type PolicyChangeType string
 
 const (
@@ -11,7 +7,3 @@ const (
 	PolicyUpdated PolicyChangeType = "updated"
 	PolicyDeleted PolicyChangeType = "deleted"
 )
-
-type PromMetrics metrics.PromMetrics
-
-type PromConfig metrics.PromConfig
diff --git a/pkg/metrics/policyexecutionduration/parsers.go b/pkg/metrics/policyexecutionduration/parsers.go
deleted file mode 100644
index b7f2b9895f..0000000000
--- a/pkg/metrics/policyexecutionduration/parsers.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package policyexecutionduration
-
-import (
-	"github.com/kyverno/kyverno/pkg/engine/response"
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-func ParsePromMetrics(pm metrics.PromMetrics) PromMetrics {
-	return PromMetrics(pm)
-}
-
-func ParsePromConfig(pc metrics.PromConfig) PromConfig {
-	return PromConfig(pc)
-}
-
-func ParseRuleTypeFromEngineRuleResponse(rule response.RuleResponse) metrics.RuleType {
-	switch rule.Type {
-	case "Validation":
-		return metrics.Validate
-	case "Mutation":
-		return metrics.Mutate
-	case "Generation":
-		return metrics.Generate
-	default:
-		return metrics.EmptyRuleType
-	}
-}
diff --git a/pkg/metrics/policyexecutionduration/policyExecutionDuration.go b/pkg/metrics/policyexecutionduration/policyExecutionDuration.go
index ed154750f3..961eab3d25 100644
--- a/pkg/metrics/policyexecutionduration/policyExecutionDuration.go
+++ b/pkg/metrics/policyexecutionduration/policyExecutionDuration.go
@@ -10,7 +10,8 @@ import (
 	prom "github.com/prometheus/client_golang/prometheus"
 )
 
-func (pc PromConfig) registerPolicyExecutionDurationMetric(
+func registerPolicyExecutionDurationMetric(
+	pc *metrics.PromConfig,
 	policyValidationMode metrics.PolicyValidationMode,
 	policyType metrics.PolicyType,
 	policyBackgroundMode metrics.PolicyBackgroundMode,
@@ -59,31 +60,18 @@ func (pc PromConfig) registerPolicyExecutionDurationMetric(
 
 //policy - policy related data
 //engineResponse - resource and rule related data
-func (pc PromConfig) ProcessEngineResponse(policy kyverno.PolicyInterface, engineResponse response.EngineResponse, executionCause metrics.RuleExecutionCause, generateRuleLatencyType string, resourceRequestOperation metrics.ResourceRequestOperation) error {
-	policyValidationMode, err := metrics.ParsePolicyValidationMode(policy.GetSpec().GetValidationFailureAction())
+func ProcessEngineResponse(pc *metrics.PromConfig, policy kyverno.PolicyInterface, engineResponse response.EngineResponse, executionCause metrics.RuleExecutionCause, generateRuleLatencyType string, resourceRequestOperation metrics.ResourceRequestOperation) error {
+	name, namespace, policyType, backgroundMode, validationMode, err := metrics.GetPolicyInfos(policy)
 	if err != nil {
 		return err
 	}
-	policyType := metrics.Namespaced
-	policyBackgroundMode := metrics.ParsePolicyBackgroundMode(policy)
-	policyNamespace := policy.GetNamespace()
-	if policyNamespace == "" {
-		policyNamespace = "-"
-		policyType = metrics.Cluster
-	}
-	policyName := policy.GetName()
-
 	resourceSpec := engineResponse.PolicyResponse.Resource
-
 	resourceKind := resourceSpec.Kind
 	resourceNamespace := resourceSpec.Namespace
-
 	ruleResponses := engineResponse.PolicyResponse.Rules
-
 	for _, rule := range ruleResponses {
 		ruleName := rule.Name
-		ruleType := ParseRuleTypeFromEngineRuleResponse(rule)
-
+		ruleType := metrics.ParseRuleTypeFromEngineRuleResponse(rule)
 		var ruleResult metrics.RuleResult
 		switch rule.Status {
 		case response.RuleStatusPass:
@@ -99,14 +87,13 @@ func (pc PromConfig) ProcessEngineResponse(policy kyverno.PolicyInterface, engin
 		default:
 			ruleResult = metrics.Fail
 		}
-
 		ruleExecutionLatencyInSeconds := float64(rule.RuleStats.ProcessingTime) / float64(1000*1000*1000)
-
-		if err := pc.registerPolicyExecutionDurationMetric(
-			policyValidationMode,
+		if err := registerPolicyExecutionDurationMetric(
+			pc,
+			validationMode,
 			policyType,
-			policyBackgroundMode,
-			policyNamespace, policyName,
+			backgroundMode,
+			namespace, name,
 			resourceKind, resourceNamespace,
 			resourceRequestOperation,
 			ruleName,
diff --git a/pkg/metrics/policyexecutionduration/types.go b/pkg/metrics/policyexecutionduration/types.go
deleted file mode 100644
index 01375f6dc5..0000000000
--- a/pkg/metrics/policyexecutionduration/types.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package policyexecutionduration
-
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-type PromMetrics metrics.PromMetrics
-
-type PromConfig metrics.PromConfig
diff --git a/pkg/metrics/policyresults/parsers.go b/pkg/metrics/policyresults/parsers.go
deleted file mode 100644
index 8bc8baee6d..0000000000
--- a/pkg/metrics/policyresults/parsers.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package policyresults
-
-import (
-	"github.com/kyverno/kyverno/pkg/engine/response"
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-func ParsePromMetrics(pm metrics.PromMetrics) PromMetrics {
-	return PromMetrics(pm)
-}
-
-func ParsePromConfig(pc metrics.PromConfig) PromConfig {
-	return PromConfig(pc)
-}
-
-func ParseRuleTypeFromEngineRuleResponse(rule response.RuleResponse) metrics.RuleType {
-	switch rule.Type {
-	case "Validation":
-		return metrics.Validate
-	case "Mutation":
-		return metrics.Mutate
-	case "Generation":
-		return metrics.Generate
-	default:
-		return metrics.EmptyRuleType
-	}
-}
diff --git a/pkg/metrics/policyresults/policyResults.go b/pkg/metrics/policyresults/policyResults.go
index 33d9323496..b1358f1fff 100644
--- a/pkg/metrics/policyresults/policyResults.go
+++ b/pkg/metrics/policyresults/policyResults.go
@@ -10,7 +10,8 @@ import (
 	prom "github.com/prometheus/client_golang/prometheus"
 )
 
-func (pc PromConfig) registerPolicyResultsMetric(
+func registerPolicyResultsMetric(
+	pc *metrics.PromConfig,
 	policyValidationMode metrics.PolicyValidationMode,
 	policyType metrics.PolicyType,
 	policyBackgroundMode metrics.PolicyBackgroundMode,
@@ -53,31 +54,18 @@ func (pc PromConfig) registerPolicyResultsMetric(
 
 //policy - policy related data
 //engineResponse - resource and rule related data
-func (pc PromConfig) ProcessEngineResponse(policy kyverno.PolicyInterface, engineResponse response.EngineResponse, executionCause metrics.RuleExecutionCause, resourceRequestOperation metrics.ResourceRequestOperation) error {
-	policyValidationMode, err := metrics.ParsePolicyValidationMode(policy.GetSpec().GetValidationFailureAction())
+func ProcessEngineResponse(pc *metrics.PromConfig, policy kyverno.PolicyInterface, engineResponse response.EngineResponse, executionCause metrics.RuleExecutionCause, resourceRequestOperation metrics.ResourceRequestOperation) error {
+	name, namespace, policyType, backgroundMode, validationMode, err := metrics.GetPolicyInfos(policy)
 	if err != nil {
 		return err
 	}
-	policyType := metrics.Namespaced
-	policyBackgroundMode := metrics.ParsePolicyBackgroundMode(policy)
-	policyNamespace := policy.GetNamespace()
-	if policyNamespace == "" {
-		policyNamespace = "-"
-		policyType = metrics.Cluster
-	}
-	policyName := policy.GetName()
-
 	resourceSpec := engineResponse.PolicyResponse.Resource
-
 	resourceKind := resourceSpec.Kind
 	resourceNamespace := resourceSpec.Namespace
-
 	ruleResponses := engineResponse.PolicyResponse.Rules
-
 	for _, rule := range ruleResponses {
 		ruleName := rule.Name
-		ruleType := ParseRuleTypeFromEngineRuleResponse(rule)
-
+		ruleType := metrics.ParseRuleTypeFromEngineRuleResponse(rule)
 		var ruleResult metrics.RuleResult
 		switch rule.Status {
 		case response.RuleStatusPass:
@@ -93,12 +81,12 @@ func (pc PromConfig) ProcessEngineResponse(policy kyverno.PolicyInterface, engin
 		default:
 			ruleResult = metrics.Fail
 		}
-
-		if err := pc.registerPolicyResultsMetric(
-			policyValidationMode,
+		if err := registerPolicyResultsMetric(
+			pc,
+			validationMode,
 			policyType,
-			policyBackgroundMode,
-			policyNamespace, policyName,
+			backgroundMode,
+			namespace, name,
 			resourceKind, resourceNamespace,
 			resourceRequestOperation,
 			ruleName,
diff --git a/pkg/metrics/policyresults/types.go b/pkg/metrics/policyresults/types.go
deleted file mode 100644
index a5b48af153..0000000000
--- a/pkg/metrics/policyresults/types.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package policyresults
-
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
-type PromMetrics metrics.PromMetrics
-
-type PromConfig metrics.PromConfig
diff --git a/pkg/metrics/policyruleinfo/parsers.go b/pkg/metrics/policyruleinfo/parsers.go
index b3eeb7de91..d5d23dd4da 100644
--- a/pkg/metrics/policyruleinfo/parsers.go
+++ b/pkg/metrics/policyruleinfo/parsers.go
@@ -2,8 +2,6 @@ package policyruleinfo
 
 import (
 	"fmt"
-
-	"github.com/kyverno/kyverno/pkg/metrics"
 )
 
 func ParsePolicyRuleInfoMetricChangeType(change string) (PolicyRuleInfoMetricChangeType, error) {
@@ -15,11 +13,3 @@ func ParsePolicyRuleInfoMetricChangeType(change string) (PolicyRuleInfoMetricCha
 	}
 	return "", fmt.Errorf("wrong policy rule count metric change type found %s. Allowed: '%s', '%s'", change, "created", "deleted")
 }
-
-func ParsePromMetrics(pm metrics.PromMetrics) PromMetrics {
-	return PromMetrics(pm)
-}
-
-func ParsePromConfig(pc metrics.PromConfig) PromConfig {
-	return PromConfig(pc)
-}
diff --git a/pkg/metrics/policyruleinfo/policyRuleInfo.go b/pkg/metrics/policyruleinfo/policyRuleInfo.go
index c22d260ff9..b45527f2e3 100644
--- a/pkg/metrics/policyruleinfo/policyRuleInfo.go
+++ b/pkg/metrics/policyruleinfo/policyRuleInfo.go
@@ -10,7 +10,8 @@ import (
 	prom "github.com/prometheus/client_golang/prometheus"
 )
 
-func (pc PromConfig) registerPolicyRuleInfoMetric(
+func registerPolicyRuleInfoMetric(
+	pc *metrics.PromConfig,
 	policyValidationMode metrics.PolicyValidationMode,
 	policyType metrics.PolicyType,
 	policyBackgroundMode metrics.PolicyBackgroundMode,
@@ -28,7 +29,6 @@ func (pc PromConfig) registerPolicyRuleInfoMetric(
 	default:
 		return fmt.Errorf("unknown metric change type found:  %s", metricChangeType)
 	}
-
 	includeNamespaces, excludeNamespaces := pc.Config.GetIncludeNamespaces(), pc.Config.GetExcludeNamespaces()
 	if (policyNamespace != "" && policyNamespace != "-") && utils.ContainsString(excludeNamespaces, policyNamespace) {
 		pc.Log.Info(fmt.Sprintf("Skipping the registration of kyverno_policy_rule_info_total metric as the operation belongs to the namespace '%s' which is one of 'namespaces.exclude' %+v in values.yaml", policyNamespace, excludeNamespaces))
@@ -38,16 +38,13 @@ func (pc PromConfig) registerPolicyRuleInfoMetric(
 		pc.Log.Info(fmt.Sprintf("Skipping the registration of kyverno_policy_rule_info_total metric as the operation belongs to the namespace '%s' which is not one of 'namespaces.include' %+v in values.yaml", policyNamespace, includeNamespaces))
 		return nil
 	}
-
 	if policyType == metrics.Cluster {
 		policyNamespace = "-"
 	}
-
 	status := "false"
 	if ready {
 		status = "true"
 	}
-
 	pc.Metrics.PolicyRuleInfo.With(prom.Labels{
 		"policy_validation_mode": string(policyValidationMode),
 		"policy_type":            string(policyType),
@@ -58,99 +55,37 @@ func (pc PromConfig) registerPolicyRuleInfoMetric(
 		"rule_type":              string(ruleType),
 		"status_ready":           status,
 	}).Set(metricValue)
-
 	return nil
 }
 
-func (pc PromConfig) AddPolicy(policy interface{}) error {
-	switch inputPolicy := policy.(type) {
-	case *kyverno.ClusterPolicy:
-		policyValidationMode, err := metrics.ParsePolicyValidationMode(inputPolicy.Spec.GetValidationFailureAction())
-		if err != nil {
+func AddPolicy(pc *metrics.PromConfig, policy kyverno.PolicyInterface) error {
+	name, namespace, policyType, backgroundMode, validationMode, err := metrics.GetPolicyInfos(policy)
+	if err != nil {
+		return err
+	}
+	ready := policy.IsReady()
+	for _, rule := range autogen.ComputeRules(policy) {
+		ruleName := rule.Name
+		ruleType := metrics.ParseRuleType(rule)
+		if err = registerPolicyRuleInfoMetric(pc, validationMode, policyType, backgroundMode, namespace, name, ruleName, ruleType, PolicyRuleCreated, ready); err != nil {
 			return err
 		}
-		policyBackgroundMode := metrics.ParsePolicyBackgroundMode(inputPolicy)
-		policyType := metrics.Cluster
-		policyNamespace := "" // doesn't matter for cluster policy
-		policyName := inputPolicy.GetName()
-		ready := inputPolicy.IsReady()
-		// registering the metrics on a per-rule basis
-		for _, rule := range autogen.ComputeRules(inputPolicy) {
-			ruleName := rule.Name
-			ruleType := metrics.ParseRuleType(rule)
+	}
+	return nil
+}
 
-			if err = pc.registerPolicyRuleInfoMetric(policyValidationMode, policyType, policyBackgroundMode, policyNamespace, policyName, ruleName, ruleType, PolicyRuleCreated, ready); err != nil {
-				return err
-			}
-		}
-		return nil
-	case *kyverno.Policy:
-		policyValidationMode, err := metrics.ParsePolicyValidationMode(inputPolicy.Spec.GetValidationFailureAction())
-		if err != nil {
+func RemovePolicy(pc *metrics.PromConfig, policy kyverno.PolicyInterface) error {
+	name, namespace, policyType, backgroundMode, validationMode, err := metrics.GetPolicyInfos(policy)
+	if err != nil {
+		return err
+	}
+	ready := policy.IsReady()
+	for _, rule := range autogen.ComputeRules(policy) {
+		ruleName := rule.Name
+		ruleType := metrics.ParseRuleType(rule)
+		if err = registerPolicyRuleInfoMetric(pc, validationMode, policyType, backgroundMode, namespace, name, ruleName, ruleType, PolicyRuleDeleted, ready); err != nil {
 			return err
 		}
-		policyBackgroundMode := metrics.ParsePolicyBackgroundMode(inputPolicy)
-		policyType := metrics.Namespaced
-		policyNamespace := inputPolicy.GetNamespace()
-		policyName := inputPolicy.GetName()
-		ready := inputPolicy.IsReady()
-		// registering the metrics on a per-rule basis
-		for _, rule := range autogen.ComputeRules(inputPolicy) {
-			ruleName := rule.Name
-			ruleType := metrics.ParseRuleType(rule)
-
-			if err = pc.registerPolicyRuleInfoMetric(policyValidationMode, policyType, policyBackgroundMode, policyNamespace, policyName, ruleName, ruleType, PolicyRuleCreated, ready); err != nil {
-				return err
-			}
-		}
-		return nil
-	default:
-		return fmt.Errorf("wrong input type provided %T. Only kyverno.Policy and kyverno.ClusterPolicy allowed", inputPolicy)
 	}
-}
-
-func (pc PromConfig) RemovePolicy(policy interface{}) error {
-	switch inputPolicy := policy.(type) {
-	case *kyverno.ClusterPolicy:
-		for _, rule := range autogen.ComputeRules(inputPolicy) {
-			policyValidationMode, err := metrics.ParsePolicyValidationMode(inputPolicy.Spec.GetValidationFailureAction())
-			if err != nil {
-				return err
-			}
-			policyBackgroundMode := metrics.ParsePolicyBackgroundMode(inputPolicy)
-			policyType := metrics.Cluster
-			policyNamespace := "" // doesn't matter for cluster policy
-			policyName := inputPolicy.GetName()
-			ruleName := rule.Name
-			ruleType := metrics.ParseRuleType(rule)
-			ready := inputPolicy.IsReady()
-
-			if err = pc.registerPolicyRuleInfoMetric(policyValidationMode, policyType, policyBackgroundMode, policyNamespace, policyName, ruleName, ruleType, PolicyRuleDeleted, ready); err != nil {
-				return err
-			}
-		}
-		return nil
-	case *kyverno.Policy:
-		for _, rule := range autogen.ComputeRules(inputPolicy) {
-			policyValidationMode, err := metrics.ParsePolicyValidationMode(inputPolicy.Spec.GetValidationFailureAction())
-			if err != nil {
-				return err
-			}
-			policyBackgroundMode := metrics.ParsePolicyBackgroundMode(inputPolicy)
-			policyType := metrics.Namespaced
-			policyNamespace := inputPolicy.GetNamespace()
-			policyName := inputPolicy.GetName()
-			ruleName := rule.Name
-			ruleType := metrics.ParseRuleType(rule)
-			ready := inputPolicy.IsReady()
-
-			if err = pc.registerPolicyRuleInfoMetric(policyValidationMode, policyType, policyBackgroundMode, policyNamespace, policyName, ruleName, ruleType, PolicyRuleDeleted, ready); err != nil {
-				return err
-			}
-		}
-		return nil
-	default:
-		return fmt.Errorf("wrong input type provided %T. Only kyverno.Policy and kyverno.ClusterPolicy allowed", inputPolicy)
-	}
-
+	return nil
 }
diff --git a/pkg/metrics/policyruleinfo/types.go b/pkg/metrics/policyruleinfo/types.go
index 76fe23ec4b..b461b55080 100644
--- a/pkg/metrics/policyruleinfo/types.go
+++ b/pkg/metrics/policyruleinfo/types.go
@@ -1,16 +1,8 @@
 package policyruleinfo
 
-import (
-	"github.com/kyverno/kyverno/pkg/metrics"
-)
-
 type PolicyRuleInfoMetricChangeType string
 
 const (
 	PolicyRuleCreated PolicyRuleInfoMetricChangeType = "created"
 	PolicyRuleDeleted PolicyRuleInfoMetricChangeType = "deleted"
 )
-
-type PromMetrics metrics.PromMetrics
-
-type PromConfig metrics.PromConfig
diff --git a/pkg/policy/existing.go b/pkg/policy/existing.go
index 12f8a4ec62..42d9827ea9 100644
--- a/pkg/policy/existing.go
+++ b/pkg/policy/existing.go
@@ -62,13 +62,13 @@ func (pc *PolicyController) applyAndReportPerNamespace(policy kyverno.PolicyInte
 }
 
 func (pc *PolicyController) registerPolicyResultsMetricValidation(logger logr.Logger, policy kyverno.PolicyInterface, engineResponse response.EngineResponse) {
-	if err := policyResults.ParsePromConfig(*pc.promConfig).ProcessEngineResponse(policy, engineResponse, metrics.BackgroundScan, metrics.ResourceCreated); err != nil {
+	if err := policyResults.ProcessEngineResponse(pc.promConfig, policy, engineResponse, metrics.BackgroundScan, metrics.ResourceCreated); err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_results_total metrics for the above policy", "name", policy.GetName())
 	}
 }
 
 func (pc *PolicyController) registerPolicyExecutionDurationMetricValidate(logger logr.Logger, policy kyverno.PolicyInterface, engineResponse response.EngineResponse) {
-	if err := policyExecutionDuration.ParsePromConfig(*pc.promConfig).ProcessEngineResponse(policy, engineResponse, metrics.BackgroundScan, "", metrics.ResourceCreated); err != nil {
+	if err := policyExecutionDuration.ProcessEngineResponse(pc.promConfig, policy, engineResponse, metrics.BackgroundScan, "", metrics.ResourceCreated); err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_execution_duration_seconds metrics for the above policy", "name", policy.GetName())
 	}
 }
diff --git a/pkg/policy/metrics.go b/pkg/policy/metrics.go
index 9dd64f07fc..c7ecac669a 100644
--- a/pkg/policy/metrics.go
+++ b/pkg/policy/metrics.go
@@ -10,7 +10,7 @@ import (
 )
 
 func (pc *PolicyController) registerPolicyRuleInfoMetricAddPolicy(logger logr.Logger, p kyverno.PolicyInterface) {
-	err := policyRuleInfoMetric.ParsePromConfig(*pc.promConfig).AddPolicy(p)
+	err := policyRuleInfoMetric.AddPolicy(pc.promConfig, p)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_rule_info_total metrics for the above policy's creation", "name", p.GetName())
 	}
@@ -18,26 +18,26 @@ func (pc *PolicyController) registerPolicyRuleInfoMetricAddPolicy(logger logr.Lo
 
 func (pc *PolicyController) registerPolicyRuleInfoMetricUpdatePolicy(logger logr.Logger, oldP, curP kyverno.PolicyInterface) {
 	// removing the old rules associated metrics
-	err := policyRuleInfoMetric.ParsePromConfig(*pc.promConfig).RemovePolicy(oldP)
+	err := policyRuleInfoMetric.RemovePolicy(pc.promConfig, oldP)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_rule_info_total metrics for the above policy's updation", "name", oldP.GetName())
 	}
 	// adding the new rules associated metrics
-	err = policyRuleInfoMetric.ParsePromConfig(*pc.promConfig).AddPolicy(curP)
+	err = policyRuleInfoMetric.AddPolicy(pc.promConfig, curP)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_rule_info_total metrics for the above policy's updation", "name", oldP.GetName())
 	}
 }
 
 func (pc *PolicyController) registerPolicyRuleInfoMetricDeletePolicy(logger logr.Logger, p kyverno.PolicyInterface) {
-	err := policyRuleInfoMetric.ParsePromConfig(*pc.promConfig).RemovePolicy(p)
+	err := policyRuleInfoMetric.RemovePolicy(pc.promConfig, p)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_rule_info_total metrics for the above policy's deletion", "name", p.GetName())
 	}
 }
 
 func (pc *PolicyController) registerPolicyChangesMetricAddPolicy(logger logr.Logger, p kyverno.PolicyInterface) {
-	err := policyChangesMetric.ParsePromConfig(*pc.promConfig).RegisterPolicy(p, policyChangesMetric.PolicyCreated)
+	err := policyChangesMetric.RegisterPolicy(pc.promConfig, p, policyChangesMetric.PolicyCreated)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_changes_total metrics for the above policy's creation", "name", p.GetName())
 	}
@@ -49,13 +49,13 @@ func (pc *PolicyController) registerPolicyChangesMetricUpdatePolicy(logger logr.
 	if reflect.DeepEqual(oldSpec, curSpec) {
 		return
 	}
-	err := policyChangesMetric.ParsePromConfig(*pc.promConfig).RegisterPolicy(oldP, policyChangesMetric.PolicyUpdated)
+	err := policyChangesMetric.RegisterPolicy(pc.promConfig, oldP, policyChangesMetric.PolicyUpdated)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_changes_total metrics for the above policy's updation", "name", oldP.GetName())
 	}
 	// curP will require a new kyverno_policy_changes_total metric if the above update involved change in the following fields:
 	if curSpec.BackgroundProcessingEnabled() != oldSpec.BackgroundProcessingEnabled() || curSpec.GetValidationFailureAction() != oldSpec.GetValidationFailureAction() {
-		err = policyChangesMetric.ParsePromConfig(*pc.promConfig).RegisterPolicy(curP, policyChangesMetric.PolicyUpdated)
+		err = policyChangesMetric.RegisterPolicy(pc.promConfig, curP, policyChangesMetric.PolicyUpdated)
 		if err != nil {
 			logger.Error(err, "error occurred while registering kyverno_policy_changes_total metrics for the above policy's updation", "name", curP.GetName())
 		}
@@ -63,14 +63,14 @@ func (pc *PolicyController) registerPolicyChangesMetricUpdatePolicy(logger logr.
 }
 
 func (pc *PolicyController) registerPolicyChangesMetricDeletePolicy(logger logr.Logger, p kyverno.PolicyInterface) {
-	err := policyChangesMetric.ParsePromConfig(*pc.promConfig).RegisterPolicy(p, policyChangesMetric.PolicyDeleted)
+	err := policyChangesMetric.RegisterPolicy(pc.promConfig, p, policyChangesMetric.PolicyDeleted)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_changes_total metrics for the above policy's deletion", "name", p.GetName())
 	}
 }
 
 func (pc *PolicyController) registerPolicyRuleInfoMetricDeleteNsPolicy(logger logr.Logger, p *kyverno.Policy) {
-	err := policyRuleInfoMetric.ParsePromConfig(*pc.promConfig).RemovePolicy(p)
+	err := policyRuleInfoMetric.RemovePolicy(pc.promConfig, p)
 	if err != nil {
 		logger.Error(err, "error occurred while registering kyverno_policy_rule_info_total metrics for the above policy's deletion", "name", p.Name)
 	}
diff --git a/pkg/webhooks/metrics.go b/pkg/webhooks/metrics.go
index 0029110926..8e28a5f8ce 100644
--- a/pkg/webhooks/metrics.go
+++ b/pkg/webhooks/metrics.go
@@ -30,7 +30,7 @@ func registerMetric(logger logr.Logger, m string, requestOperation string, r rep
 
 func (ws *WebhookServer) registerAdmissionReviewDurationMetricMutate(logger logr.Logger, requestOperation string, engineResponses []*response.EngineResponse, admissionReviewLatencyDuration int64) {
 	registerMetric(logger, "kyverno_admission_review_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return admissionReviewDuration.ParsePromConfig(*ws.promConfig).ProcessEngineResponses(engineResponses, admissionReviewLatencyDuration, op)
+		return admissionReviewDuration.ProcessEngineResponses(ws.promConfig, engineResponses, admissionReviewLatencyDuration, op)
 	})
 }
 
@@ -38,13 +38,13 @@ func (ws *WebhookServer) registerAdmissionReviewDurationMetricGenerate(logger lo
 	defer close(*latencyReceiver)
 	defer close(*engineResponsesReceiver)
 	registerMetric(logger, "kyverno_admission_review_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return admissionReviewDuration.ParsePromConfig(*ws.promConfig).ProcessEngineResponses(<-(*engineResponsesReceiver), <-(*latencyReceiver), op)
+		return admissionReviewDuration.ProcessEngineResponses(ws.promConfig, <-(*engineResponsesReceiver), <-(*latencyReceiver), op)
 	})
 }
 
 func registerAdmissionReviewDurationMetricValidate(logger logr.Logger, promConfig *metrics.PromConfig, requestOperation string, engineResponses []*response.EngineResponse, admissionReviewLatencyDuration int64) {
 	registerMetric(logger, "kyverno_admission_review_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return admissionReviewDuration.ParsePromConfig(*promConfig).ProcessEngineResponses(engineResponses, admissionReviewLatencyDuration, op)
+		return admissionReviewDuration.ProcessEngineResponses(promConfig, engineResponses, admissionReviewLatencyDuration, op)
 	})
 }
 
@@ -52,20 +52,20 @@ func registerAdmissionReviewDurationMetricValidate(logger logr.Logger, promConfi
 
 func (ws *WebhookServer) registerAdmissionRequestsMetricMutate(logger logr.Logger, requestOperation string, engineResponses []*response.EngineResponse) {
 	registerMetric(logger, "kyverno_admission_requests_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return admissionRequests.ParsePromConfig(*ws.promConfig).ProcessEngineResponses(engineResponses, op)
+		return admissionRequests.ProcessEngineResponses(ws.promConfig, engineResponses, op)
 	})
 }
 
 func (ws *WebhookServer) registerAdmissionRequestsMetricGenerate(logger logr.Logger, requestOperation string, engineResponsesReceiver *chan []*response.EngineResponse) {
 	defer close(*engineResponsesReceiver)
 	registerMetric(logger, "kyverno_admission_requests_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return admissionRequests.ParsePromConfig(*ws.promConfig).ProcessEngineResponses(<-(*engineResponsesReceiver), op)
+		return admissionRequests.ProcessEngineResponses(ws.promConfig, <-(*engineResponsesReceiver), op)
 	})
 }
 
 func registerAdmissionRequestsMetricValidate(logger logr.Logger, promConfig *metrics.PromConfig, requestOperation string, engineResponses []*response.EngineResponse) {
 	registerMetric(logger, "kyverno_admission_requests_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return admissionRequests.ParsePromConfig(*promConfig).ProcessEngineResponses(engineResponses, op)
+		return admissionRequests.ProcessEngineResponses(promConfig, engineResponses, op)
 	})
 }
 
@@ -73,19 +73,19 @@ func registerAdmissionRequestsMetricValidate(logger logr.Logger, promConfig *met
 
 func (ws *WebhookServer) registerPolicyResultsMetricMutation(logger logr.Logger, requestOperation string, policy kyverno.PolicyInterface, engineResponse response.EngineResponse) {
 	registerMetric(logger, "kyverno_policy_results_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return policyResults.ParsePromConfig(*ws.promConfig).ProcessEngineResponse(policy, engineResponse, metrics.AdmissionRequest, op)
+		return policyResults.ProcessEngineResponse(ws.promConfig, policy, engineResponse, metrics.AdmissionRequest, op)
 	})
 }
 
 func registerPolicyResultsMetricValidation(logger logr.Logger, promConfig *metrics.PromConfig, requestOperation string, policy v1.PolicyInterface, engineResponse response.EngineResponse) {
 	registerMetric(logger, "kyverno_policy_results_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return policyResults.ParsePromConfig(*promConfig).ProcessEngineResponse(policy, engineResponse, metrics.AdmissionRequest, op)
+		return policyResults.ProcessEngineResponse(promConfig, policy, engineResponse, metrics.AdmissionRequest, op)
 	})
 }
 
 func (ws *WebhookServer) registerPolicyResultsMetricGeneration(logger logr.Logger, requestOperation string, policy kyverno.PolicyInterface, engineResponse response.EngineResponse) {
 	registerMetric(logger, "kyverno_policy_results_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return policyResults.ParsePromConfig(*ws.promConfig).ProcessEngineResponse(policy, engineResponse, metrics.AdmissionRequest, op)
+		return policyResults.ProcessEngineResponse(ws.promConfig, policy, engineResponse, metrics.AdmissionRequest, op)
 	})
 }
 
@@ -93,18 +93,18 @@ func (ws *WebhookServer) registerPolicyResultsMetricGeneration(logger logr.Logge
 
 func (ws *WebhookServer) registerPolicyExecutionDurationMetricMutate(logger logr.Logger, requestOperation string, policy kyverno.PolicyInterface, engineResponse response.EngineResponse) {
 	registerMetric(logger, "kyverno_policy_execution_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return policyExecutionDuration.ParsePromConfig(*ws.promConfig).ProcessEngineResponse(policy, engineResponse, metrics.AdmissionRequest, "", op)
+		return policyExecutionDuration.ProcessEngineResponse(ws.promConfig, policy, engineResponse, metrics.AdmissionRequest, "", op)
 	})
 }
 
 func registerPolicyExecutionDurationMetricValidate(logger logr.Logger, promConfig *metrics.PromConfig, requestOperation string, policy v1.PolicyInterface, engineResponse response.EngineResponse) {
 	registerMetric(logger, "kyverno_policy_execution_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return policyExecutionDuration.ParsePromConfig(*promConfig).ProcessEngineResponse(policy, engineResponse, metrics.AdmissionRequest, "", op)
+		return policyExecutionDuration.ProcessEngineResponse(promConfig, policy, engineResponse, metrics.AdmissionRequest, "", op)
 	})
 }
 
 func (ws *WebhookServer) registerPolicyExecutionDurationMetricGenerate(logger logr.Logger, requestOperation string, policy kyverno.PolicyInterface, engineResponse response.EngineResponse) {
 	registerMetric(logger, "kyverno_policy_execution_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
-		return policyExecutionDuration.ParsePromConfig(*ws.promConfig).ProcessEngineResponse(policy, engineResponse, metrics.AdmissionRequest, "", op)
+		return policyExecutionDuration.ProcessEngineResponse(ws.promConfig, policy, engineResponse, metrics.AdmissionRequest, "", op)
 	})
 }