mirror of
https://github.com/docker/compose.git
synced 2025-07-28 08:04:09 +02:00
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),
|
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
|
||||||
|
}
|
||||||
|
@ -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
13
ecs/pkg/amazon/logs.go
Normal 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
|
||||||
|
}
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user