...
1
18
19 package protoconv
20
21 import (
22 "time"
23
24 "google.golang.org/grpc/codes"
25 "google.golang.org/grpc/internal/channelz"
26 "google.golang.org/grpc/status"
27 "google.golang.org/protobuf/types/known/timestamppb"
28
29 channelzpb "google.golang.org/grpc/channelz/grpc_channelz_v1"
30 )
31
32 func serverToProto(sm *channelz.Server) *channelzpb.Server {
33 s := &channelzpb.Server{}
34 s.Ref = &channelzpb.ServerRef{ServerId: sm.ID, Name: sm.RefName}
35
36 s.Data = &channelzpb.ServerData{
37 CallsStarted: sm.ServerMetrics.CallsStarted.Load(),
38 CallsSucceeded: sm.ServerMetrics.CallsSucceeded.Load(),
39 CallsFailed: sm.ServerMetrics.CallsFailed.Load(),
40 }
41
42 if ts := timestamppb.New(time.Unix(0, sm.ServerMetrics.LastCallStartedTimestamp.Load())); ts.IsValid() {
43 s.Data.LastCallStartedTimestamp = ts
44 }
45 lss := sm.ListenSockets()
46 sockets := make([]*channelzpb.SocketRef, 0, len(lss))
47 for id, ref := range lss {
48 sockets = append(sockets, &channelzpb.SocketRef{SocketId: id, Name: ref})
49 }
50 s.ListenSocket = sockets
51 return s
52 }
53
54
55
56
57 func GetServers(startID int64, len int) (servers []*channelzpb.Server, end bool) {
58 srvs, end := channelz.GetServers(startID, len)
59 for _, srv := range srvs {
60 servers = append(servers, serverToProto(srv))
61 }
62 return servers, end
63 }
64
65
66
67 func GetServer(id int64) (*channelzpb.Server, error) {
68 srv := channelz.GetServer(id)
69 if srv == nil {
70 return nil, status.Errorf(codes.NotFound, "requested server %d not found", id)
71 }
72 return serverToProto(srv), nil
73 }
74
View as plain text