Skip to content

Commit

Permalink
docker-task-engine: parse fluentd-async-connect from agent config
Browse files Browse the repository at this point in the history
  • Loading branch information
singholt committed Jan 23, 2025
1 parent 2b1d387 commit 3b2a323
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 2 deletions.
5 changes: 3 additions & 2 deletions agent/engine/docker_task_engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -2081,7 +2081,8 @@ func (engine *DockerTaskEngine) createContainer(task *apitask.Task, container *a
return metadata
}

func getFirelensLogConfig(task *apitask.Task, container *apicontainer.Container, hostConfig *dockercontainer.HostConfig, cfg *config.Config) dockercontainer.LogConfig {
func getFirelensLogConfig(task *apitask.Task, container *apicontainer.Container,
hostConfig *dockercontainer.HostConfig, cfg *config.Config) dockercontainer.LogConfig {
fields := strings.Split(task.Arn, "/")
taskID := fields[len(fields)-1]
tag := fmt.Sprintf(fluentTagDockerFormat, container.Name, taskID)
Expand All @@ -2092,7 +2093,7 @@ func getFirelensLogConfig(task *apitask.Task, container *apicontainer.Container,
logConfig.Config = make(map[string]string)
logConfig.Config[logDriverTag] = tag
logConfig.Config[logDriverFluentdAddress] = fluentd
logConfig.Config[logDriverAsyncConnect] = strconv.FormatBool(true)
logConfig.Config[logDriverAsyncConnect] = strconv.FormatBool(cfg.FirelensAsyncEnabled.Enabled())
logConfig.Config[logDriverSubSecondPrecision] = strconv.FormatBool(true)
if bufferLimitExists {
logConfig.Config[logDriverBufferLimit] = bufferLimit
Expand Down
71 changes: 71 additions & 0 deletions agent/engine/docker_task_engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5034,3 +5034,74 @@ func TestSetRegistryCredentials(t *testing.T) {
})
}
}

func TestGetFirelensConfigWithAsyncEnabledConfigOption(t *testing.T) {
rawHostConfigInput := &dockercontainer.HostConfig{
LogConfig: dockercontainer.LogConfig{
Type: "awsfirelens",
Config: map[string]string{
"log-driver-buffer-limit": "10000",
},
},
}

rawHostConfig, err := json.Marshal(&rawHostConfigInput)
require.NoError(t, err)
hostConfig := func() *string {
s := string(rawHostConfig)
return &s
}()

appContainer := &apicontainer.Container{
Name: "app",
DockerConfig: apicontainer.DockerConfig{
HostConfig: hostConfig,
},
}

firelensContainer := &apicontainer.Container{
Name: "firelens",
FirelensConfig: &apicontainer.FirelensConfig{
Type: "fluentbit",
},
}

task := &apitask.Task{
Arn: "arn:aws:ecs:region:account-id:task/task-id",
Containers: []*apicontainer.Container{
appContainer,
firelensContainer,
},
}

testCases := []struct {
name string
isFirelensAsyncEnabled bool
}{
{
name: "async enabled",
isFirelensAsyncEnabled: true,
},
{
name: "async disabled",
isFirelensAsyncEnabled: false,
},
}

var asyncEnabled config.BooleanDefaultTrue
for _, tc := range testCases {
if tc.isFirelensAsyncEnabled {
asyncEnabled = config.BooleanDefaultTrue{Value: config.ExplicitlyEnabled}
} else {
asyncEnabled = config.BooleanDefaultTrue{Value: config.ExplicitlyDisabled}
}

cfg := &config.Config{
FirelensAsyncEnabled: asyncEnabled,
}

logConfig := getFirelensLogConfig(task, appContainer, rawHostConfigInput, cfg)
assert.Equal(t, tc.isFirelensAsyncEnabled, logConfig.Config[logDriverAsyncConnect])
}

}

0 comments on commit 3b2a323

Please sign in to comment.