mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 14:57:16 +08:00
feat: 接口调整
This commit is contained in:
@@ -187,7 +187,7 @@ func (c *Mysql57Controller) Load(ctx http.Context) http.Response {
|
||||
return controllers.Error(ctx, http.StatusInternalServerError, "获取MySQL负载失败")
|
||||
}
|
||||
|
||||
data := make(map[int]map[string]string)
|
||||
var data []map[string]string
|
||||
expressions := []struct {
|
||||
regex string
|
||||
name string
|
||||
@@ -212,16 +212,18 @@ func (c *Mysql57Controller) Load(ctx http.Context) http.Response {
|
||||
{`Table_locks_waited\s+\|\s+(\d+)\s+\|`, "锁表次数"},
|
||||
}
|
||||
|
||||
for i, expression := range expressions {
|
||||
for _, expression := range expressions {
|
||||
re := regexp.MustCompile(expression.regex)
|
||||
matches := re.FindStringSubmatch(raw)
|
||||
if len(matches) > 1 {
|
||||
data[i] = make(map[string]string)
|
||||
data[i] = map[string]string{"name": expression.name, "value": matches[1]}
|
||||
d := make(map[string]string)
|
||||
d = map[string]string{"name": expression.name, "value": matches[1]}
|
||||
|
||||
if expression.name == "发送" || expression.name == "接收" {
|
||||
data[i]["value"] = tools.FormatBytes(cast.ToFloat64(matches[1]))
|
||||
d["value"] = tools.FormatBytes(cast.ToFloat64(matches[1]))
|
||||
}
|
||||
|
||||
data = append(data, d)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -527,7 +529,7 @@ func (c *Mysql57Controller) DeleteBackup(ctx http.Context) http.Response {
|
||||
}
|
||||
|
||||
validator, err := ctx.Request().Validate(map[string]string{
|
||||
"name": "required|min_len:1|max_len:255",
|
||||
"backup": "required|min_len:1|max_len:255",
|
||||
})
|
||||
if err != nil {
|
||||
return controllers.Error(ctx, http.StatusBadRequest, err.Error())
|
||||
@@ -537,7 +539,7 @@ func (c *Mysql57Controller) DeleteBackup(ctx http.Context) http.Response {
|
||||
}
|
||||
|
||||
backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/mysql"
|
||||
fileName := ctx.Request().Input("name")
|
||||
fileName := ctx.Request().Input("backup")
|
||||
tools.Remove(backupPath + "/" + fileName)
|
||||
|
||||
return controllers.Success(ctx, "删除备份成功")
|
||||
@@ -551,7 +553,7 @@ func (c *Mysql57Controller) RestoreBackup(ctx http.Context) http.Response {
|
||||
}
|
||||
|
||||
validator, err := ctx.Request().Validate(map[string]string{
|
||||
"name": "required|min_len:1|max_len:255",
|
||||
"backup": "required|min_len:1|max_len:255",
|
||||
"database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys",
|
||||
})
|
||||
if err != nil {
|
||||
@@ -561,7 +563,7 @@ func (c *Mysql57Controller) RestoreBackup(ctx http.Context) http.Response {
|
||||
return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One())
|
||||
}
|
||||
|
||||
err = c.backup.MysqlRestore(ctx.Request().Input("database"), ctx.Request().Input("name"))
|
||||
err = c.backup.MysqlRestore(ctx.Request().Input("database"), ctx.Request().Input("backup"))
|
||||
if err != nil {
|
||||
facades.Log().Error("[MYSQL57] 还原失败:" + err.Error())
|
||||
return controllers.Error(ctx, http.StatusInternalServerError, "还原失败: "+err.Error())
|
||||
|
||||
@@ -187,7 +187,7 @@ func (c *Mysql80Controller) Load(ctx http.Context) http.Response {
|
||||
return controllers.Error(ctx, http.StatusInternalServerError, "获取MySQL负载失败")
|
||||
}
|
||||
|
||||
data := make(map[int]map[string]string)
|
||||
var data []map[string]string
|
||||
expressions := []struct {
|
||||
regex string
|
||||
name string
|
||||
@@ -212,16 +212,18 @@ func (c *Mysql80Controller) Load(ctx http.Context) http.Response {
|
||||
{`Table_locks_waited\s+\|\s+(\d+)\s+\|`, "锁表次数"},
|
||||
}
|
||||
|
||||
for i, expression := range expressions {
|
||||
for _, expression := range expressions {
|
||||
re := regexp.MustCompile(expression.regex)
|
||||
matches := re.FindStringSubmatch(raw)
|
||||
if len(matches) > 1 {
|
||||
data[i] = make(map[string]string)
|
||||
data[i] = map[string]string{"name": expression.name, "value": matches[1]}
|
||||
d := make(map[string]string)
|
||||
d = map[string]string{"name": expression.name, "value": matches[1]}
|
||||
|
||||
if expression.name == "发送" || expression.name == "接收" {
|
||||
data[i]["value"] = tools.FormatBytes(cast.ToFloat64(matches[1]))
|
||||
d["value"] = tools.FormatBytes(cast.ToFloat64(matches[1]))
|
||||
}
|
||||
|
||||
data = append(data, d)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -527,7 +529,7 @@ func (c *Mysql80Controller) DeleteBackup(ctx http.Context) http.Response {
|
||||
}
|
||||
|
||||
validator, err := ctx.Request().Validate(map[string]string{
|
||||
"name": "required|min_len:1|max_len:255",
|
||||
"backup": "required|min_len:1|max_len:255",
|
||||
})
|
||||
if err != nil {
|
||||
return controllers.Error(ctx, http.StatusBadRequest, err.Error())
|
||||
@@ -537,7 +539,7 @@ func (c *Mysql80Controller) DeleteBackup(ctx http.Context) http.Response {
|
||||
}
|
||||
|
||||
backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/mysql"
|
||||
fileName := ctx.Request().Input("name")
|
||||
fileName := ctx.Request().Input("backup")
|
||||
tools.Remove(backupPath + "/" + fileName)
|
||||
|
||||
return controllers.Success(ctx, "删除备份成功")
|
||||
@@ -551,7 +553,7 @@ func (c *Mysql80Controller) RestoreBackup(ctx http.Context) http.Response {
|
||||
}
|
||||
|
||||
validator, err := ctx.Request().Validate(map[string]string{
|
||||
"name": "required|min_len:1|max_len:255",
|
||||
"backup": "required|min_len:1|max_len:255",
|
||||
"database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys",
|
||||
})
|
||||
if err != nil {
|
||||
@@ -561,7 +563,7 @@ func (c *Mysql80Controller) RestoreBackup(ctx http.Context) http.Response {
|
||||
return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One())
|
||||
}
|
||||
|
||||
err = c.backup.MysqlRestore(ctx.Request().Input("database"), ctx.Request().Input("name"))
|
||||
err = c.backup.MysqlRestore(ctx.Request().Input("database"), ctx.Request().Input("backup"))
|
||||
if err != nil {
|
||||
facades.Log().Error("[MYSQL80] 还原失败:" + err.Error())
|
||||
return controllers.Error(ctx, http.StatusInternalServerError, "还原失败: "+err.Error())
|
||||
|
||||
@@ -34,16 +34,13 @@ func (r *TaskController) Status(ctx http.Context) http.Response {
|
||||
|
||||
// List 获取任务列表
|
||||
func (r *TaskController) List(ctx http.Context) http.Response {
|
||||
status := ctx.Request().Query("status")
|
||||
if len(status) == 0 {
|
||||
status = models.TaskStatusWaiting
|
||||
}
|
||||
|
||||
var tasks []models.Task
|
||||
var total int64
|
||||
err := facades.Orm().Query().Where("status", status).Paginate(ctx.Request().QueryInt("page"), ctx.Request().QueryInt("limit"), &tasks, &total)
|
||||
err := facades.Orm().Query().Paginate(ctx.Request().QueryInt("page", 1), ctx.Request().QueryInt("limit", 10), &tasks, &total)
|
||||
if err != nil {
|
||||
facades.Log().Error("[面板][TaskController] 查询任务列表失败 ", err)
|
||||
facades.Log().With(map[string]any{
|
||||
"error": err.Error(),
|
||||
}).Error("[面板][TaskController] 查询任务列表失败")
|
||||
return Error(ctx, http.StatusInternalServerError, "系统内部错误")
|
||||
}
|
||||
|
||||
@@ -58,11 +55,14 @@ func (r *TaskController) Log(ctx http.Context) http.Response {
|
||||
var task models.Task
|
||||
err := facades.Orm().Query().Where("id", ctx.Request().QueryInt("id")).FirstOrFail(&task)
|
||||
if err != nil {
|
||||
facades.Log().Error("[面板][TaskController] 查询任务失败 ", err)
|
||||
facades.Log().With(map[string]any{
|
||||
"id": ctx.Request().QueryInt("id"),
|
||||
"error": err.Error(),
|
||||
}).Error("[面板][TaskController] 查询任务失败")
|
||||
return Error(ctx, http.StatusInternalServerError, "系统内部错误")
|
||||
}
|
||||
|
||||
log := tools.Exec("tail -n 30 " + task.Log)
|
||||
log := tools.Read(task.Log)
|
||||
|
||||
return Success(ctx, log)
|
||||
}
|
||||
@@ -72,7 +72,10 @@ func (r *TaskController) Delete(ctx http.Context) http.Response {
|
||||
var task models.Task
|
||||
_, err := facades.Orm().Query().Where("id", ctx.Request().Input("id")).Delete(&task)
|
||||
if err != nil {
|
||||
facades.Log().Error("[面板][TaskController] 删除任务失败 ", err)
|
||||
facades.Log().With(map[string]any{
|
||||
"id": ctx.Request().QueryInt("id"),
|
||||
"error": err.Error(),
|
||||
}).Error("[面板][TaskController] 删除任务失败")
|
||||
return Error(ctx, http.StatusInternalServerError, "系统内部错误")
|
||||
}
|
||||
|
||||
|
||||
@@ -30,8 +30,8 @@ func NewWebsiteController() *WebsiteController {
|
||||
|
||||
// List 网站列表
|
||||
func (c *WebsiteController) List(ctx http.Context) http.Response {
|
||||
limit := ctx.Request().QueryInt("limit")
|
||||
page := ctx.Request().QueryInt("page")
|
||||
limit := ctx.Request().QueryInt("limit", 10)
|
||||
page := ctx.Request().QueryInt("page", 1)
|
||||
|
||||
total, websites, err := c.website.List(page, limit)
|
||||
if err != nil {
|
||||
|
||||
@@ -8,6 +8,6 @@ func init() {
|
||||
config := facades.Config()
|
||||
config.Add("panel", map[string]any{
|
||||
"name": "耗子Linux面板",
|
||||
"version": "v2.1.1",
|
||||
"version": "v2.1.3",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -54,19 +54,19 @@ func Plugin() {
|
||||
route.Post("clearSlowLog", mysql57Controller.ClearSlowLog)
|
||||
route.Get("rootPassword", mysql57Controller.GetRootPassword)
|
||||
route.Post("rootPassword", mysql57Controller.SetRootPassword)
|
||||
route.Get("database", mysql57Controller.DatabaseList)
|
||||
route.Post("addDatabase", mysql57Controller.AddDatabase)
|
||||
route.Post("deleteDatabase", mysql57Controller.DeleteDatabase)
|
||||
route.Get("backup", mysql57Controller.BackupList)
|
||||
route.Post("createBackup", mysql57Controller.CreateBackup)
|
||||
route.Post("uploadBackup", mysql57Controller.UploadBackup)
|
||||
route.Post("deleteBackup", mysql57Controller.DeleteBackup)
|
||||
route.Post("restoreBackup", mysql57Controller.RestoreBackup)
|
||||
route.Get("user", mysql57Controller.UserList)
|
||||
route.Post("addUser", mysql57Controller.AddUser)
|
||||
route.Post("deleteUser", mysql57Controller.DeleteUser)
|
||||
route.Post("userPassword", mysql57Controller.SetUserPassword)
|
||||
route.Post("userPrivileges", mysql57Controller.SetUserPrivileges)
|
||||
route.Get("databases", mysql57Controller.DatabaseList)
|
||||
route.Post("databases", mysql57Controller.AddDatabase)
|
||||
route.Delete("databases", mysql57Controller.DeleteDatabase)
|
||||
route.Get("backups", mysql57Controller.BackupList)
|
||||
route.Post("backups", mysql57Controller.CreateBackup)
|
||||
route.Put("backups", mysql57Controller.UploadBackup)
|
||||
route.Delete("backups", mysql57Controller.DeleteBackup)
|
||||
route.Post("backups/restore", mysql57Controller.RestoreBackup)
|
||||
route.Get("users", mysql57Controller.UserList)
|
||||
route.Post("users", mysql57Controller.AddUser)
|
||||
route.Delete("users", mysql57Controller.DeleteUser)
|
||||
route.Post("users/password", mysql57Controller.SetUserPassword)
|
||||
route.Post("users/privileges", mysql57Controller.SetUserPrivileges)
|
||||
})
|
||||
facades.Route().Prefix("api/plugins/mysql80").Middleware(middleware.Jwt()).Group(func(route route.Router) {
|
||||
mysql80Controller := mysql80.NewMysql80Controller()
|
||||
@@ -84,19 +84,19 @@ func Plugin() {
|
||||
route.Post("clearSlowLog", mysql80Controller.ClearSlowLog)
|
||||
route.Get("rootPassword", mysql80Controller.GetRootPassword)
|
||||
route.Post("rootPassword", mysql80Controller.SetRootPassword)
|
||||
route.Get("database", mysql80Controller.DatabaseList)
|
||||
route.Post("addDatabase", mysql80Controller.AddDatabase)
|
||||
route.Post("deleteDatabase", mysql80Controller.DeleteDatabase)
|
||||
route.Get("backup", mysql80Controller.BackupList)
|
||||
route.Post("createBackup", mysql80Controller.CreateBackup)
|
||||
route.Post("uploadBackup", mysql80Controller.UploadBackup)
|
||||
route.Post("deleteBackup", mysql80Controller.DeleteBackup)
|
||||
route.Post("restoreBackup", mysql80Controller.RestoreBackup)
|
||||
route.Get("user", mysql80Controller.UserList)
|
||||
route.Post("addUser", mysql80Controller.AddUser)
|
||||
route.Post("deleteUser", mysql80Controller.DeleteUser)
|
||||
route.Post("userPassword", mysql80Controller.SetUserPassword)
|
||||
route.Post("userPrivileges", mysql80Controller.SetUserPrivileges)
|
||||
route.Get("databases", mysql80Controller.DatabaseList)
|
||||
route.Post("databases", mysql80Controller.AddDatabase)
|
||||
route.Delete("databases", mysql80Controller.DeleteDatabase)
|
||||
route.Get("backups", mysql80Controller.BackupList)
|
||||
route.Post("backups", mysql80Controller.CreateBackup)
|
||||
route.Put("backups", mysql80Controller.UploadBackup)
|
||||
route.Delete("backups", mysql80Controller.DeleteBackup)
|
||||
route.Post("backups/restore", mysql80Controller.RestoreBackup)
|
||||
route.Get("users", mysql80Controller.UserList)
|
||||
route.Post("users", mysql80Controller.AddUser)
|
||||
route.Delete("users", mysql80Controller.DeleteUser)
|
||||
route.Post("users/password", mysql80Controller.SetUserPassword)
|
||||
route.Post("users/privileges", mysql80Controller.SetUserPrivileges)
|
||||
})
|
||||
facades.Route().Prefix("api/plugins/postgresql15").Middleware(middleware.Jwt()).Group(func(route route.Router) {
|
||||
postgresql15Controller := postgresql15.NewPostgresql15Controller()
|
||||
|
||||
Reference in New Issue
Block a user