mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #42132 from xia-wu/add-create-log-stream
Add an option to skip create log stream for awslogs driver
This commit is contained in:
commit
627bbd3fa4
2 changed files with 62 additions and 19 deletions
|
@ -35,6 +35,7 @@ const (
|
||||||
logGroupKey = "awslogs-group"
|
logGroupKey = "awslogs-group"
|
||||||
logStreamKey = "awslogs-stream"
|
logStreamKey = "awslogs-stream"
|
||||||
logCreateGroupKey = "awslogs-create-group"
|
logCreateGroupKey = "awslogs-create-group"
|
||||||
|
logCreateStreamKey = "awslogs-create-stream"
|
||||||
tagKey = "tag"
|
tagKey = "tag"
|
||||||
datetimeFormatKey = "awslogs-datetime-format"
|
datetimeFormatKey = "awslogs-datetime-format"
|
||||||
multilinePatternKey = "awslogs-multiline-pattern"
|
multilinePatternKey = "awslogs-multiline-pattern"
|
||||||
|
@ -71,6 +72,7 @@ type logStream struct {
|
||||||
logStreamName string
|
logStreamName string
|
||||||
logGroupName string
|
logGroupName string
|
||||||
logCreateGroup bool
|
logCreateGroup bool
|
||||||
|
logCreateStream bool
|
||||||
logNonBlocking bool
|
logNonBlocking bool
|
||||||
forceFlushInterval time.Duration
|
forceFlushInterval time.Duration
|
||||||
multilinePattern *regexp.Regexp
|
multilinePattern *regexp.Regexp
|
||||||
|
@ -85,6 +87,7 @@ type logStreamConfig struct {
|
||||||
logStreamName string
|
logStreamName string
|
||||||
logGroupName string
|
logGroupName string
|
||||||
logCreateGroup bool
|
logCreateGroup bool
|
||||||
|
logCreateStream bool
|
||||||
logNonBlocking bool
|
logNonBlocking bool
|
||||||
forceFlushInterval time.Duration
|
forceFlushInterval time.Duration
|
||||||
maxBufferedEvents int
|
maxBufferedEvents int
|
||||||
|
@ -151,6 +154,7 @@ func New(info logger.Info) (logger.Logger, error) {
|
||||||
logStreamName: containerStreamConfig.logStreamName,
|
logStreamName: containerStreamConfig.logStreamName,
|
||||||
logGroupName: containerStreamConfig.logGroupName,
|
logGroupName: containerStreamConfig.logGroupName,
|
||||||
logCreateGroup: containerStreamConfig.logCreateGroup,
|
logCreateGroup: containerStreamConfig.logCreateGroup,
|
||||||
|
logCreateStream: containerStreamConfig.logCreateStream,
|
||||||
logNonBlocking: containerStreamConfig.logNonBlocking,
|
logNonBlocking: containerStreamConfig.logNonBlocking,
|
||||||
forceFlushInterval: containerStreamConfig.forceFlushInterval,
|
forceFlushInterval: containerStreamConfig.forceFlushInterval,
|
||||||
multilinePattern: containerStreamConfig.multilinePattern,
|
multilinePattern: containerStreamConfig.multilinePattern,
|
||||||
|
@ -237,6 +241,13 @@ func newStreamConfig(info logger.Info) (*logStreamConfig, error) {
|
||||||
if info.Config[logStreamKey] != "" {
|
if info.Config[logStreamKey] != "" {
|
||||||
logStreamName = info.Config[logStreamKey]
|
logStreamName = info.Config[logStreamKey]
|
||||||
}
|
}
|
||||||
|
logCreateStream := true
|
||||||
|
if info.Config[logCreateStreamKey] != "" {
|
||||||
|
logCreateStream, err = strconv.ParseBool(info.Config[logCreateStreamKey])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
multilinePattern, err := parseMultilineOptions(info)
|
multilinePattern, err := parseMultilineOptions(info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -247,6 +258,7 @@ func newStreamConfig(info logger.Info) (*logStreamConfig, error) {
|
||||||
logStreamName: logStreamName,
|
logStreamName: logStreamName,
|
||||||
logGroupName: logGroupName,
|
logGroupName: logGroupName,
|
||||||
logCreateGroup: logCreateGroup,
|
logCreateGroup: logCreateGroup,
|
||||||
|
logCreateStream: logCreateStream,
|
||||||
logNonBlocking: logNonBlocking,
|
logNonBlocking: logNonBlocking,
|
||||||
forceFlushInterval: forceFlushInterval,
|
forceFlushInterval: forceFlushInterval,
|
||||||
maxBufferedEvents: maxBufferedEvents,
|
maxBufferedEvents: maxBufferedEvents,
|
||||||
|
@ -480,6 +492,16 @@ func (l *logStream) createLogGroup() error {
|
||||||
|
|
||||||
// createLogStream creates a log stream for the instance of the awslogs logging driver
|
// createLogStream creates a log stream for the instance of the awslogs logging driver
|
||||||
func (l *logStream) createLogStream() error {
|
func (l *logStream) createLogStream() error {
|
||||||
|
// Directly return if we do not want to create log stream.
|
||||||
|
if !l.logCreateStream {
|
||||||
|
logrus.WithFields(logrus.Fields{
|
||||||
|
"logGroupName": l.logGroupName,
|
||||||
|
"logStreamName": l.logStreamName,
|
||||||
|
"logCreateStream": l.logCreateStream,
|
||||||
|
}).Info("Skipping creating log stream")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
input := &cloudwatchlogs.CreateLogStreamInput{
|
input := &cloudwatchlogs.CreateLogStreamInput{
|
||||||
LogGroupName: aws.String(l.logGroupName),
|
LogGroupName: aws.String(l.logGroupName),
|
||||||
LogStreamName: aws.String(l.logStreamName),
|
LogStreamName: aws.String(l.logStreamName),
|
||||||
|
|
|
@ -65,6 +65,7 @@ func TestNewStreamConfig(t *testing.T) {
|
||||||
logStreamName string
|
logStreamName string
|
||||||
logGroupName string
|
logGroupName string
|
||||||
logCreateGroup string
|
logCreateGroup string
|
||||||
|
logCreateStream string
|
||||||
logNonBlocking string
|
logNonBlocking string
|
||||||
forceFlushInterval string
|
forceFlushInterval string
|
||||||
maxBufferedEvents string
|
maxBufferedEvents string
|
||||||
|
@ -73,13 +74,13 @@ func TestNewStreamConfig(t *testing.T) {
|
||||||
shouldErr bool
|
shouldErr bool
|
||||||
testName string
|
testName string
|
||||||
}{
|
}{
|
||||||
{"", groupName, "", "", "", "", "", "", false, "defaults"},
|
{"", groupName, "", "", "", "", "", "", "", false, "defaults"},
|
||||||
{"", groupName, "invalid create group", "", "", "", "", "", true, "invalid create group"},
|
{"", groupName, "invalid create group", "", "", "", "", "", "", true, "invalid create group"},
|
||||||
{"", groupName, "", "", "invalid flush interval", "", "", "", true, "invalid flush interval"},
|
{"", groupName, "", "", "", "invalid flush interval", "", "", "", true, "invalid flush interval"},
|
||||||
{"", groupName, "", "", "", "invalid max buffered events", "", "", true, "invalid max buffered events"},
|
{"", groupName, "", "", "", "", "invalid max buffered events", "", "", true, "invalid max buffered events"},
|
||||||
{"", groupName, "", "", "", "", "", "n{1001}", true, "invalid multiline pattern"},
|
{"", groupName, "", "", "", "", "", "", "n{1001}", true, "invalid multiline pattern"},
|
||||||
{"", groupName, "", "", "15", "", "", "", false, "flush interval at 15"},
|
{"", groupName, "", "", "", "15", "", "", "", false, "flush interval at 15"},
|
||||||
{"", groupName, "", "", "", "1024", "", "", false, "max buffered events at 1024"},
|
{"", groupName, "", "", "", "", "1024", "", "", false, "max buffered events at 1024"},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
|
@ -91,6 +92,7 @@ func TestNewStreamConfig(t *testing.T) {
|
||||||
forceFlushIntervalKey: tc.forceFlushInterval,
|
forceFlushIntervalKey: tc.forceFlushInterval,
|
||||||
maxBufferedEventsKey: tc.maxBufferedEvents,
|
maxBufferedEventsKey: tc.maxBufferedEvents,
|
||||||
logStreamKey: tc.logStreamName,
|
logStreamKey: tc.logStreamName,
|
||||||
|
logCreateStreamKey: tc.logCreateStream,
|
||||||
datetimeFormatKey: tc.datetimeFormat,
|
datetimeFormatKey: tc.datetimeFormat,
|
||||||
multilinePatternKey: tc.multilinePattern,
|
multilinePatternKey: tc.multilinePattern,
|
||||||
}
|
}
|
||||||
|
@ -189,6 +191,7 @@ func TestCreateSuccess(t *testing.T) {
|
||||||
client: mockClient,
|
client: mockClient,
|
||||||
logGroupName: groupName,
|
logGroupName: groupName,
|
||||||
logStreamName: streamName,
|
logStreamName: streamName,
|
||||||
|
logCreateStream: true,
|
||||||
}
|
}
|
||||||
mockClient.createLogStreamResult <- &createLogStreamResult{}
|
mockClient.createLogStreamResult <- &createLogStreamResult{}
|
||||||
|
|
||||||
|
@ -212,6 +215,20 @@ func TestCreateSuccess(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCreateStreamSkipped(t *testing.T) {
|
||||||
|
stream := &logStream{
|
||||||
|
logGroupName: groupName,
|
||||||
|
logStreamName: streamName,
|
||||||
|
logCreateStream: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
err := stream.create()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Received unexpected err: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCreateLogGroupSuccess(t *testing.T) {
|
func TestCreateLogGroupSuccess(t *testing.T) {
|
||||||
mockClient := newMockClient()
|
mockClient := newMockClient()
|
||||||
stream := &logStream{
|
stream := &logStream{
|
||||||
|
@ -219,6 +236,7 @@ func TestCreateLogGroupSuccess(t *testing.T) {
|
||||||
logGroupName: groupName,
|
logGroupName: groupName,
|
||||||
logStreamName: streamName,
|
logStreamName: streamName,
|
||||||
logCreateGroup: true,
|
logCreateGroup: true,
|
||||||
|
logCreateStream: true,
|
||||||
}
|
}
|
||||||
mockClient.createLogGroupResult <- &createLogGroupResult{}
|
mockClient.createLogGroupResult <- &createLogGroupResult{}
|
||||||
mockClient.createLogStreamResult <- &createLogStreamResult{}
|
mockClient.createLogStreamResult <- &createLogStreamResult{}
|
||||||
|
@ -247,6 +265,7 @@ func TestCreateError(t *testing.T) {
|
||||||
mockClient := newMockClient()
|
mockClient := newMockClient()
|
||||||
stream := &logStream{
|
stream := &logStream{
|
||||||
client: mockClient,
|
client: mockClient,
|
||||||
|
logCreateStream: true,
|
||||||
}
|
}
|
||||||
mockClient.createLogStreamResult <- &createLogStreamResult{
|
mockClient.createLogStreamResult <- &createLogStreamResult{
|
||||||
errorResult: errors.New("Error"),
|
errorResult: errors.New("Error"),
|
||||||
|
@ -263,6 +282,7 @@ func TestCreateAlreadyExists(t *testing.T) {
|
||||||
mockClient := newMockClient()
|
mockClient := newMockClient()
|
||||||
stream := &logStream{
|
stream := &logStream{
|
||||||
client: mockClient,
|
client: mockClient,
|
||||||
|
logCreateStream: true,
|
||||||
}
|
}
|
||||||
mockClient.createLogStreamResult <- &createLogStreamResult{
|
mockClient.createLogStreamResult <- &createLogStreamResult{
|
||||||
errorResult: awserr.New(resourceAlreadyExistsCode, "", nil),
|
errorResult: awserr.New(resourceAlreadyExistsCode, "", nil),
|
||||||
|
@ -1555,6 +1575,7 @@ func TestCreateTagSuccess(t *testing.T) {
|
||||||
client: mockClient,
|
client: mockClient,
|
||||||
logGroupName: groupName,
|
logGroupName: groupName,
|
||||||
logStreamName: logStreamName,
|
logStreamName: logStreamName,
|
||||||
|
logCreateStream: true,
|
||||||
}
|
}
|
||||||
mockClient.createLogStreamResult <- &createLogStreamResult{}
|
mockClient.createLogStreamResult <- &createLogStreamResult{}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue