// HandleRPC implements per-RPC tracing and stats instrumentation.
func (c *statsHandler) HandleRPC(ctx context.Context, rs stats.RPCStats) {
switch rs := rs.(type) {
case *stats.InHeader:
if rs.Client {
fmt.Printf(rs.Header)
}
case *stats.End:
ign := false
c.lock.RLock()
ign = c.ignore
c.lock.RUnlock()
if !ign {
duration := rs.EndTime.Sub(rs.BeginTime)
var st string
s, ok := status.FromError(rs.Error)
if ok {
st = s.Code().String()
}
c.results <- &callResult{rs.Error, st, duration, rs.EndTime}
if c.hasLog {
c.log.Debugw("Received RPC Stats",
"statsID", c.id, "code", st, "error", rs.Error,
"duration", duration, "stats", rs)
}
}
}
}
我在事件*stats.InHeader
中输入了response metadata
,在事件*stats.End
中输入了grpc stats
的其余部分,我想在grPC调用结束时将metadata
和grpc stats
组合成一个 struct 对象callResult
.我不知道如何实现这一点,我真的是新手go grPC.有人能帮助我吗,谢谢!