Files
Atay-Makhzan/modules/web/routing/context.go
T

70 lines
1.7 KiB
Go
Raw Normal View History

2022-01-20 19:41:25 +08:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2022-01-20 19:41:25 +08:00
package routing
import (
"context"
"net/http"
2025-01-22 02:57:07 +08:00
"code.gitea.io/gitea/modules/gtprof"
2026-03-29 12:24:30 +02:00
"code.gitea.io/gitea/modules/log"
2025-01-22 02:57:07 +08:00
"code.gitea.io/gitea/modules/reqctx"
2022-01-20 19:41:25 +08:00
)
type contextKeyType struct{}
var contextKey contextKeyType
// RecordFuncInfo records a func info into context
func RecordFuncInfo(ctx context.Context, funcInfo *FuncInfo) (end func()) {
end = func() {}
2025-01-22 02:57:07 +08:00
if reqCtx := reqctx.FromContext(ctx); reqCtx != nil {
var traceSpan *gtprof.TraceSpan
traceSpan, end = gtprof.GetTracer().StartInContext(reqCtx, "http.func")
traceSpan.SetAttributeString("func", funcInfo.shortName)
}
if record, ok := ctx.Value(contextKey).(*requestRecord); ok {
record.lock.Lock()
record.funcInfo = funcInfo
record.lock.Unlock()
2022-01-20 19:41:25 +08:00
}
return end
2022-01-20 19:41:25 +08:00
}
2022-07-12 17:32:37 -04:00
// MarkLongPolling marks the request is a long-polling request, and the logger may output different message for it
2022-01-20 19:41:25 +08:00
func MarkLongPolling(resp http.ResponseWriter, req *http.Request) {
record, ok := req.Context().Value(contextKey).(*requestRecord)
if !ok {
return
}
record.lock.Lock()
record.isLongPolling = true
2026-03-29 12:24:30 +02:00
record.logLevel = log.TRACE
record.lock.Unlock()
}
func MarkLogLevelTrace(resp http.ResponseWriter, req *http.Request) {
record, ok := req.Context().Value(contextKey).(*requestRecord)
if !ok {
return
}
record.lock.Lock()
record.logLevel = log.TRACE
2022-01-20 19:41:25 +08:00
record.lock.Unlock()
}
2022-01-20 18:46:10 +01:00
// UpdatePanicError updates a context's error info, a panic may be recovered by other middlewares, but we still need to know that.
2026-03-08 17:59:46 +08:00
func UpdatePanicError(ctx context.Context, err error) {
2022-01-20 19:41:25 +08:00
record, ok := ctx.Value(contextKey).(*requestRecord)
if !ok {
return
}
record.lock.Lock()
record.panicError = err
record.lock.Unlock()
}