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