mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-10 01:46:55 +00:00
* feat: make traces better Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * error Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
package handlers
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/go-logr/logr"
|
|
"github.com/kyverno/kyverno/pkg/metrics"
|
|
admissionRequests "github.com/kyverno/kyverno/pkg/metrics/admissionrequests"
|
|
admissionReviewDuration "github.com/kyverno/kyverno/pkg/metrics/admissionreviewduration"
|
|
"github.com/kyverno/kyverno/pkg/tracing"
|
|
"go.opentelemetry.io/otel/trace"
|
|
admissionv1 "k8s.io/api/admission/v1"
|
|
)
|
|
|
|
func (h AdmissionHandler) WithMetrics(metricsConfig *metrics.MetricsConfig) AdmissionHandler {
|
|
return withMetrics(metricsConfig, h)
|
|
}
|
|
|
|
func withMetrics(metricsConfig *metrics.MetricsConfig, inner AdmissionHandler) AdmissionHandler {
|
|
return func(ctx context.Context, logger logr.Logger, request *admissionv1.AdmissionRequest, startTime time.Time) *admissionv1.AdmissionResponse {
|
|
return tracing.Span1(
|
|
ctx,
|
|
"webhooks/handlers",
|
|
fmt.Sprintf("METRICS %s %s", request.Operation, request.Kind),
|
|
func(ctx context.Context, span trace.Span) *admissionv1.AdmissionResponse {
|
|
defer admissionReviewDuration.Process(metricsConfig, request, int64(time.Since(startTime)))
|
|
admissionRequests.Process(metricsConfig, request)
|
|
return inner(ctx, logger, request, startTime)
|
|
},
|
|
trace.WithAttributes(admissionRequestAttributes(request)...),
|
|
)
|
|
}
|
|
}
|