Added debug/service to grab the logs from a service

This commit is contained in:
Milos Gajdos 2019-11-27 20:32:54 +00:00
parent b01357058a
commit 60e0e81523
No known key found for this signature in database
GPG Key ID: 8B31058CC55DFD4F
2 changed files with 90 additions and 0 deletions

7
debug/debug.go Normal file
View File

@ -0,0 +1,7 @@
// Package debug provides micro debug packages
package debug
var (
// DefaultName is the name of debug service
DefaultName = "go.micro.debug"
)

83
debug/service/service.go Normal file
View File

@ -0,0 +1,83 @@
package service
import (
"context"
"fmt"
"time"
"github.com/micro/go-micro/client"
"github.com/micro/go-micro/debug/log"
pb "github.com/micro/go-micro/debug/proto"
)
// Debug provides debug service client
type Debug struct {
dbg pb.DebugService
}
// NewDebug provides Debug service implementation
func NewDebug(name string) *Debug {
// create default client
cli := client.DefaultClient
return &Debug{
dbg: pb.NewDebugService(name, cli),
}
}
func (d *Debug) Logs(opts ...log.ReadOption) (<-chan log.Record, error) {
options := log.ReadOptions{}
// initialize the read options
for _, o := range opts {
o(&options)
}
req := &pb.LogRequest{}
if !options.Since.IsZero() {
req.Since = options.Since.UnixNano()
}
if options.Count > 0 {
req.Count = int64(options.Count)
}
// get the log stream
stream, err := d.dbg.Logs(context.Background(), req)
if err != nil {
return nil, fmt.Errorf("failed getting log stream: %s", err)
}
// log channel for streaming logs
logChan := make(chan log.Record)
// go stream logs
go d.streamLogs(logChan, stream)
return logChan, nil
}
func (d *Debug) streamLogs(logChan chan log.Record, stream pb.Debug_LogsService) {
defer stream.Close()
for {
resp, err := stream.Recv()
if err != nil {
break
}
metadata := make(map[string]string)
for k, v := range resp.Metadata {
metadata[k] = v
}
record := log.Record{
Timestamp: time.Unix(0, resp.Timestamp),
Value: resp.Value,
Metadata: metadata,
}
logChan <- record
}
close(logChan)
}