2022-09-09 06:11:16 +02:00
|
|
|
package utils
|
2022-03-31 17:34:10 +02:00
|
|
|
|
|
|
|
import (
|
2022-11-28 11:30:14 +01:00
|
|
|
"context"
|
2022-04-06 14:41:08 +02:00
|
|
|
"fmt"
|
|
|
|
|
2022-03-31 17:34:10 +02:00
|
|
|
"github.com/go-logr/logr"
|
2022-05-17 13:12:43 +02:00
|
|
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
2022-03-31 17:34:10 +02:00
|
|
|
"github.com/kyverno/kyverno/pkg/engine/response"
|
|
|
|
"github.com/kyverno/kyverno/pkg/metrics"
|
|
|
|
policyExecutionDuration "github.com/kyverno/kyverno/pkg/metrics/policyexecutionduration"
|
|
|
|
policyResults "github.com/kyverno/kyverno/pkg/metrics/policyresults"
|
|
|
|
)
|
|
|
|
|
2022-04-06 14:41:08 +02:00
|
|
|
type reporterFunc func(metrics.ResourceRequestOperation) error
|
|
|
|
|
|
|
|
func registerMetric(logger logr.Logger, m string, requestOperation string, r reporterFunc) {
|
|
|
|
if op, err := metrics.ParseResourceRequestOperation(requestOperation); err != nil {
|
|
|
|
logger.Error(err, fmt.Sprintf("error occurred while registering %s metrics", m))
|
|
|
|
} else {
|
|
|
|
if err := r(op); err != nil {
|
|
|
|
logger.Error(err, fmt.Sprintf("error occurred while registering %s metrics", m))
|
|
|
|
}
|
2022-03-31 17:34:10 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-06 14:41:08 +02:00
|
|
|
// POLICY RESULTS
|
|
|
|
|
2022-11-30 14:37:53 +01:00
|
|
|
func RegisterPolicyResultsMetricMutation(ctx context.Context, logger logr.Logger, metricsConfig metrics.MetricsConfigManager, requestOperation string, policy kyvernov1.PolicyInterface, engineResponse response.EngineResponse) {
|
2022-04-06 14:41:08 +02:00
|
|
|
registerMetric(logger, "kyverno_policy_results_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
|
2022-11-28 11:30:14 +01:00
|
|
|
return policyResults.ProcessEngineResponse(ctx, metricsConfig, policy, engineResponse, metrics.AdmissionRequest, op)
|
2022-04-06 14:41:08 +02:00
|
|
|
})
|
2022-03-31 17:34:10 +02:00
|
|
|
}
|
|
|
|
|
2022-11-30 14:37:53 +01:00
|
|
|
func RegisterPolicyResultsMetricValidation(ctx context.Context, logger logr.Logger, metricsConfig metrics.MetricsConfigManager, requestOperation string, policy kyvernov1.PolicyInterface, engineResponse response.EngineResponse) {
|
2022-04-06 14:41:08 +02:00
|
|
|
registerMetric(logger, "kyverno_policy_results_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
|
2022-11-28 11:30:14 +01:00
|
|
|
return policyResults.ProcessEngineResponse(ctx, metricsConfig, policy, engineResponse, metrics.AdmissionRequest, op)
|
2022-04-06 14:41:08 +02:00
|
|
|
})
|
2022-03-31 17:34:10 +02:00
|
|
|
}
|
|
|
|
|
2022-11-30 14:37:53 +01:00
|
|
|
func RegisterPolicyResultsMetricGeneration(ctx context.Context, logger logr.Logger, metricsConfig metrics.MetricsConfigManager, requestOperation string, policy kyvernov1.PolicyInterface, engineResponse response.EngineResponse) {
|
2022-04-06 14:41:08 +02:00
|
|
|
registerMetric(logger, "kyverno_policy_results_total", requestOperation, func(op metrics.ResourceRequestOperation) error {
|
2022-11-28 11:30:14 +01:00
|
|
|
return policyResults.ProcessEngineResponse(ctx, metricsConfig, policy, engineResponse, metrics.AdmissionRequest, op)
|
2022-04-06 14:41:08 +02:00
|
|
|
})
|
2022-03-31 17:34:10 +02:00
|
|
|
}
|
|
|
|
|
2022-04-06 14:41:08 +02:00
|
|
|
// POLICY EXECUTION
|
|
|
|
|
2022-11-30 14:37:53 +01:00
|
|
|
func RegisterPolicyExecutionDurationMetricMutate(ctx context.Context, logger logr.Logger, metricsConfig metrics.MetricsConfigManager, requestOperation string, policy kyvernov1.PolicyInterface, engineResponse response.EngineResponse) {
|
2022-04-06 14:41:08 +02:00
|
|
|
registerMetric(logger, "kyverno_policy_execution_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
|
2022-11-28 11:30:14 +01:00
|
|
|
return policyExecutionDuration.ProcessEngineResponse(ctx, metricsConfig, policy, engineResponse, metrics.AdmissionRequest, op)
|
2022-04-06 14:41:08 +02:00
|
|
|
})
|
2022-03-31 17:34:10 +02:00
|
|
|
}
|
|
|
|
|
2022-11-30 14:37:53 +01:00
|
|
|
func RegisterPolicyExecutionDurationMetricValidate(ctx context.Context, logger logr.Logger, metricsConfig metrics.MetricsConfigManager, requestOperation string, policy kyvernov1.PolicyInterface, engineResponse response.EngineResponse) {
|
2022-04-06 14:41:08 +02:00
|
|
|
registerMetric(logger, "kyverno_policy_execution_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
|
2022-11-28 11:30:14 +01:00
|
|
|
return policyExecutionDuration.ProcessEngineResponse(ctx, metricsConfig, policy, engineResponse, metrics.AdmissionRequest, op)
|
2022-04-06 14:41:08 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2022-11-30 14:37:53 +01:00
|
|
|
func RegisterPolicyExecutionDurationMetricGenerate(ctx context.Context, logger logr.Logger, metricsConfig metrics.MetricsConfigManager, requestOperation string, policy kyvernov1.PolicyInterface, engineResponse response.EngineResponse) {
|
2022-04-06 14:41:08 +02:00
|
|
|
registerMetric(logger, "kyverno_policy_execution_duration_seconds", requestOperation, func(op metrics.ResourceRequestOperation) error {
|
2022-11-28 11:30:14 +01:00
|
|
|
return policyExecutionDuration.ProcessEngineResponse(ctx, metricsConfig, policy, engineResponse, metrics.AdmissionRequest, op)
|
2022-04-06 14:41:08 +02:00
|
|
|
})
|
2022-03-31 17:34:10 +02:00
|
|
|
}
|