2026-04-19 15:39:51 +08:00
|
|
|
package starnet
|
|
|
|
|
|
|
|
|
|
// SetTraceHooks 设置请求 trace 回调。
|
|
|
|
|
func (r *Request) SetTraceHooks(hooks *TraceHooks) *Request {
|
|
|
|
|
return r.applyMutation(mutateTraceHooks(hooks))
|
|
|
|
|
}
|
2026-04-20 17:54:43 +08:00
|
|
|
|
|
|
|
|
// SetTraceRecorder 设置请求级 trace 摘要记录器。
|
|
|
|
|
// 记录器会保存最近一次已完成请求的摘要;若多个请求共享同一个记录器,则以最后一次完成的请求为准。
|
|
|
|
|
func (r *Request) SetTraceRecorder(recorder *TraceRecorder) *Request {
|
|
|
|
|
return r.applyMutation(mutateTraceRecorder(recorder))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TraceSummary 返回当前请求最近一次执行的 trace 摘要快照。
|
|
|
|
|
func (r *Request) TraceSummary() *TraceSummary {
|
|
|
|
|
if r == nil || r.lastTraceSummary == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
summary := cloneTraceSummary(*r.lastTraceSummary)
|
|
|
|
|
return &summary
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r *Request) startTraceExecution() {
|
|
|
|
|
if r == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
r.traceRun = nil
|
|
|
|
|
if r.traceRecorder == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
r.traceRun = r.traceRecorder.forkExecution()
|
|
|
|
|
if r.traceRun != nil {
|
|
|
|
|
r.traceRun.startRequest()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r *Request) finishTraceExecution(resp *Response) {
|
|
|
|
|
if r == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if r.traceRun == nil {
|
|
|
|
|
r.lastTraceSummary = nil
|
|
|
|
|
if resp != nil {
|
|
|
|
|
resp.traceSummary = nil
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
summary := r.traceRun.Summary()
|
|
|
|
|
r.lastTraceSummary = cloneTraceSummaryPtr(summary)
|
|
|
|
|
r.traceRecorder.publishSummary(summary)
|
|
|
|
|
if resp != nil {
|
|
|
|
|
resp.traceSummary = cloneTraceSummaryPtr(summary)
|
|
|
|
|
}
|
|
|
|
|
r.traceRun = nil
|
|
|
|
|
}
|