2021-07-23 21:46:50 +05:30
package admissionreviewduration
import (
2022-11-28 11:30:14 +01:00
"context"
2021-09-11 03:09:12 +05:30
"fmt"
2022-11-09 11:52:20 +01:00
"strings"
2021-09-11 03:09:12 +05:30
2021-07-23 21:46:50 +05:30
"github.com/kyverno/kyverno/pkg/metrics"
2022-04-04 17:31:33 +02:00
"github.com/kyverno/kyverno/pkg/utils"
2022-11-09 11:52:20 +01:00
admissionv1 "k8s.io/api/admission/v1"
2021-07-23 21:46:50 +05:30
)
2022-11-28 11:30:14 +01:00
func registerAdmissionReviewDurationMetric ( ctx context . Context , m * metrics . MetricsConfig , resourceKind , resourceNamespace string , resourceRequestOperation metrics . ResourceRequestOperation , admissionRequestLatency float64 , allowed bool ) {
2022-07-11 23:19:47 +05:30
includeNamespaces , excludeNamespaces := m . Config . GetIncludeNamespaces ( ) , m . Config . GetExcludeNamespaces ( )
2022-04-04 17:31:33 +02:00
if ( resourceNamespace != "" && resourceNamespace != "-" ) && utils . ContainsString ( excludeNamespaces , resourceNamespace ) {
2022-08-18 18:54:59 +05:30
m . Log . V ( 2 ) . Info ( fmt . Sprintf ( "Skipping the registration of kyverno_admission_review_duration_seconds metric as the operation belongs to the namespace '%s' which is one of 'namespaces.exclude' %+v in values.yaml" , resourceNamespace , excludeNamespaces ) )
2022-11-09 11:52:20 +01:00
return
2021-09-11 03:09:12 +05:30
}
2022-04-04 17:31:33 +02:00
if ( resourceNamespace != "" && resourceNamespace != "-" ) && len ( includeNamespaces ) > 0 && ! utils . ContainsString ( includeNamespaces , resourceNamespace ) {
2022-08-18 18:54:59 +05:30
m . Log . V ( 2 ) . Info ( fmt . Sprintf ( "Skipping the registration of kyverno_admission_review_duration_seconds metric as the operation belongs to the namespace '%s' which is not one of 'namespaces.include' %+v in values.yaml" , resourceNamespace , includeNamespaces ) )
2022-11-09 11:52:20 +01:00
return
2021-09-11 03:09:12 +05:30
}
2022-11-28 11:30:14 +01:00
m . RecordAdmissionReviewDuration ( ctx , resourceKind , resourceNamespace , string ( resourceRequestOperation ) , admissionRequestLatency , allowed )
2021-07-23 21:46:50 +05:30
}
2022-11-28 11:30:14 +01:00
func Process ( ctx context . Context , m * metrics . MetricsConfig , request * admissionv1 . AdmissionRequest , response * admissionv1 . AdmissionResponse , latency int64 ) {
2022-11-09 11:52:20 +01:00
op := strings . ToLower ( string ( request . Operation ) )
admissionReviewLatencyDurationInSeconds := float64 ( latency ) / float64 ( 1000 * 1000 * 1000 )
2022-11-28 11:30:14 +01:00
registerAdmissionReviewDurationMetric ( ctx , m , request . Kind . Kind , request . Namespace , metrics . ResourceRequestOperation ( op ) , admissionReviewLatencyDurationInSeconds , response . Allowed )
2021-07-23 21:46:50 +05:30
}