generated from TrueCloudLab/basic
30 lines
1 KiB
Go
30 lines
1 KiB
Go
package http
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-platform/tracing"
|
|
"github.com/valyala/fasthttp"
|
|
"go.opentelemetry.io/otel/attribute"
|
|
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
|
|
"go.opentelemetry.io/otel/trace"
|
|
)
|
|
|
|
// StartServerSpan starts root HTTP server span.
|
|
func StartServerSpan(ctx context.Context, req *fasthttp.RequestCtx, operationName string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {
|
|
ctx = extractHTTPTraceInfo(ctx, req)
|
|
opts = append(opts, trace.WithAttributes(
|
|
attribute.String("http.client_address", req.RemoteAddr().String()),
|
|
attribute.String("http.path", string(req.Path())),
|
|
semconv.HTTPMethod(string(req.Method())),
|
|
), trace.WithSpanKind(trace.SpanKindServer))
|
|
return tracing.StartSpanFromContext(ctx, operationName, opts...)
|
|
}
|
|
|
|
func extractHTTPTraceInfo(ctx context.Context, req *fasthttp.RequestCtx) context.Context {
|
|
if req == nil {
|
|
return ctx
|
|
}
|
|
carrier := &httpCarrier{r: req}
|
|
return tracing.Propagator.Extract(ctx, carrier)
|
|
}
|