add logs command

Signed-off-by: aiordache <anca.iordache@docker.com>
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
aiordache 2020-05-13 12:14:13 +02:00 committed by Nicolas De Loof
parent 43d3d94c43
commit 9dbff1eb72
No known key found for this signature in database
GPG Key ID: 9858809D6F8F6E7E
5 changed files with 73 additions and 0 deletions

View File

@ -22,6 +22,7 @@ func ComposeCommand(dockerCli command.Cli) *cobra.Command {
ConvertCommand(dockerCli, opts),
UpCommand(dockerCli, opts),
DownCommand(dockerCli, opts),
LogsCommand(dockerCli, opts),
)
return cmd
}
@ -119,3 +120,28 @@ func DownCommand(dockerCli command.Cli, projectOpts *compose.ProjectOptions) *co
cmd.Flags().BoolVar(&opts.DeleteCluster, "delete-cluster", false, "Delete cluster")
return cmd
}
func LogsCommand(dockerCli command.Cli, projectOpts *compose.ProjectOptions) *cobra.Command {
cmd := &cobra.Command{
Use: "logs [PROJECT NAME]",
RunE: docker.WithAwsContext(dockerCli, func(clusteropts docker.AwsContext, args []string) error {
client, err := amazon.NewClient(clusteropts.Profile, clusteropts.Cluster, clusteropts.Region)
if err != nil {
return err
}
var name string
if len(args) == 0 {
project, err := compose.ProjectFromOptions(projectOpts)
if err != nil {
return err
}
name = project.Name
} else {
name = args[0]
}
return client.ComposeLogs(context.Background(), name)
}),
}
return cmd
}

View File

@ -5,5 +5,6 @@ package amazon
type API interface {
downAPI
upAPI
logsAPI
secretsAPI
}

13
ecs/pkg/amazon/logs.go Normal file
View File

@ -0,0 +1,13 @@
package amazon
import (
"context"
)
func (c *client) ComposeLogs(ctx context.Context, projectName string) error {
return c.api.GetLogs(ctx, projectName)
}
type logsAPI interface {
GetLogs(ctx context.Context, name string) error
}

View File

@ -3,6 +3,7 @@ package amazon
import (
"context"
"fmt"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
@ -307,3 +308,34 @@ func (s sdk) DeleteSecret(ctx context.Context, id string, recover bool) error {
_, err := s.SM.DeleteSecret(&secretsmanager.DeleteSecretInput{SecretId: &id, ForceDeleteWithoutRecovery: &force})
return err
}
func (s sdk) GetLogs(ctx context.Context, name string) error {
logGroup := fmt.Sprintf("/docker-compose/%s", name)
var startTime int64
for {
var hasMore = true
var token *string
token = nil
for hasMore {
events, err := s.CW.FilterLogEvents(&cloudwatchlogs.FilterLogEventsInput{
LogGroupName: aws.String(logGroup),
NextToken: token,
StartTime: aws.Int64(startTime),
})
if err != nil {
return err
}
if events.NextToken == nil {
hasMore = false
} else {
token = events.NextToken
}
for _, event := range events.Events {
fmt.Println(*event.Message)
startTime = *event.IngestionTime
}
}
time.Sleep(500 * time.Millisecond)
}
}

View File

@ -11,6 +11,7 @@ type API interface {
Convert(project *Project) (*cloudformation.Template, error)
ComposeUp(ctx context.Context, project *Project) error
ComposeDown(ctx context.Context, projectName string, deleteCluster bool) error
ComposeLogs(ctx context.Context, projectName string) error
CreateSecret(ctx context.Context, secret docker.Secret) (string, error)
InspectSecret(ctx context.Context, id string) (docker.Secret, error)