123456789101112131415161718192021222324252627 |
- package middleware
- import (
- "github.com/gin-gonic/gin"
- "github.com/opentracing/opentracing-go"
- )
- // Trace 链路追踪
- func Trace() gin.HandlerFunc {
- return func(ctx *gin.Context) {
- var sp opentracing.Span
- opName := ctx.Request.URL.Path
- // Attempt to join a trace by getting trace context from the headers.
- wireContext, err := opentracing.GlobalTracer().Extract(
- opentracing.TextMap,
- opentracing.HTTPHeadersCarrier(ctx.Request.Header))
- if err != nil {
- // If for whatever reason we can't join, go ahead an start a new root span.
- sp = opentracing.StartSpan(opName)
- } else {
- sp = opentracing.StartSpan(opName, opentracing.ChildOf(wireContext))
- }
- ctx.Set("traceSpan", sp)
- ctx.Next()
- sp.Finish()
- }
- }
|