From 43d4b549ab60c2810c19b84831e994ad8c268c4a Mon Sep 17 00:00:00 2001
From: Yashvardhan Kukreja <yash.kukreja.98@gmail.com>
Date: Sat, 30 Oct 2021 02:56:04 +0530
Subject: [PATCH] Fix: RuleResult label to be correctly populated while
 registering respective metrics

Signed-off-by: Yashvardhan Kukreja <yash.kukreja.98@gmail.com>
---
 .../policyExecutionDuration.go                   | 16 ++++++++++++++--
 pkg/metrics/policyresults/policyResults.go       | 16 ++++++++++++++--
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/pkg/metrics/policyexecutionduration/policyExecutionDuration.go b/pkg/metrics/policyexecutionduration/policyExecutionDuration.go
index 0bc6aa1d6f..3383467105 100644
--- a/pkg/metrics/policyexecutionduration/policyExecutionDuration.go
+++ b/pkg/metrics/policyexecutionduration/policyExecutionDuration.go
@@ -83,9 +83,21 @@ func (pc PromConfig) ProcessEngineResponse(policy kyverno.ClusterPolicy, engineR
 	for _, rule := range ruleResponses {
 		ruleName := rule.Name
 		ruleType := ParseRuleTypeFromEngineRuleResponse(rule)
-		ruleResult := metrics.Fail
-		if rule.Status == response.RuleStatusPass {
+
+		var ruleResult metrics.RuleResult
+		switch rule.Status {
+		case response.RuleStatusPass:
 			ruleResult = metrics.Pass
+		case response.RuleStatusFail:
+			ruleResult = metrics.Fail
+		case response.RuleStatusWarn:
+			ruleResult = metrics.Warn
+		case response.RuleStatusError:
+			ruleResult = metrics.Error
+		case response.RuleStatusSkip:
+			ruleResult = metrics.Skip
+		default:
+			ruleResult = metrics.Fail
 		}
 
 		ruleExecutionLatencyInSeconds := float64(rule.RuleStats.ProcessingTime) / float64(1000*1000*1000)
diff --git a/pkg/metrics/policyresults/policyResults.go b/pkg/metrics/policyresults/policyResults.go
index 63bd9a4177..d0ce2ea3ce 100644
--- a/pkg/metrics/policyresults/policyResults.go
+++ b/pkg/metrics/policyresults/policyResults.go
@@ -76,9 +76,21 @@ func (pc PromConfig) ProcessEngineResponse(policy kyverno.ClusterPolicy, engineR
 	for _, rule := range ruleResponses {
 		ruleName := rule.Name
 		ruleType := ParseRuleTypeFromEngineRuleResponse(rule)
-		ruleResult := metrics.Fail
-		if rule.Status == response.RuleStatusPass {
+
+		var ruleResult metrics.RuleResult
+		switch rule.Status {
+		case response.RuleStatusPass:
 			ruleResult = metrics.Pass
+		case response.RuleStatusFail:
+			ruleResult = metrics.Fail
+		case response.RuleStatusWarn:
+			ruleResult = metrics.Warn
+		case response.RuleStatusError:
+			ruleResult = metrics.Error
+		case response.RuleStatusSkip:
+			ruleResult = metrics.Skip
+		default:
+			ruleResult = metrics.Fail
 		}
 
 		if err := pc.registerPolicyResultsMetric(