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), ConvertCommand(dockerCli, opts),
UpCommand(dockerCli, opts), UpCommand(dockerCli, opts),
DownCommand(dockerCli, opts), DownCommand(dockerCli, opts),
LogsCommand(dockerCli, opts),
) )
return cmd 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") cmd.Flags().BoolVar(&opts.DeleteCluster, "delete-cluster", false, "Delete cluster")
return cmd 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 { type API interface {
downAPI downAPI
upAPI upAPI
logsAPI
secretsAPI 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 ( import (
"context" "context"
"fmt" "fmt"
"time"
"github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session" "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}) _, err := s.SM.DeleteSecret(&secretsmanager.DeleteSecretInput{SecretId: &id, ForceDeleteWithoutRecovery: &force})
return err 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) Convert(project *Project) (*cloudformation.Template, error)
ComposeUp(ctx context.Context, project *Project) error ComposeUp(ctx context.Context, project *Project) error
ComposeDown(ctx context.Context, projectName string, deleteCluster bool) 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) CreateSecret(ctx context.Context, secret docker.Secret) (string, error)
InspectSecret(ctx context.Context, id string) (docker.Secret, error) InspectSecret(ctx context.Context, id string) (docker.Secret, error)