github.com/annwntech/go-micro/v2@v2.9.5/debug/service/client.go (about) 1 // Package service provides the service log 2 package service 3 4 import ( 5 "context" 6 "time" 7 8 "github.com/annwntech/go-micro/v2/client" 9 "github.com/annwntech/go-micro/v2/debug/log" 10 pb "github.com/annwntech/go-micro/v2/debug/service/proto" 11 ) 12 13 // Debug provides debug service client 14 type debugClient struct { 15 Client pb.DebugService 16 } 17 18 func (d *debugClient) Trace() ([]*pb.Span, error) { 19 rsp, err := d.Client.Trace(context.Background(), &pb.TraceRequest{}) 20 if err != nil { 21 return nil, err 22 } 23 return rsp.Spans, nil 24 } 25 26 // Logs queries the services logs and returns a channel to read the logs from 27 func (d *debugClient) Log(since time.Time, count int, stream bool) (log.Stream, error) { 28 req := &pb.LogRequest{} 29 if !since.IsZero() { 30 req.Since = since.Unix() 31 } 32 33 if count > 0 { 34 req.Count = int64(count) 35 } 36 37 // set whether to stream 38 req.Stream = stream 39 40 // get the log stream 41 serverStream, err := d.Client.Log(context.Background(), req) 42 if err != nil { 43 return nil, err 44 } 45 46 lg := &logStream{ 47 stream: make(chan log.Record), 48 stop: make(chan bool), 49 } 50 51 // go stream logs 52 go d.streamLogs(lg, serverStream) 53 54 return lg, nil 55 } 56 57 func (d *debugClient) streamLogs(lg *logStream, stream pb.Debug_LogService) { 58 defer stream.Close() 59 defer lg.Stop() 60 61 for { 62 resp, err := stream.Recv() 63 if err != nil { 64 break 65 } 66 67 metadata := make(map[string]string) 68 for k, v := range resp.Metadata { 69 metadata[k] = v 70 } 71 72 record := log.Record{ 73 Timestamp: time.Unix(resp.Timestamp, 0), 74 Message: resp.Message, 75 Metadata: metadata, 76 } 77 78 select { 79 case <-lg.stop: 80 return 81 case lg.stream <- record: 82 } 83 } 84 } 85 86 // NewClient provides a debug client 87 func NewClient(name string) *debugClient { 88 // create default client 89 cli := client.DefaultClient 90 91 return &debugClient{ 92 Client: pb.NewDebugService(name, cli), 93 } 94 }