2021-07-23 21:46:50 +05:30
package admissionrequests
import (
2021-09-11 03:09:12 +05:30
"fmt"
2021-07-23 21:46:50 +05:30
"github.com/kyverno/kyverno/pkg/engine/response"
"github.com/kyverno/kyverno/pkg/metrics"
2022-04-04 17:31:33 +02:00
"github.com/kyverno/kyverno/pkg/utils"
2021-07-23 21:46:50 +05:30
)
2022-04-06 20:14:13 +02:00
func registerAdmissionRequestsMetric (
2022-07-11 23:19:47 +05:30
m * metrics . MetricsConfig ,
2021-09-02 06:56:25 +05:30
resourceKind , resourceNamespace string ,
2021-07-23 21:46:50 +05:30
resourceRequestOperation metrics . ResourceRequestOperation ,
) error {
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_requests_total metric as the operation belongs to the namespace '%s' which is one of 'namespaces.exclude' %+v in values.yaml" , resourceNamespace , excludeNamespaces ) )
2021-09-11 03:09:12 +05:30
return nil
}
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_requests_total metric as the operation belongs to the namespace '%s' which is not one of 'namespaces.include' %+v in values.yaml" , resourceNamespace , includeNamespaces ) )
2021-09-11 03:09:12 +05:30
return nil
}
2022-07-11 23:19:47 +05:30
m . RecordAdmissionRequests ( resourceKind , resourceNamespace , resourceRequestOperation )
2021-07-23 21:46:50 +05:30
return nil
}
2022-07-11 23:19:47 +05:30
func ProcessEngineResponses ( m * metrics . MetricsConfig , engineResponses [ ] * response . EngineResponse , resourceRequestOperation metrics . ResourceRequestOperation ) error {
2021-07-23 21:46:50 +05:30
if len ( engineResponses ) == 0 {
return nil
}
2021-09-02 06:56:25 +05:30
resourceNamespace , resourceKind := engineResponses [ 0 ] . PolicyResponse . Resource . Namespace , engineResponses [ 0 ] . PolicyResponse . Resource . Kind
2022-04-06 20:14:13 +02:00
validateRulesCount , mutateRulesCount , generateRulesCount := 0 , 0 , 0
2021-07-23 21:46:50 +05:30
for _ , e := range engineResponses {
for _ , rule := range e . PolicyResponse . Rules {
switch rule . Type {
case "Validation" :
validateRulesCount ++
case "Mutation" :
mutateRulesCount ++
case "Generation" :
generateRulesCount ++
}
}
}
2022-04-06 20:14:13 +02:00
if validateRulesCount == 0 && mutateRulesCount == 0 && generateRulesCount == 0 {
2021-07-23 21:46:50 +05:30
return nil
}
2022-07-11 23:19:47 +05:30
return registerAdmissionRequestsMetric ( m , resourceKind , resourceNamespace , resourceRequestOperation )
2021-07-23 21:46:50 +05:30
}