Skip to content

Commit 39f5b3b

Browse files
committed
feat: Optimize orchestration creation logs
1 parent 938605a commit 39f5b3b

File tree

6 files changed

+111
-145
lines changed

6 files changed

+111
-145
lines changed

agent/app/service/container_compose.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,8 @@ func (u *ContainerService) CreateCompose(req dto.ComposeCreate) error {
203203
}
204204
go func() {
205205
taskItem.AddSubTask(i18n.GetMsgByKey("ComposeCreate"), func(t *task.Task) error {
206-
cmd := getComposeCmd(req.Path, "up")
207-
out, err := cmd.CombinedOutput()
208-
taskItem.Log(i18n.GetWithName("ComposeCreateRes", string(out)))
206+
err := compose.UpWithTask(req.Path, t)
207+
t.LogWithStatus(i18n.GetMsgByKey("ComposeCreate"), err)
209208
if err != nil {
210209
_, _ = compose.Down(req.Path)
211210
return err

agent/utils/compose/compose.go

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
package compose
22

33
import (
4+
"errors"
5+
"fmt"
6+
"os"
7+
"path"
8+
"strings"
9+
"time"
10+
11+
"github.com/1Panel-dev/1Panel/agent/app/task"
412
"github.com/1Panel-dev/1Panel/agent/buserr"
513
"github.com/1Panel-dev/1Panel/agent/global"
14+
"github.com/1Panel-dev/1Panel/agent/i18n"
615
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
716
"github.com/1Panel-dev/1Panel/agent/utils/common"
8-
"time"
17+
"github.com/1Panel-dev/1Panel/agent/utils/docker"
18+
"github.com/goccy/go-yaml"
919
)
1020

1121
func checkCmd() error {
@@ -27,6 +37,58 @@ func Up(filePath string) (string, error) {
2737
return stdout, err
2838
}
2939

40+
func UpWithTask(filePath string, task *task.Task) error {
41+
content, err := os.ReadFile(filePath)
42+
if err != nil {
43+
return err
44+
}
45+
env, _ := os.ReadFile(path.Join(path.Dir(filePath), ".env"))
46+
var compose docker.ComposeProject
47+
if err := yaml.Unmarshal(content, &compose); err != nil {
48+
return fmt.Errorf("parse docker-compose file failed: %v", err)
49+
}
50+
images, err := docker.GetImagesFromDockerCompose(env, content)
51+
if err != nil {
52+
return err
53+
}
54+
dockerCLi, err := docker.NewClient()
55+
if err != nil {
56+
return err
57+
}
58+
errMsg := ""
59+
for _, image := range images {
60+
task.Log(i18n.GetWithName("PullImageStart", image))
61+
if err = dockerCLi.PullImageWithProcess(task, image); err != nil {
62+
errOur := err.Error()
63+
if errOur != "" {
64+
if strings.Contains(errOur, "no such host") {
65+
errMsg = i18n.GetMsgByKey("ErrNoSuchHost") + ":"
66+
}
67+
if strings.Contains(errOur, "Error response from daemon") {
68+
errMsg = i18n.GetMsgByKey("PullImageTimeout") + ":"
69+
}
70+
}
71+
message := errMsg + errOur
72+
installErr := errors.New(message)
73+
task.LogFailedWithErr(i18n.GetMsgByKey("PullImage"), installErr)
74+
if exist, _ := dockerCLi.ImageExists(image); !exist {
75+
return installErr
76+
} else {
77+
task.Log(i18n.GetMsgByKey("UseExistImage"))
78+
}
79+
} else {
80+
task.Log(i18n.GetMsgByKey("PullImageSuccess"))
81+
}
82+
}
83+
84+
dockerCommand := global.CONF.DockerConfig.Command
85+
if dockerCommand == "docker-compose" {
86+
return cmd.NewCommandMgr(cmd.WithTask(*task)).Run("docker-compose", "-f", filePath, "up", "-d")
87+
} else {
88+
return cmd.NewCommandMgr(cmd.WithTask(*task)).Run("docker", "compose", "-f", filePath, "up", "-d")
89+
}
90+
}
91+
3092
func Down(filePath string) (string, error) {
3193
if err := checkCmd(); err != nil {
3294
return "", err

frontend/src/views/container/compose/create/index.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@
6969
</span>
7070
</template>
7171
</DrawerPro>
72-
<TaskLog ref="taskLogRef" width="70%" />
72+
<TaskLog ref="taskLogRef" width="70%">
73+
<template #task-footer>
74+
<el-button @click="handleClose">{{ $t('commons.table.backToList') }}</el-button>
75+
<el-button type="primary" @click="closeTask">{{ $t('commons.table.keepEdit') }}</el-button>
76+
</template>
77+
</TaskLog>
7378
<FileList ref="fileRef" @choose="loadDir" />
7479
</template>
7580

@@ -167,8 +172,12 @@ const changeFrom = () => {
167172
168173
const handleClose = () => {
169174
emit('search');
175+
taskLogRef.value?.handleClose();
170176
drawerVisible.value = false;
171177
};
178+
const closeTask = () => {
179+
taskLogRef.value?.handleClose();
180+
};
172181
173182
const loadPath = async () => {
174183
const pathRes = await loadBaseDir();

frontend/src/views/container/compose/edit/index.vue

Lines changed: 0 additions & 119 deletions
This file was deleted.

frontend/src/views/container/compose/index.vue

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,19 @@
1313
{{ $t('container.createCompose') }}
1414
</el-button>
1515
</template>
16+
<template #rightToolBar>
17+
<TableRefresh @search="search()" />
18+
<TableSetting title="container-refresh" @search="search()" />
19+
</template>
1620
<template #main>
1721
<el-row v-if="data.length > 0" :gutter="20" class="row-box">
18-
<el-col :span="6">
22+
<el-col :span="7">
1923
<el-card>
2024
<el-input
2125
v-model="searchName"
2226
:placeholder="$t('commons.button.search')"
2327
clearable
28+
class="w-4/5"
2429
@clear="search"
2530
@keyup.enter="search"
2631
>
@@ -29,17 +34,32 @@
2934
</template>
3035
</el-input>
3136

32-
<ComplexTable :show-header="false" @row-click="loadDetail" :data="data">
37+
<el-table class="mt-2" :show-header="false" @row-click="loadDetail" :data="data">
3338
<el-table-column prop="name">
3439
<template #default="{ row }">
3540
<div class="cursor-pointer">
36-
<div class="font-medium truncate">
41+
<div class="font-medium text-base">
3742
{{ row.name }}
43+
</div>
44+
<div class="mb-1">
45+
<el-text class="w-12" link size="small" type="info">
46+
{{ loadFrom(row) }}
47+
</el-text>
48+
<el-divider direction="vertical" />
49+
<el-text link size="small" type="info" class="ml-2">
50+
{{ row.createdAt }}
51+
</el-text>
3852
<el-divider direction="vertical" />
39-
<el-text v-if="row.containerCount === 0" type="danger" size="small">
53+
<el-text
54+
link
55+
v-if="row.containerCount === 0"
56+
type="danger"
57+
size="small"
58+
>
4059
{{ $t('container.exited') }}
4160
</el-text>
4261
<el-text
62+
link
4363
v-else
4464
:type="
4565
row.containerCount === row.runningCount ? 'success' : 'warning'
@@ -50,21 +70,16 @@
5070
$t('container.running', [row.runningCount, row.containerCount])
5171
}}
5272
</el-text>
53-
<el-divider direction="vertical" />
54-
<el-button
55-
link
56-
type="primary"
57-
icon="Folder"
58-
:disabled="!currentCompose?.workdir"
59-
@click="openComposeFolder"
60-
/>
61-
</div>
62-
<div class="mt-1 mb-2">
63-
<el-tag size="small" type="info">{{ loadFrom(row) }}</el-tag>
64-
<el-tag size="small" type="info" class="ml-2">
65-
{{ row.createdAt }}
66-
</el-tag>
6773
</div>
74+
<el-button
75+
plain
76+
round
77+
size="small"
78+
:disabled="!currentCompose?.workdir"
79+
@click="openComposeFolder"
80+
>
81+
{{ $t('home.dir') }}
82+
</el-button>
6883
<el-button
6984
plain
7085
round
@@ -101,10 +116,10 @@
101116
</div>
102117
</template>
103118
</el-table-column>
104-
</ComplexTable>
119+
</el-table>
105120
</el-card>
106121
</el-col>
107-
<el-col :span="18">
122+
<el-col :span="17">
108123
<el-card v-if="currentCompose" v-loading="detailLoading">
109124
<el-table
110125
v-if="composeContainers.length > 0"

frontend/src/views/container/container/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@
365365
<TerminalDialog ref="dialogTerminalRef" />
366366

367367
<PortJumpDialog ref="dialogPortJumpRef" />
368-
<TaskLog ref="taskLogRef" width="70%" />
368+
<TaskLog ref="taskLogRef" width="70%" @close="search" />
369369
</div>
370370
</template>
371371

0 commit comments

Comments
 (0)