mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-10 23:47:39 +08:00
fix: Add custom timeout support for remote database (#9859)
This commit is contained in:
parent
9c5a6e3925
commit
37308b5c42
17 changed files with 37 additions and 16 deletions
|
@ -135,6 +135,7 @@ func (u *DatabaseService) CheckDatabase(req dto.DatabaseCreate) bool {
|
||||||
Address: req.Address,
|
Address: req.Address,
|
||||||
Port: req.Port,
|
Port: req.Port,
|
||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
|
Timeout: req.Timeout,
|
||||||
})
|
})
|
||||||
return err == nil
|
return err == nil
|
||||||
case "mysql", "mariadb":
|
case "mysql", "mariadb":
|
||||||
|
@ -186,6 +187,7 @@ func (u *DatabaseService) Create(req dto.DatabaseCreate) error {
|
||||||
Address: req.Address,
|
Address: req.Address,
|
||||||
Port: req.Port,
|
Port: req.Port,
|
||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
|
Timeout: req.Timeout,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -286,6 +288,7 @@ func (u *DatabaseService) Update(req dto.DatabaseUpdate) error {
|
||||||
Address: req.Address,
|
Address: req.Address,
|
||||||
Port: req.Port,
|
Port: req.Port,
|
||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
|
Timeout: req.Timeout,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package redis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/agent/global"
|
"github.com/1Panel-dev/1Panel/agent/global"
|
||||||
"github.com/go-redis/redis"
|
"github.com/go-redis/redis"
|
||||||
|
@ -11,6 +12,7 @@ type DBInfo struct {
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
Port uint `json:"port"`
|
Port uint `json:"port"`
|
||||||
Password string `json:"password"`
|
Password string `json:"password"`
|
||||||
|
Timeout uint `json:"timeout"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRedisClient(conn DBInfo) (*redis.Client, error) {
|
func NewRedisClient(conn DBInfo) (*redis.Client, error) {
|
||||||
|
@ -18,6 +20,7 @@ func NewRedisClient(conn DBInfo) (*redis.Client, error) {
|
||||||
Addr: fmt.Sprintf("%s:%v", conn.Address, conn.Port),
|
Addr: fmt.Sprintf("%s:%v", conn.Address, conn.Port),
|
||||||
Password: conn.Password,
|
Password: conn.Password,
|
||||||
DB: 0,
|
DB: 0,
|
||||||
|
DialTimeout: time.Duration(conn.Timeout) * time.Second,
|
||||||
})
|
})
|
||||||
|
|
||||||
if _, err := client.Ping().Result(); err != nil {
|
if _, err := client.Ping().Result(); err != nil {
|
||||||
|
|
|
@ -163,7 +163,7 @@ export const checkDatabase = (params: Database.DatabaseCreate) => {
|
||||||
request.rootCert = Base64.encode(request.rootCert);
|
request.rootCert = Base64.encode(request.rootCert);
|
||||||
}
|
}
|
||||||
|
|
||||||
return http.post<boolean>(`/databases/db/check`, request, TimeoutEnum.T_40S);
|
return http.post<boolean>(`/databases/db/check`, request, TimeoutEnum.T_60S);
|
||||||
};
|
};
|
||||||
export const addDatabase = (params: Database.DatabaseCreate) => {
|
export const addDatabase = (params: Database.DatabaseCreate) => {
|
||||||
let request = deepCopy(params) as Database.DatabaseCreate;
|
let request = deepCopy(params) as Database.DatabaseCreate;
|
||||||
|
@ -173,7 +173,7 @@ export const addDatabase = (params: Database.DatabaseCreate) => {
|
||||||
request.rootCert = Base64.encode(request.rootCert);
|
request.rootCert = Base64.encode(request.rootCert);
|
||||||
}
|
}
|
||||||
|
|
||||||
return http.post(`/databases/db`, request, TimeoutEnum.T_40S);
|
return http.post(`/databases/db`, request, TimeoutEnum.T_60S);
|
||||||
};
|
};
|
||||||
export const editDatabase = (params: Database.DatabaseUpdate) => {
|
export const editDatabase = (params: Database.DatabaseUpdate) => {
|
||||||
let request = deepCopy(params) as Database.DatabaseCreate;
|
let request = deepCopy(params) as Database.DatabaseCreate;
|
||||||
|
@ -183,7 +183,7 @@ export const editDatabase = (params: Database.DatabaseUpdate) => {
|
||||||
request.rootCert = Base64.encode(request.rootCert);
|
request.rootCert = Base64.encode(request.rootCert);
|
||||||
}
|
}
|
||||||
|
|
||||||
return http.post(`/databases/db/update`, request, TimeoutEnum.T_40S);
|
return http.post(`/databases/db/update`, request, TimeoutEnum.T_60S);
|
||||||
};
|
};
|
||||||
export const deleteCheckDatabase = (id: number) => {
|
export const deleteCheckDatabase = (id: number) => {
|
||||||
return http.post<Array<string>>(`/databases/db/del/check`, { id: id });
|
return http.post<Array<string>>(`/databases/db/del/check`, { id: id });
|
||||||
|
|
|
@ -488,7 +488,6 @@ const message = {
|
||||||
passwordHelper: 'Unable to retrieve, please modify',
|
passwordHelper: 'Unable to retrieve, please modify',
|
||||||
remote: 'Remote',
|
remote: 'Remote',
|
||||||
remoteDB: 'Remote server | Remote servers',
|
remoteDB: 'Remote server | Remote servers',
|
||||||
manageRemoteDB: 'Manage remote servers',
|
|
||||||
createRemoteDB: 'Bind @.lower:database.remoteDB',
|
createRemoteDB: 'Bind @.lower:database.remoteDB',
|
||||||
unBindRemoteDB: 'Unbind @.lower:database.remoteDB',
|
unBindRemoteDB: 'Unbind @.lower:database.remoteDB',
|
||||||
unBindForce: 'Force unbind',
|
unBindForce: 'Force unbind',
|
||||||
|
|
|
@ -474,7 +474,6 @@ const message = {
|
||||||
passwordHelper: '取得できない場合は、変更してください',
|
passwordHelper: '取得できない場合は、変更してください',
|
||||||
remote: 'リモート',
|
remote: 'リモート',
|
||||||
remoteDB: 'リモートサーバー|リモートサーバー',
|
remoteDB: 'リモートサーバー|リモートサーバー',
|
||||||
manageRemoteDB: 'リモートDB',
|
|
||||||
createRemoteDB: 'リモートサーバーを追加',
|
createRemoteDB: 'リモートサーバーを追加',
|
||||||
unBindRemoteDB: 'リモートサーバーのバインドを解除',
|
unBindRemoteDB: 'リモートサーバーのバインドを解除',
|
||||||
unBindForce: '強制バインド',
|
unBindForce: '強制バインド',
|
||||||
|
|
|
@ -473,7 +473,6 @@ const message = {
|
||||||
passwordHelper: '불러올 수 없습니다. 수정해주세요.',
|
passwordHelper: '불러올 수 없습니다. 수정해주세요.',
|
||||||
remote: '원격',
|
remote: '원격',
|
||||||
remoteDB: '원격 서버 | 원격 서버들',
|
remoteDB: '원격 서버 | 원격 서버들',
|
||||||
manageRemoteDB: '원격 DB 관리',
|
|
||||||
createRemoteDB: '원격 DB 바인딩',
|
createRemoteDB: '원격 DB 바인딩',
|
||||||
unBindRemoteDB: '원격 DB 바인딩 해제',
|
unBindRemoteDB: '원격 DB 바인딩 해제',
|
||||||
unBindForce: '강제 바인딩 해제',
|
unBindForce: '강제 바인딩 해제',
|
||||||
|
|
|
@ -485,7 +485,6 @@ const message = {
|
||||||
passwordHelper: 'Tidak dapat diambil, sila ubah',
|
passwordHelper: 'Tidak dapat diambil, sila ubah',
|
||||||
remote: 'Jauh',
|
remote: 'Jauh',
|
||||||
remoteDB: 'Pelayan jauh | Pelayan-pelayan jauh',
|
remoteDB: 'Pelayan jauh | Pelayan-pelayan jauh',
|
||||||
manageRemoteDB: 'Pangkalan Data Jauh',
|
|
||||||
createRemoteDB: 'Kaitkan @.lower:database.remoteDB',
|
createRemoteDB: 'Kaitkan @.lower:database.remoteDB',
|
||||||
unBindRemoteDB: 'Nyahkaitkan @.lower:database.remoteDB',
|
unBindRemoteDB: 'Nyahkaitkan @.lower:database.remoteDB',
|
||||||
unBindForce: 'Paksa nyahkait',
|
unBindForce: 'Paksa nyahkait',
|
||||||
|
|
|
@ -482,7 +482,6 @@ const message = {
|
||||||
passwordHelper: 'Não é possível obter, por favor, modifique',
|
passwordHelper: 'Não é possível obter, por favor, modifique',
|
||||||
remote: 'Remoto',
|
remote: 'Remoto',
|
||||||
remoteDB: 'Servidor remoto | Servidores remotos',
|
remoteDB: 'Servidor remoto | Servidores remotos',
|
||||||
manageRemoteDB: 'Gerenciar DB remoto',
|
|
||||||
createRemoteDB: 'Vincular @.lower:database.remoteDB',
|
createRemoteDB: 'Vincular @.lower:database.remoteDB',
|
||||||
unBindRemoteDB: 'Desvincular @.lower:database.remoteDB',
|
unBindRemoteDB: 'Desvincular @.lower:database.remoteDB',
|
||||||
unBindForce: 'Forçar desvinculação',
|
unBindForce: 'Forçar desvinculação',
|
||||||
|
|
|
@ -476,7 +476,6 @@ const message = {
|
||||||
passwordHelper: 'Невозможно получить, пожалуйста, измените',
|
passwordHelper: 'Невозможно получить, пожалуйста, измените',
|
||||||
remote: 'Удаленный',
|
remote: 'Удаленный',
|
||||||
remoteDB: 'Удаленный сервер | Удаленные серверы',
|
remoteDB: 'Удаленный сервер | Удаленные серверы',
|
||||||
manageRemoteDB: 'Удаленная БД',
|
|
||||||
createRemoteDB: 'Привязать @.lower:database.remoteDB',
|
createRemoteDB: 'Привязать @.lower:database.remoteDB',
|
||||||
unBindRemoteDB: 'Отвязать @.lower:database.remoteDB',
|
unBindRemoteDB: 'Отвязать @.lower:database.remoteDB',
|
||||||
unBindForce: 'Принудительная отвязка',
|
unBindForce: 'Принудительная отвязка',
|
||||||
|
|
|
@ -494,7 +494,6 @@ const message = {
|
||||||
passwordHelper: 'Alınamıyor, lütfen değiştirin',
|
passwordHelper: 'Alınamıyor, lütfen değiştirin',
|
||||||
remote: 'Uzak',
|
remote: 'Uzak',
|
||||||
remoteDB: 'Uzak sunucu | Uzak sunucular',
|
remoteDB: 'Uzak sunucu | Uzak sunucular',
|
||||||
manageRemoteDB: 'Uzak sunucuları yönet',
|
|
||||||
createRemoteDB: '@.lower:database.remoteDB Bağla',
|
createRemoteDB: '@.lower:database.remoteDB Bağla',
|
||||||
unBindRemoteDB: '@.lower:database.remoteDB Bağlantısını Çöz',
|
unBindRemoteDB: '@.lower:database.remoteDB Bağlantısını Çöz',
|
||||||
unBindForce: 'Zorla bağlantıyı çöz',
|
unBindForce: 'Zorla bağlantıyı çöz',
|
||||||
|
|
|
@ -472,7 +472,6 @@ const message = {
|
||||||
passwordHelper: '無法獲取密碼,請修改',
|
passwordHelper: '無法獲取密碼,請修改',
|
||||||
remote: '遠程',
|
remote: '遠程',
|
||||||
remoteDB: '遠程服務器',
|
remoteDB: '遠程服務器',
|
||||||
manageRemoteDB: '管理遠程服務器',
|
|
||||||
createRemoteDB: '添加遠程服務器',
|
createRemoteDB: '添加遠程服務器',
|
||||||
unBindRemoteDB: '解綁遠程服務器',
|
unBindRemoteDB: '解綁遠程服務器',
|
||||||
unBindForce: '強制解綁',
|
unBindForce: '強制解綁',
|
||||||
|
|
|
@ -470,7 +470,6 @@ const message = {
|
||||||
passwordHelper: '无法获取密码,请修改',
|
passwordHelper: '无法获取密码,请修改',
|
||||||
remote: '远程',
|
remote: '远程',
|
||||||
remoteDB: '远程服务器',
|
remoteDB: '远程服务器',
|
||||||
manageRemoteDB: '管理远程服务器',
|
|
||||||
createRemoteDB: '添加远程服务器',
|
createRemoteDB: '添加远程服务器',
|
||||||
unBindRemoteDB: '解绑远程服务器',
|
unBindRemoteDB: '解绑远程服务器',
|
||||||
unBindForce: '强制解绑',
|
unBindForce: '强制解绑',
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
{{ $t('database.loadFromRemote') }}
|
{{ $t('database.loadFromRemote') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button @click="goRemoteDB()" type="primary" plain>
|
<el-button @click="goRemoteDB()" type="primary" plain>
|
||||||
{{ $t('database.manageRemoteDB') }}
|
{{ $t('database.remoteDB') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-dropdown>
|
<el-dropdown>
|
||||||
<el-button type="primary" plain>
|
<el-button type="primary" plain>
|
||||||
|
|
|
@ -127,12 +127,14 @@ const onOpenDialog = async (
|
||||||
username: '',
|
username: '',
|
||||||
password: '',
|
password: '',
|
||||||
description: '',
|
description: '',
|
||||||
|
timeout: 30,
|
||||||
},
|
},
|
||||||
) => {
|
) => {
|
||||||
let params = {
|
let params = {
|
||||||
title,
|
title,
|
||||||
rowData: { ...rowData },
|
rowData: { ...rowData },
|
||||||
};
|
};
|
||||||
|
params.rowData.timeout = 30;
|
||||||
dialogRef.value!.acceptParams(params);
|
dialogRef.value!.acceptParams(params);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,16 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item :label="$t('database.timeout')" prop="timeout">
|
||||||
|
<el-input-number
|
||||||
|
class="p-w-200"
|
||||||
|
:min="1"
|
||||||
|
:precision="0"
|
||||||
|
step-strictly
|
||||||
|
:step="1"
|
||||||
|
v-model.number="dialogData.rowData!.timeout"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item :label="$t('commons.table.description')" prop="description">
|
<el-form-item :label="$t('commons.table.description')" prop="description">
|
||||||
<el-input clearable v-model.trim="dialogData.rowData!.description" />
|
<el-input clearable v-model.trim="dialogData.rowData!.description" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
|
@ -127,12 +127,14 @@ const onOpenDialog = async (
|
||||||
username: '-',
|
username: '-',
|
||||||
password: '',
|
password: '',
|
||||||
description: '',
|
description: '',
|
||||||
|
timeout: 30,
|
||||||
},
|
},
|
||||||
) => {
|
) => {
|
||||||
let params = {
|
let params = {
|
||||||
title,
|
title,
|
||||||
rowData: { ...rowData },
|
rowData: { ...rowData },
|
||||||
};
|
};
|
||||||
|
params.rowData.timeout = 30;
|
||||||
dialogRef.value!.acceptParams(params);
|
dialogRef.value!.acceptParams(params);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,16 @@
|
||||||
v-model.trim="dialogData.rowData!.password"
|
v-model.trim="dialogData.rowData!.password"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item :label="$t('database.timeout')" prop="timeout">
|
||||||
|
<el-input-number
|
||||||
|
class="p-w-200"
|
||||||
|
:min="1"
|
||||||
|
:precision="0"
|
||||||
|
step-strictly
|
||||||
|
:step="1"
|
||||||
|
v-model.number="dialogData.rowData!.timeout"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item :label="$t('commons.table.description')" prop="description">
|
<el-form-item :label="$t('commons.table.description')" prop="description">
|
||||||
<el-input clearable v-model.trim="dialogData.rowData!.description" />
|
<el-input clearable v-model.trim="dialogData.rowData!.description" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
Loading…
Add table
Reference in a new issue