Files
3ybactuk-marketplace-go-ser…/loms/internal/infra/grpc/middleware/tracing.go
Никита Шубин 4396bebe80 [hw-7] add metrics, tracing
2025-07-26 14:15:40 +00:00

39 lines
838 B
Go

package mw
import (
"context"
"strings"
"go.opentelemetry.io/otel/codes"
"google.golang.org/grpc"
"google.golang.org/grpc/status"
"route256/loms/internal/infra/tracing"
)
func WithTracing(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) {
service, method := splitFullMethod(info.FullMethod)
ctx, span := tracing.Tracer().Start(ctx, service+"/"+method)
defer span.End()
resp, err := handler(ctx, req)
if err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, status.Convert(err).Message())
} else {
span.SetStatus(codes.Ok, "OK")
}
return resp, err
}
func splitFullMethod(full string) (service, method string) {
full = strings.TrimPrefix(full, "/")
if i := strings.Index(full, "/"); i >= 0 {
return full[:i], full[i+1:]
}
return "unknown", full
}