Skip to content

Commit 4fda649

Browse files
author
Heming Han
committed
docker integration
1 parent a0d1d61 commit 4fda649

File tree

3 files changed

+137
-24
lines changed

3 files changed

+137
-24
lines changed

agent/app/agent.go

+8-16
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"encoding/json"
1919
"errors"
2020
"fmt"
21+
"github.com/aws/amazon-ecs-agent/agent/stats/reporter"
2122
"time"
2223

2324
acshandler "github.com/aws/amazon-ecs-agent/agent/acs/handler"
@@ -48,7 +49,6 @@ import (
4849
"github.com/aws/amazon-ecs-agent/agent/statemanager"
4950
"github.com/aws/amazon-ecs-agent/agent/stats"
5051
"github.com/aws/amazon-ecs-agent/agent/taskresource"
51-
tcshandler "github.com/aws/amazon-ecs-agent/agent/tcs/handler"
5252
"github.com/aws/amazon-ecs-agent/agent/utils"
5353
"github.com/aws/amazon-ecs-agent/agent/utils/loader"
5454
"github.com/aws/amazon-ecs-agent/agent/utils/mobypkgwrapper"
@@ -871,21 +871,13 @@ func (agent *ecsAgent) startAsyncRoutines(
871871
}
872872
go statsEngine.StartMetricsPublish()
873873

874-
telemetrySessionParams := tcshandler.TelemetrySessionParams{
875-
Ctx: agent.ctx,
876-
CredentialProvider: agent.credentialProvider,
877-
Cfg: agent.cfg,
878-
ContainerInstanceArn: agent.containerInstanceARN,
879-
DeregisterInstanceEventStream: deregisterInstanceEventStream,
880-
ECSClient: client,
881-
TaskEngine: taskEngine,
882-
StatsEngine: statsEngine,
883-
MetricsChannel: telemetryMessages,
884-
HealthChannel: healthMessages,
885-
Doctor: doctor,
886-
}
887-
// Start metrics session in a go routine
888-
go tcshandler.StartMetricsSession(&telemetrySessionParams)
874+
session := reporter.NewDockerTelemetrySession(agent.containerInstanceARN, agent.credentialProvider, agent.cfg, deregisterInstanceEventStream,
875+
client, taskEngine, telemetryMessages, healthMessages, doctor)
876+
if session == nil {
877+
seelog.
878+
}
879+
880+
go session.Start(agent.ctx)
889881
}
890882

