in pkg/rules/kratos/http/kratos_internal_setup.go [55:98]
func ServerTracingMiddleWare() middleware.Middleware {
return func(handler middleware.Handler) middleware.Handler {
return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
if tr, ok := transport.FromServerContext(ctx); ok {
serviceName, serviceId, serviceVersion := "", "", ""
serviceEndpoint := make([]string, 0, 0)
serviceMeta := make(map[string]string)
app, hasApp := kt.FromContext(ctx)
if hasApp {
serviceName, serviceId, serviceVersion, serviceEndpoint = app.Name(), app.ID(), app.Version(), app.Endpoint()
serviceMeta = app.Metadata()
}
var (
request kratosRequest
sCtx context.Context
)
request = kratosRequest{
serviceId: serviceId,
serviceName: serviceName,
serviceVersion: serviceVersion,
serviceEndpoint: serviceEndpoint,
serviceMeta: serviceMeta,
}
switch tr.Kind() {
case transport.KindGRPC:
request.protocolType = "grpc"
sCtx = kratosInternalInstrument.Start(ctx, request)
case transport.KindHTTP:
request.protocolType = "http"
sCtx = kratosInternalInstrument.Start(ctx, request)
}
defer func() {
if err != nil {
kratosInternalInstrument.End(sCtx, request, nil, err)
} else {
kratosInternalInstrument.End(sCtx, request, nil, err)
}
}()
}
return handler(ctx, req)
}
}
}