2 Star 1 Fork 1

mosache/YFrame

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
middleware.go 1.08 KB
一键复制 编辑 原始数据 按行查看 历史
ヤ沒脩袮兲︶ 提交于 2023-05-19 18:09 . temp
package opentelemetry
import (
"gitee.com/mosache/YFrame/rest"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
)
const instrumentationName = "gitee.com/mosache/YFrame/rest/middle/opentelemetry"
type MiddlewareBuilder struct {
Tracer trace.Tracer
}
func (m MiddlewareBuilder) Build() rest.MiddleWare {
if m.Tracer == nil {
m.Tracer = otel.GetTracerProvider().Tracer(instrumentationName)
}
return func(next rest.HandleFunc) rest.HandleFunc {
return func(ctx *rest.Context) {
reqCtx := ctx.Req.Context()
reqCtx = otel.GetTextMapPropagator().Extract(reqCtx, propagation.HeaderCarrier(ctx.Req.Header))
reqCtx, span := m.Tracer.Start(reqCtx, "unknown")
defer span.End()
span.SetAttributes(attribute.String("http.method", ctx.Req.Method))
span.SetAttributes(attribute.String("http.url", ctx.Req.URL.String()))
ctx.Req = ctx.Req.WithContext(reqCtx)
next(ctx)
span.SetName(ctx.MatchedRoute)
span.SetAttributes(attribute.Int("http.status", ctx.RespStatusCode))
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/mosache/YFrame.git
git@gitee.com:mosache/YFrame.git
mosache
YFrame
YFrame
v0.1.40

搜索帮助