From fb7f638a548e6aa117686538ec518a84633feccf Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Tue, 22 Jul 2025 10:34:05 +0800 Subject: [PATCH] fix: Optimize container filter component for cronjob (#9595) image --- agent/app/api/v2/container.go | 7 +----- agent/app/dto/container.go | 5 +++++ agent/app/service/container.go | 22 +++++++++---------- frontend/src/api/interface/container.ts | 4 ++++ frontend/src/api/modules/container.ts | 2 +- .../views/cronjob/cronjob/operate/index.vue | 19 ++++++++++------ 6 files changed, 34 insertions(+), 25 deletions(-) diff --git a/agent/app/api/v2/container.go b/agent/app/api/v2/container.go index f8e4953b6..b024538e8 100644 --- a/agent/app/api/v2/container.go +++ b/agent/app/api/v2/container.go @@ -50,12 +50,7 @@ func (b *BaseApi) LoadContainerUsers(c *gin.Context) { return } - list, err := containerService.LoadUsers(req) - if err != nil { - helper.InternalServer(c, err) - return - } - helper.SuccessWithData(c, list) + helper.SuccessWithData(c, containerService.LoadUsers(req)) } // @Tags Container diff --git a/agent/app/dto/container.go b/agent/app/dto/container.go index 88d810d96..e20df1e90 100644 --- a/agent/app/dto/container.go +++ b/agent/app/dto/container.go @@ -39,6 +39,11 @@ type ContainerInfo struct { Websites []string `json:"websites"` } +type ContainerOptions struct { + Name string `json:"name"` + State string `json:"state"` +} + type ContainerStatus struct { All uint `json:"all"` Created uint `json:"created"` diff --git a/agent/app/service/container.go b/agent/app/service/container.go index 8775f8a1b..0c77fddd7 100644 --- a/agent/app/service/container.go +++ b/agent/app/service/container.go @@ -53,7 +53,7 @@ type ContainerService struct{} type IContainerService interface { Page(req dto.PageContainer) (int64, interface{}, error) - List() []string + List() []dto.ContainerOptions LoadStatus() (dto.ContainerStatus, error) PageNetwork(req dto.SearchWithPage) (int64, interface{}, error) ListNetwork() ([]dto.Options, error) @@ -84,7 +84,7 @@ type IContainerService interface { ComposeUpdate(req dto.ComposeUpdate) error Prune(req dto.ContainerPrune) (dto.ContainerPruneReport, error) - LoadUsers(req dto.OperationWithName) ([]string, error) + LoadUsers(req dto.OperationWithName) []string StreamLogs(ctx *gin.Context, params dto.StreamLog) } @@ -222,7 +222,8 @@ func (u *ContainerService) Page(req dto.PageContainer) (int64, interface{}, erro return int64(total), backDatas, nil } -func (u *ContainerService) List() []string { +func (u *ContainerService) List() []dto.ContainerOptions { + var options []dto.ContainerOptions client, err := docker.NewDockerClient() if err != nil { global.LOG.Errorf("load docker client for contianer list failed, err: %v", err) @@ -231,19 +232,18 @@ func (u *ContainerService) List() []string { defer client.Close() containers, err := client.ContainerList(context.Background(), container.ListOptions{All: true}) if err != nil { - global.LOG.Errorf("load contianer list failed, err: %v", err) + global.LOG.Errorf("load container list failed, err: %v", err) return nil } - var datas []string for _, container := range containers { for _, name := range container.Names { if len(name) != 0 { - datas = append(datas, strings.TrimPrefix(name, "/")) + options = append(options, dto.ContainerOptions{Name: strings.TrimPrefix(name, "/"), State: container.State}) } } } - return datas + return options } func (u *ContainerService) LoadStatus() (dto.ContainerStatus, error) { @@ -1140,19 +1140,19 @@ func (u *ContainerService) ContainerStats(id string) (*dto.ContainerStats, error return &data, nil } -func (u *ContainerService) LoadUsers(req dto.OperationWithName) ([]string, error) { +func (u *ContainerService) LoadUsers(req dto.OperationWithName) []string { + var users []string std, err := cmd.RunDefaultWithStdoutBashCf("docker exec %s cat /etc/passwd", req.Name) if err != nil { - return nil, err + return users } - var users []string lines := strings.Split(string(std), "\n") for _, line := range lines { if strings.Contains(line, ":") { users = append(users, strings.Split(line, ":")[0]) } } - return users, nil + return users } func stringsToMap(list []string) map[string]string { diff --git a/frontend/src/api/interface/container.ts b/frontend/src/api/interface/container.ts index d82d9dfb6..e80b17714 100644 --- a/frontend/src/api/interface/container.ts +++ b/frontend/src/api/interface/container.ts @@ -119,6 +119,10 @@ export namespace Container { cpuPercent: number; memoryPercent: number; } + export interface ContainerInfo { + name: string; + state: string; + } export interface ContainerListStats { containerID: string; cpuTotalUsage: number; diff --git a/frontend/src/api/modules/container.ts b/frontend/src/api/modules/container.ts index ab4155f04..bf52f2e85 100644 --- a/frontend/src/api/modules/container.ts +++ b/frontend/src/api/modules/container.ts @@ -7,7 +7,7 @@ export const searchContainer = (params: Container.ContainerSearch) => { return http.post>(`/containers/search`, params, TimeoutEnum.T_40S); }; export const listContainer = () => { - return http.post>(`/containers/list`, {}); + return http.post>(`/containers/list`, {}); }; export const loadContainerUsers = (name: string) => { return http.post>(`/containers/users`, { name: name }); diff --git a/frontend/src/views/cronjob/cronjob/operate/index.vue b/frontend/src/views/cronjob/cronjob/operate/index.vue index 9d1b2c4bf..042fe784c 100644 --- a/frontend/src/views/cronjob/cronjob/operate/index.vue +++ b/frontend/src/views/cronjob/cronjob/operate/index.vue @@ -354,15 +354,19 @@ - +
+ + {{ item.name }} + + +
@@ -1278,6 +1282,7 @@ const changeAccount = async () => { }; const loadUserOptions = async (isInit: boolean) => { + userOptions.value = []; if (!form.inContainer) { const res = await loadUsers(); userOptions.value = res.data || [];