Files
common/jaeger/jaeger.go

56 lines
1.3 KiB
Go

package jaeger
import (
"context"
"encoding/json"
"github.com/gogf/gf/contrib/trace/otlphttp/v2"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/net/gtrace"
"go.opentelemetry.io/otel/attribute"
"strconv"
)
var ShutDown func(ctx context.Context)
func init() {
jaegerAgent, err := g.Cfg().Get(context.Background(), "jaeger.addr")
if err != nil {
panic(err)
}
serverName, err := g.Cfg().Get(context.Background(), "server.Name")
if err != nil {
panic(err)
}
ShutDown, err = otlphttp.Init(serverName.String(), jaegerAgent.String(), "/v1/traces")
if err != nil {
panic(err)
}
}
func NewTracer(r *ghttp.Request) {
_, span := gtrace.NewSpan(r.Context(), r.GetServeHandler().GetMetaTag("summary"))
defer span.End()
span.SetAttributes(attribute.String("request", getParams(r)))
r.Middleware.Next()
span.SetAttributes(attribute.String("response", r.Response.BufferString()))
}
func getParams(r *ghttp.Request) string {
params := map[string]interface{}{}
if r.Method == "POST" {
json.Unmarshal(r.GetBody(), &params) //获取raw传参
}
if r.Method == "GET" {
r.Request.ParseForm()
form := r.Form
for k, v := range form {
if vl, e := strconv.Atoi(v[0]); e == nil {
params[k] = vl
} else {
params[k] = v[0]
}
}
}
rp, _ := json.Marshal(&params)
return string(rp)
}