Merge pull request #534 from docker/interupt

Poll ECS logs until context is canceled
This commit is contained in:
Guillaume Tardif 2020-08-21 16:20:36 +02:00 committed by GitHub
commit d85d963705
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 30 deletions

View File

@ -21,8 +21,6 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"os"
"os/signal"
"strconv" "strconv"
"strings" "strings"
@ -45,14 +43,7 @@ func (b *ecsAPIService) Logs(ctx context.Context, options *cli.ProjectOptions, w
writer: writer, writer: writer,
} }
err := b.SDK.GetLogs(ctx, name, consumer.Log) err := b.SDK.GetLogs(ctx, name, consumer.Log)
if err != nil { return err
return err
}
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
<-signalChan
return nil
} }
func (l *logConsumer) Log(service, container, message string) { func (l *logConsumer) Log(service, container, message string) {

View File

@ -436,27 +436,32 @@ func (s sdk) GetLogs(ctx context.Context, name string, consumer func(service, co
logGroup := fmt.Sprintf("/docker-compose/%s", name) logGroup := fmt.Sprintf("/docker-compose/%s", name)
var startTime int64 var startTime int64
for { for {
var hasMore = true select {
var token *string case <-ctx.Done():
for hasMore { return nil
events, err := s.CW.FilterLogEvents(&cloudwatchlogs.FilterLogEventsInput{ default:
LogGroupName: aws.String(logGroup), var hasMore = true
NextToken: token, var token *string
StartTime: aws.Int64(startTime), for hasMore {
}) events, err := s.CW.FilterLogEvents(&cloudwatchlogs.FilterLogEventsInput{
if err != nil { LogGroupName: aws.String(logGroup),
return err NextToken: token,
} StartTime: aws.Int64(startTime),
if events.NextToken == nil { })
hasMore = false if err != nil {
} else { return err
token = events.NextToken }
} if events.NextToken == nil {
hasMore = false
} else {
token = events.NextToken
}
for _, event := range events.Events { for _, event := range events.Events {
p := strings.Split(aws.StringValue(event.LogStreamName), "/") p := strings.Split(aws.StringValue(event.LogStreamName), "/")
consumer(p[1], p[2], aws.StringValue(event.Message)) consumer(p[1], p[2], aws.StringValue(event.Message))
startTime = *event.IngestionTime startTime = *event.IngestionTime
}
} }
} }
time.Sleep(500 * time.Millisecond) time.Sleep(500 * time.Millisecond)