Skip to content

Commit d11722c

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

File tree

17 files changed

+79
-12
lines changed

17 files changed

+79
-12
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)

frontend/src/api/interface/container.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ export namespace Container {
134134
name: string;
135135
state: string;
136136
}
137+
export interface ContainerItemStats {
138+
sizeRw: number;
139+
sizeRootFs: number;
140+
}
137141
export interface ContainerListStats {
138142
containerID: string;
139143
cpuTotalUsage: number;

frontend/src/api/modules/container.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ export const cleanContainerLog = (containerName: string, operateNode?: string) =
4343
const params = operateNode ? `?operateNode=${operateNode}` : '';
4444
return http.post(`/containers/clean/log${params}`, { name: containerName });
4545
};
46+
export const containerItemStats = (containerID: string) => {
47+
return http.get<Container.ContainerItemStats>(`/containers/item/stats/${containerID}`);
48+
};
4649
export const containerListStats = () => {
4750
return http.get<Array<Container.ContainerListStats>>(`/containers/list/stats`);
4851
};

frontend/src/lang/modules/en.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,7 @@ const message = {
823823
memUsage: 'Memory usage',
824824
memTotal: 'Memory limit',
825825
memCache: 'Memory cache',
826+
loadSize: 'Get Container Size',
826827
ip: 'IP address',
827828
cpuShare: 'CPU shares',
828829
cpuShareHelper:

frontend/src/lang/modules/es-es.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,7 @@ const message = {
826826
memUsage: 'Uso de memoria',
827827
memTotal: 'Límite de memoria',
828828
memCache: 'Caché de memoria',
829+
loadSize: 'Obtener Tamaño del Contenedor',
829830
ip: 'Dirección IP',
830831
cpuShare: 'Proporción de CPU',
831832
cpuShareHelper:

frontend/src/lang/modules/ja.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,6 +803,7 @@ const message = {
803803
memUsage: 'メモリの使用',
804804
memTotal: 'メモリ制限',
805805
memCache: 'メモリキャッシュ',
806+
loadSize: 'コンテナサイズを取得',
806807
ip: 'IPアドレス',
807808
cpuShare: 'CPU共有',
808809
cpuShareHelper:

frontend/src/lang/modules/ko.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,7 @@ const message = {
796796
memUsage: '메모리 사용',
797797
memTotal: '메모리 한도',
798798
memCache: '메모리 캐시',
799+
loadSize: '컨테이너 크기 가져오기',
799800
ip: 'IP 주소',
800801
cpuShare: 'CPU 공유',
801802
cpuShareHelper:

0 commit comments

Comments
 (0)