Skip to content

Commit 23a3377

Browse files
committed
fix: Fix the issue of extremely slow container list retrieval
1 parent d4edf2f commit 23a3377

File tree

4 files changed

+37
-9
lines changed

4 files changed

+37
-9
lines changed

agent/app/api/v2/container.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,21 @@ func (b *BaseApi) ContainerListStats(c *gin.Context) {
263263
helper.SuccessWithData(c, data)
264264
}
265265

266+
// @Summary Load container stats size
267+
// @Success 200 {object} dto.ContainerItemStats
268+
// @Security ApiKeyAuth
269+
// @Security Timestamp
270+
// @Router /containers/item/stats/:id [get]
271+
func (b *BaseApi) ContainerItemStats(c *gin.Context) {
272+
containerID := c.Param("id")
273+
data, err := containerService.ContainerItemStats(containerID)
274+
if err != nil {
275+
helper.InternalServer(c, err)
276+
return
277+
}
278+
helper.SuccessWithData(c, data)
279+
}
280+
266281
// @Tags Container
267282
// @Summary Create container
268283
// @Accept json

agent/app/dto/container.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ type ContainerInfo struct {
3131
Network []string `json:"network"`
3232
Ports []string `json:"ports"`
3333

34-
SizeRw int64 `json:"sizeRw"`
35-
SizeRootFs int64 `json:"sizeRootFs"`
36-
3734
IsFromApp bool `json:"isFromApp"`
3835
IsFromCompose bool `json:"isFromCompose"`
3936

@@ -129,6 +126,10 @@ type ContainerUpgrade struct {
129126
ForcePull bool `json:"forcePull"`
130127
}
131128

129+
type ContainerItemStats struct {
130+
SizeRw int64 `json:"sizeRw"`
131+
SizeRootFs int64 `json:"sizeRootFs"`
132+
}
132133
type ContainerListStats struct {
133134
ContainerID string `json:"containerID"`
134135

agent/app/service/container.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ type IContainerService interface {
7070
ContainerUpgrade(req dto.ContainerUpgrade) error
7171
ContainerInfo(req dto.OperationWithName) (*dto.ContainerOperate, error)
7272
ContainerListStats() ([]dto.ContainerListStats, error)
73+
ContainerItemStats(containerID string) (dto.ContainerItemStats, error)
7374
LoadResourceLimit() (*dto.ResourceLimit, error)
7475
ContainerRename(req dto.ContainerRename) error
7576
ContainerCommit(req dto.ContainerCommit) error
@@ -101,10 +102,7 @@ func (u *ContainerService) Page(req dto.PageContainer) (int64, interface{}, erro
101102
return 0, nil, err
102103
}
103104
defer client.Close()
104-
options := container.ListOptions{
105-
All: true,
106-
Size: true,
107-
}
105+
options := container.ListOptions{All: true}
108106
if len(req.Filters) != 0 {
109107
options.Filters = filters.NewArgs()
110108
options.Filters.Add("label", req.Filters)
@@ -259,6 +257,21 @@ func (u *ContainerService) LoadStatus() (dto.ContainerStatus, error) {
259257
}
260258
return data, nil
261259
}
260+
func (u *ContainerService) ContainerItemStats(containerID string) (dto.ContainerItemStats, error) {
261+
var data dto.ContainerItemStats
262+
client, err := docker.NewDockerClient()
263+
if err != nil {
264+
return data, err
265+
}
266+
defer client.Close()
267+
containerInfo, _, err := client.ContainerInspectWithRaw(context.Background(), containerID, true)
268+
if err != nil {
269+
return data, err
270+
}
271+
data.SizeRw = *containerInfo.SizeRw
272+
data.SizeRootFs = *containerInfo.SizeRootFs
273+
return data, nil
274+
}
262275
func (u *ContainerService) ContainerListStats() ([]dto.ContainerListStats, error) {
263276
client, err := docker.NewDockerClient()
264277
if err != nil {
@@ -1760,8 +1773,6 @@ func searchWithFilter(req dto.PageContainer, containers []container.Summary) []d
17601773
ImageName: item.Image,
17611774
State: item.State,
17621775
RunTime: item.Status,
1763-
SizeRw: item.SizeRw,
1764-
SizeRootFs: item.SizeRootFs,
17651776
IsFromApp: IsFromApp,
17661777
IsFromCompose: IsFromCompose,
17671778
}

agent/router/ro_container.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ func (s *ContainerRouter) InitRouter(Router *gin.RouterGroup) {
2424
baRouter.POST("/list/byimage", baseApi.ListContainerByImage)
2525
baRouter.GET("/status", baseApi.LoadContainerStatus)
2626
baRouter.GET("/list/stats", baseApi.ContainerListStats)
27+
baRouter.GET("/item/stats/:id", baseApi.ContainerItemStats)
2728
baRouter.GET("/search/log", baseApi.ContainerStreamLogs)
2829
baRouter.POST("/download/log", baseApi.DownloadContainerLogs)
2930
baRouter.GET("/limit", baseApi.LoadResourceLimit)

0 commit comments

Comments
 (0)