pkg/rules/fiberv2/fiber_server_setup_v2.go (48 lines of code) (raw):

// Copyright (c) 2024 Alibaba Group Holding Ltd. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package fiberv2 import ( "context" "net/url" _ "unsafe" "github.com/alibaba/opentelemetry-go-auto-instrumentation/pkg/api" fiber "github.com/gofiber/fiber/v2" "github.com/valyala/fasthttp" ) var fiberv2ServerInstrumenter = BuildFiberV2ServerOtelInstrumenter() //go:linkname fiberHttpOnEnterv2 github.com/gofiber/fiber/v2.fiberHttpOnEnterv2 func fiberHttpOnEnterv2(call api.CallContext, app *fiber.App, ctx *fasthttp.RequestCtx) { if !fiberV2Enabler.Enable() { return } u, err := url.Parse(ctx.URI().String()) if err != nil { return } request := &fiberv2Request{ method: string(ctx.Method()), url: u, isTls: ctx.IsTLS(), header: &ctx.Request.Header, } ctxSpan := fiberv2ServerInstrumenter.Start(ctx, request) data := make(map[string]interface{}, 2) data["ctx"] = ctx data["ctxSpan"] = ctxSpan data["request"] = request call.SetData(data) return } //go:linkname fiberHttpOnExitv2 github.com/gofiber/fiber/v2.fiberHttpOnExitv2 func fiberHttpOnExitv2(call api.CallContext) { if call.GetData() == nil { return } data := call.GetData().(map[string]interface{}) ctx := data["ctx"].(*fasthttp.RequestCtx) ctxSpan := data["ctxSpan"].(context.Context) request, ok := data["request"].(*fiberv2Request) if !ok { return } fiberv2ServerInstrumenter.End(ctxSpan, request, &fiberv2Response{ statusCode: ctx.Response.StatusCode(), header: &ctx.Response.Header, }, nil) }