pkg/utils/grpc.go (33 lines of code) (raw):

package utils import ( "context" "fmt" "strings" "time" "github.com/Azure/secrets-store-csi-driver-provider-azure/pkg/metrics" "google.golang.org/grpc" "google.golang.org/grpc/status" "k8s.io/klog/v2" ) func ParseEndpoint(ep string) (string, string, error) { if strings.HasPrefix(strings.ToLower(ep), "unix://") || strings.HasPrefix(strings.ToLower(ep), "tcp://") { s := strings.SplitN(ep, "://", 2) if s[1] != "" { return s[0], s[1], nil } } return "", "", fmt.Errorf("invalid endpoint: %v", ep) } // LogInterceptor is a gRPC interceptor that logs the gRPC requests and responses. // It also publishes metrics for the gRPC requests. func LogInterceptor() grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { start := time.Now() reporter := metrics.NewStatsReporter() ctxDeadline, _ := ctx.Deadline() klog.V(5).InfoS("request", "method", info.FullMethod, "deadline", time.Until(ctxDeadline).String()) resp, err := handler(ctx, req) s, _ := status.FromError(err) klog.V(5).InfoS("response", "method", info.FullMethod, "duration", time.Since(start).String(), "code", s.Code().String(), "message", s.Message()) reporter.ReportGRPCRequest(ctx, time.Since(start).Seconds(), info.FullMethod, s.Code().String(), s.Message()) return resp, err } }