Skip to content

Commit 02ddeb1

Browse files
authored
feat(admin_sync): add retry and cancel options (#1471)
- Add retry button for failed syncs - Add cancel button for in-progress syncs - Implement retry functionality - Implement cancel functionality
1 parent 4ad3145 commit 02ddeb1

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

frontend/src/components/admin_next/sync/AdminSyncSetting.vue

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,23 @@
3636
</template>
3737
</el-table-column>
3838
<el-table-column prop="sync_status" label="Status"></el-table-column>
39+
<el-table-column
40+
label="options">
41+
<template #default="scope">
42+
<div class="flex items-center justify-start gap-[8px]">
43+
<CsgButton
44+
v-if="scope.row.sync_status === 'failed'"
45+
class="btn btn-link-color btn-md"
46+
@click="retry(scope.row)"
47+
:name="$t('endpoints.playground.retry')" />
48+
<CsgButton
49+
v-if="scope.row.sync_status === 'inprogress'"
50+
class="btn btn-link-color btn-md"
51+
@click="cancelSync(scope.row)"
52+
:name="$t('all.cancel')" />
53+
</div>
54+
</template>
55+
</el-table-column>
3956
</el-table>
4057

4158
<el-pagination v-model:current-page="page" :page-size="per" layout="prev, pager, next" :total="total"
@@ -76,6 +93,39 @@ const onSubmit = () => {
7693
createSyncSetting()
7794
}
7895
96+
const retry = async (item) => {
97+
useFetchApi(`/${item.repo_type}s/${item.path}/mirror/sync`, {
98+
method: 'POST',
99+
}).then(({ data, error }) => {
100+
if (data.value) {
101+
ElMessage.success('Sync started successfully')
102+
} else {
103+
ElMessage.error(error.value?.msg || 'Failed to start sync')
104+
}
105+
}).catch(error => {
106+
ElMessage.error(error.message || 'Failed to start sync')
107+
})
108+
}
109+
110+
const cancelSync = async (item) => {
111+
const cancelEndpoint = `/lfs_sync/cancel`
112+
const { data, error } = await useFetchApi(cancelEndpoint, {
113+
method: 'POST',
114+
headers: {
115+
'Content-Type': 'application/json'
116+
},
117+
body: JSON.stringify({
118+
mirror_id: item.id
119+
})
120+
}).json()
121+
if (data.value) {
122+
ElMessage.success('Sync cancelled successfully')
123+
fetchSyncRecords();
124+
} else {
125+
ElMessage.warning(error.value.msg)
126+
}
127+
}
128+
79129
const createSyncSetting = async () => {
80130
const createEndpoint = '/sync/client_setting'
81131
const { data, error } = await useFetchApi(createEndpoint, {

0 commit comments

Comments
 (0)