Runtime logs (#1447)
* Runtime logs * Slightly broken * Pushing for diff * Log trailing works locally * LogsOptions * Comments and streamcount support for local logs * Adding kubernetes logs * Fixing k8s logs * K8s fixes * StreamCount is now nuked * PR comments * PR comments again * Fix typo
This commit is contained in:
		| @@ -7,6 +7,7 @@ import ( | ||||
| 	"github.com/micro/go-micro/v2/client" | ||||
| 	"github.com/micro/go-micro/v2/runtime" | ||||
| 	pb "github.com/micro/go-micro/v2/runtime/service/proto" | ||||
| 	"github.com/micro/go-micro/v2/util/log" | ||||
| ) | ||||
|  | ||||
| type svc struct { | ||||
| @@ -64,6 +65,53 @@ func (s *svc) Create(svc *runtime.Service, opts ...runtime.CreateOption) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (s *svc) Logs(service *runtime.Service, options ...runtime.LogsOption) (runtime.LogStream, error) { | ||||
| 	ls, err := s.runtime.Logs(context.Background(), &pb.LogsRequest{ | ||||
| 		Service: service.Name, | ||||
| 		Stream:  true, | ||||
| 		Count:   10, // @todo pass in actual options | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	logStream := &serviceLogStream{ | ||||
| 		service: service.Name, | ||||
| 		stream:  make(chan runtime.LogRecord), | ||||
| 		stop:    make(chan bool), | ||||
| 	} | ||||
| 	go func() { | ||||
| 		for { | ||||
| 			record := runtime.LogRecord{} | ||||
| 			err := ls.RecvMsg(&record) | ||||
| 			if err != nil { | ||||
| 				log.Error(err) | ||||
| 			} | ||||
| 			logStream.stream <- record | ||||
| 		} | ||||
| 	}() | ||||
| 	return logStream, nil | ||||
| } | ||||
|  | ||||
| type serviceLogStream struct { | ||||
| 	service string | ||||
| 	stream  chan runtime.LogRecord | ||||
| 	stop    chan bool | ||||
| } | ||||
|  | ||||
| func (l *serviceLogStream) Chan() chan runtime.LogRecord { | ||||
| 	return l.stream | ||||
| } | ||||
|  | ||||
| func (l *serviceLogStream) Stop() error { | ||||
| 	select { | ||||
| 	case <-l.stop: | ||||
| 		return nil | ||||
| 	default: | ||||
| 		close(l.stop) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Read returns the service with the given name from the runtime | ||||
| func (s *svc) Read(opts ...runtime.ReadOption) ([]*runtime.Service, error) { | ||||
| 	options := runtime.ReadOptions{} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user