starnet/request_trace.go

57 lines
1.4 KiB
Go
Raw Normal View History

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
}