package starnet // SetTraceHooks 设置请求 trace 回调。 func (r *Request) SetTraceHooks(hooks *TraceHooks) *Request { return r.applyMutation(mutateTraceHooks(hooks)) } // 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 }