(ct *channelz.ChannelTrace)
| 51 | } |
| 52 | |
| 53 | func channelTraceToProto(ct *channelz.ChannelTrace) *channelzpb.ChannelTrace { |
| 54 | pbt := &channelzpb.ChannelTrace{} |
| 55 | if ct == nil { |
| 56 | return pbt |
| 57 | } |
| 58 | pbt.NumEventsLogged = ct.EventNum |
| 59 | if ts := timestamppb.New(ct.CreationTime); ts.IsValid() { |
| 60 | pbt.CreationTimestamp = ts |
| 61 | } |
| 62 | events := make([]*channelzpb.ChannelTraceEvent, 0, len(ct.Events)) |
| 63 | for _, e := range ct.Events { |
| 64 | cte := &channelzpb.ChannelTraceEvent{ |
| 65 | Description: e.Desc, |
| 66 | Severity: channelzpb.ChannelTraceEvent_Severity(e.Severity), |
| 67 | } |
| 68 | if ts := timestamppb.New(e.Timestamp); ts.IsValid() { |
| 69 | cte.Timestamp = ts |
| 70 | } |
| 71 | if e.RefID != 0 { |
| 72 | switch e.RefType { |
| 73 | case channelz.RefChannel: |
| 74 | cte.ChildRef = &channelzpb.ChannelTraceEvent_ChannelRef{ChannelRef: &channelzpb.ChannelRef{ChannelId: e.RefID, Name: e.RefName}} |
| 75 | case channelz.RefSubChannel: |
| 76 | cte.ChildRef = &channelzpb.ChannelTraceEvent_SubchannelRef{SubchannelRef: &channelzpb.SubchannelRef{SubchannelId: e.RefID, Name: e.RefName}} |
| 77 | } |
| 78 | } |
| 79 | events = append(events, cte) |
| 80 | } |
| 81 | pbt.Events = events |
| 82 | return pbt |
| 83 | } |
| 84 | |
| 85 | func channelToProto(cm *channelz.Channel) *channelzpb.Channel { |
| 86 | c := &channelzpb.Channel{} |
no outgoing calls
no test coverage detected