891883
func (agent *ecsAgent) startSpotInstanceDrainingPoller(ctx context.Context, client api.ECSClient) {

agent/stats/reporter/reporter.go

+4-8
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,18 @@ func NewDockerTelemetrySession(
4848
taskEngine engine.TaskEngine,
4949
metricsChannel <-chan ecstcs.TelemetryMessage,
5050
healthChannel <-chan ecstcs.HealthMessage,
51-
doctor *doctor.Doctor) *DockerTelemetrySession {
51+
doctor *doctor.Doctor) (*DockerTelemetrySession, error) {
5252
ok, cfgParseErr := isContainerHealthMetricsDisabled(cfg)
5353
if cfgParseErr != nil {
5454
seelog.Warnf("Error starting metrics session: %v", cfgParseErr)
55-
return nil
55+
return nil, cfgParseErr
5656
}
5757
if ok {
5858
seelog.Warnf("Metrics were disabled, not starting the telemetry session")
59-
return nil
59+
return nil, nil
6060
}
6161

6262
agentVersion, agentHash, containerRuntimeVersion := generateVersionInfo(taskEngine)
63-
if cfg == nil {
64-
logger.Error("Config is empty in the tcs session parameter")
65-
return nil
66-
}
6763

6864
session := tcshandler.NewTelemetrySession(
6965
containerInstanceArn,
@@ -90,7 +86,7 @@ func NewDockerTelemetrySession(
9086
healthChannel,
9187
doctor,
9288
)
93-
return &DockerTelemetrySession{session, ecsClient, containerInstanceArn}
89+
return &DockerTelemetrySession{session, ecsClient, containerInstanceArn}, nil
9490
}
9591

9692
// Start "overloads" tcshandler.TelemetrySession's Start with extra handling of discoverTelemetryEndpoint result.

agent/stats/reporter/reporter_test.go

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package reporter
2+
3+
import (
4+
"context"
5+
"errors"
6+
"testing"
7+
8+
"github.com/aws/amazon-ecs-agent/agent/config"
9+
mock_engine "github.com/aws/amazon-ecs-agent/agent/engine/mocks"
10+
"github.com/aws/amazon-ecs-agent/agent/version"
11+
"github.com/aws/amazon-ecs-agent/ecs-agent/doctor"
12+
"github.com/aws/amazon-ecs-agent/ecs-agent/eventstream"
13+
"github.com/aws/aws-sdk-go/aws/credentials"
14+
"github.com/golang/mock/gomock"
15+
"github.com/stretchr/testify/assert"
16+
)
17+
18+
const (
19+
testContainerInstanceArn = "testContainerInstanceArn"
20+
testCluster = "testCluster"
21+
testRegion = "us-west-2"
22+
testDockerEndpoint = "testDockerEndpoint"
23+
testDockerVersion = "testDockerVersion"
24+
)
25+
26+
func TestNewDockerTelemetrySession(t *testing.T) {
27+
emptyDoctor, _ := doctor.NewDoctor([]doctor.Healthcheck{}, testCluster, testContainerInstanceArn)
28+
testCredentials := credentials.NewStaticCredentials("test-id", "test-secret", "test-token")
29+
ctrl := gomock.NewController(t)
30+
defer ctrl.Finish()
31+
mockEngine := mock_engine.NewMockTaskEngine(ctrl)
32+
mockEngine.EXPECT().Version().Return(testDockerVersion, nil)
33+
testCases := []struct {
34+
name string
35+
cfg *config.Config
36+
expectedSession bool
37+
expectedError bool
38+
}{
39+
{
40+
name: "happy case",
41+
cfg: &config.Config{
42+
DisableMetrics: config.BooleanDefaultFalse{},
43+
DisableDockerHealthCheck: config.BooleanDefaultFalse{},
44+
Cluster: testCluster,
45+
AWSRegion: testRegion,
46+
AcceptInsecureCert: false,
47+
DockerEndpoint: testDockerEndpoint,
48+
},
49+
expectedSession: true,
50+
expectedError: false,
51+
},
52+
{
53+
name: "cfg parsing error",
54+
cfg: nil,
55+
expectedSession: false,
56+
expectedError: true,
57+
},
58+
{
59+
name: "metrics disabled",
60+
cfg: &config.Config{
61+
DisableMetrics: config.BooleanDefaultFalse{
62+
Value: config.ExplicitlyEnabled,
63+
},
64+
DisableDockerHealthCheck: config.BooleanDefaultFalse{
65+
Value: config.ExplicitlyEnabled,
66+
},
67+
Cluster: testCluster,
68+
AWSRegion: testRegion,
69+
AcceptInsecureCert: false,
70+
DockerEndpoint: testDockerEndpoint,
71+
},
72+
expectedSession: false,
73+
expectedError: false,
74+
},
75+
}
76+
77+
for _, tc := range testCases {
78+
t.Run(tc.name, func(t *testing.T) {
79+
dockerTelemetrySession, err := NewDockerTelemetrySession(
80+
testContainerInstanceArn,
81+
testCredentials,
82+
tc.cfg,
83+
eventstream.NewEventStream("Deregister_Instance", context.Background()),
84+
nil,
85+
mockEngine,
86+
nil,
87+
nil,
88+
emptyDoctor,
89+
)
90+
if tc.expectedSession {
91+
assert.NotNil(t, dockerTelemetrySession)
92+
} else {
93+
assert.Nil(t, dockerTelemetrySession)
94+
}
95+
96+
if tc.expectedError {
97+
assert.NotNil(t, err)
98+
} else {
99+
assert.NoError(t, err)
100+
}
101+
})
102+
}
103+
}
104+
105+
func TestGenerateVersionInfo_GetVersionError(t *testing.T) {
106+
ctrl := gomock.NewController(t)
107+
defer ctrl.Finish()
108+
mockEngine := mock_engine.NewMockTaskEngine(ctrl)
109+
mockEngine.EXPECT().Version().Times(1).Return(nil, errors.New("error"))
110+
agentVersion, agentHash, containerRuntimeVersion := generateVersionInfo(mockEngine)
111+
assert.Equal(t, version.Version, agentVersion)
112+
assert.Equal(t, version.GitShortHash, agentHash)
113+
assert.Equal(t, "", containerRuntimeVersion)
114+
}
115+
116+
func TestGenerateVersionInfo_NoError(t *testing.T) {
117+
ctrl := gomock.NewController(t)
118+
defer ctrl.Finish()
119+
mockEngine := mock_engine.NewMockTaskEngine(ctrl)
120+
mockEngine.EXPECT().Version().Times(1).Return(testDockerVersion, nil)
121+
agentVersion, agentHash, containerRuntimeVersion := generateVersionInfo(mockEngine)
122+
assert.Equal(t, version.Version, agentVersion)
123+
assert.Equal(t, version.GitShortHash, agentHash)
124+
assert.Equal(t, testDockerVersion, containerRuntimeVersion)
125+
}

0 commit comments

Comments
 (0)