1 回答

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
在您的 實(shí)現(xiàn)中TagRPC,您可以創(chuàng)建一個(gè)結(jié)構(gòu)并將指向它的指針添加到上下文中。然后通過(guò)對(duì) 的連續(xù)調(diào)用在其中添加信息HandleRPC。因此,如果您需要 Payload 中僅在*stats.InPayload調(diào)用中可用的內(nèi)容,您可以將其拉出并將其存儲(chǔ)在添加到上下文的結(jié)構(gòu)中,然后在HandleRPC再次調(diào)用時(shí)訪問(wèn)它*stats.End
type recorderCtxKey struct{}
type recorder struct {
size int64
}
func (sl *statsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context {
return context.WithValue(ctx, rpcStatCtxKey{}, &recorder{})
}
func (h *statsHandler) HandleRPC(ctx context.Context, rpcStats stats.RPCStats) {
switch stat := rpcStats.(type) {
case *stats.InPayload:
r, _ := ctx.Value(recorderContextKey{}).(*Recorder)
r.size += stat.WireLength
case *stats.End:
durationMs := stat.EndTime.Sub(stat.BeginTime).Seconds() * 1000.0
r, _ := ctx.Value(recorderContextKey{}).(*Recorder)
# use r.size #
}
}
- 1 回答
- 0 關(guān)注
- 90 瀏覽
添加回答
舉報(bào)