mirror of https://github.com/docker/compose.git
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:
parent
43d3d94c43
commit
9dbff1eb72
|
@ -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
|
||||
}
|
||||
|
|
|
@ -5,5 +5,6 @@ package amazon
|
|||
type API interface {
|
||||
downAPI
|
||||
upAPI
|
||||
logsAPI
|
||||
secretsAPI
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue