Skip to content

Commit 797210a

Browse files
committed
Add RestartCount to introspection endpoint container response (#4190)
1 parent 0682fa4 commit 797210a

File tree

2 files changed

+71
-10
lines changed

2 files changed

+71
-10
lines changed

agent/handlers/v1/response.go

+15-10
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,17 @@ type TasksResponse struct {
4848

4949
// ContainerResponse is the schema for the container response JSON object
5050
type ContainerResponse struct {
51-
DockerID string `json:"DockerId"`
52-
DockerName string `json:"DockerName"`
53-
Name string `json:"Name"`
54-
Image string `json:"Image"`
55-
ImageID string `json:"ImageID"`
56-
CreatedAt *time.Time `json:"CreatedAt,omitempty"`
57-
StartedAt *time.Time `json:"StartedAt,omitempty"`
58-
Ports []tmdsresponse.PortResponse `json:"Ports,omitempty"`
59-
Networks []tmdsresponse.Network `json:"Networks,omitempty"`
60-
Volumes []tmdsresponse.VolumeResponse `json:"Volumes,omitempty"`
51+
DockerID string `json:"DockerId"`
52+
DockerName string `json:"DockerName"`
53+
Name string `json:"Name"`
54+
Image string `json:"Image"`
55+
ImageID string `json:"ImageID"`
56+
CreatedAt *time.Time `json:"CreatedAt,omitempty"`
57+
StartedAt *time.Time `json:"StartedAt,omitempty"`
58+
Ports []tmdsresponse.PortResponse `json:"Ports,omitempty"`
59+
Networks []tmdsresponse.Network `json:"Networks,omitempty"`
60+
Volumes []tmdsresponse.VolumeResponse `json:"Volumes,omitempty"`
61+
RestartCount *int `json:"RestartCount,omitempty"`
6162
}
6263

6364
// NewTaskResponse creates a TaskResponse for a task.
@@ -121,6 +122,10 @@ func NewContainerResponse(dockerContainer *apicontainer.DockerContainer, eni *ni
121122
startedAt = startedAt.UTC()
122123
resp.StartedAt = &startedAt
123124
}
125+
if container.RestartPolicyEnabled() {
126+
restartCount := container.RestartTracker.GetRestartCount()
127+
resp.RestartCount = &restartCount
128+
}
124129
return resp
125130
}
126131

agent/handlers/v1/response_test.go

+56
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323

2424
apicontainer "github.com/aws/amazon-ecs-agent/agent/api/container"
2525
apitask "github.com/aws/amazon-ecs-agent/agent/api/task"
26+
"github.com/aws/amazon-ecs-agent/ecs-agent/api/container/restart"
2627
apitaskstatus "github.com/aws/amazon-ecs-agent/ecs-agent/api/task/status"
2728
ni "github.com/aws/amazon-ecs-agent/ecs-agent/netlib/model/networkinterface"
2829
"github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
@@ -197,6 +198,61 @@ func TestContainerResponse(t *testing.T) {
197198
assert.Equal(t, expectedContainerResponse, containerResponse)
198199
}
199200

201+
func TestContainerResponseWithRestartPolicy(t *testing.T) {
202+
restartPolicy := &restart.RestartPolicy{
203+
Enabled: true,
204+
}
205+
container := &apicontainer.Container{
206+
Name: containerName,
207+
Image: imageName,
208+
ImageID: imageID,
209+
Ports: []apicontainer.PortBinding{
210+
{
211+
ContainerPort: 80,
212+
Protocol: apicontainer.TransportProtocolTCP,
213+
},
214+
},
215+
VolumesUnsafe: []types.MountPoint{
216+
{
217+
Name: volName,
218+
Source: volSource,
219+
Destination: volDestination,
220+
},
221+
},
222+
RestartPolicy: restartPolicy,
223+
RestartTracker: restart.NewRestartTracker(*restartPolicy),
224+
}
225+
226+
container.SetCreatedAt(containerTime)
227+
container.SetStartedAt(containerTime)
228+
container.RestartTracker.RecordRestart()
229+
230+
dockerContainer := &apicontainer.DockerContainer{
231+
DockerID: containerID,
232+
DockerName: containerName,
233+
Container: container,
234+
}
235+
236+
eni := &ni.NetworkInterface{
237+
IPV4Addresses: []*ni.IPV4Address{
238+
{
239+
Address: eniIPv4Address,
240+
},
241+
},
242+
}
243+
244+
containerResponse := NewContainerResponse(dockerContainer, eni)
245+
246+
_, err := json.Marshal(containerResponse)
247+
assert.NoError(t, err)
248+
249+
expectedContainerResponseWithRestartPolicy := expectedContainerResponse
250+
rc := int(1)
251+
expectedContainerResponseWithRestartPolicy.RestartCount = &rc
252+
253+
assert.Equal(t, expectedContainerResponseWithRestartPolicy, containerResponse)
254+
}
255+
200256
func TestPortBindingsResponse(t *testing.T) {
201257
container := &apicontainer.Container{
202258
Name: containerName,

0 commit comments

Comments
 (0)