diff --git a/agent/app/api/v2/dashboard.go b/agent/app/api/v2/dashboard.go index 1febbbb5f..0c5936f73 100644 --- a/agent/app/api/v2/dashboard.go +++ b/agent/app/api/v2/dashboard.go @@ -52,6 +52,17 @@ func (b *BaseApi) LoadDashboardBaseInfo(c *gin.Context) { helper.SuccessWithData(c, data) } +// @Tags Dashboard +// @Summary Load dashboard current info for node +// @Description 获取节点实时数据 +// @Success 200 {object} dto.NodeCurrent +// @Security ApiKeyAuth +// @Router /dashboard/current/node [get] +func (b *BaseApi) LoadCurrentInfoForNode(c *gin.Context) { + data := dashboardService.LoadCurrentInfoForNode() + helper.SuccessWithData(c, data) +} + // @Tags Dashboard // @Summary Load dashboard current info // @Description 获取首页实时数据 diff --git a/agent/app/api/v2/helper/helper.go b/agent/app/api/v2/helper/helper.go index 36142c862..b798bcce2 100644 --- a/agent/app/api/v2/helper/helper.go +++ b/agent/app/api/v2/helper/helper.go @@ -32,12 +32,6 @@ func ErrorWithDetail(ctx *gin.Context, code int, msgKey string, err error) { res.Message = i18n.GetMsgWithMap("ErrInvalidParams", nil) case errors.Is(constant.ErrStructTransform, err): res.Message = i18n.GetMsgWithMap("ErrStructTransform", map[string]interface{}{"detail": err}) - case errors.Is(constant.ErrCaptchaCode, err): - res.Code = constant.CodeAuth - res.Message = "ErrCaptchaCode" - case errors.Is(constant.ErrAuth, err): - res.Code = constant.CodeAuth - res.Message = "ErrAuth" case errors.Is(constant.ErrInitialPassword, err): res.Message = i18n.GetMsgWithMap("ErrInitialPassword", map[string]interface{}{"detail": err}) case errors.As(err, &buserr.BusinessError{}): diff --git a/agent/app/dto/dashboard.go b/agent/app/dto/dashboard.go index a7d3a5c95..d00b2965f 100644 --- a/agent/app/dto/dashboard.go +++ b/agent/app/dto/dashboard.go @@ -34,6 +34,27 @@ type OsInfo struct { DiskSize int64 `json:"diskSize"` } +type NodeCurrent struct { + Load1 float64 `json:"load1"` + Load5 float64 `json:"load5"` + Load15 float64 `json:"load15"` + LoadUsagePercent float64 `json:"loadUsagePercent"` + + CPUUsedPercent float64 `json:"cpuUsedPercent"` + CPUUsed float64 `json:"cpuUsed"` + CPUTotal int `json:"cpuTotal"` + + MemoryTotal uint64 `json:"memoryTotal"` + MemoryAvailable uint64 `json:"memoryAvailable"` + MemoryUsed uint64 `json:"memoryUsed"` + MemoryUsedPercent float64 `json:"memoryUsedPercent"` + + SwapMemoryTotal uint64 `json:"swapMemoryTotal"` + SwapMemoryAvailable uint64 `json:"swapMemoryAvailable"` + SwapMemoryUsed uint64 `json:"swapMemoryUsed"` + SwapMemoryUsedPercent float64 `json:"swapMemoryUsedPercent"` +} + type DashboardCurrent struct { Uptime uint64 `json:"uptime"` TimeSinceUptime string `json:"timeSinceUptime"` diff --git a/agent/app/service/backup.go b/agent/app/service/backup.go index 7df7646ae..d89368542 100644 --- a/agent/app/service/backup.go +++ b/agent/app/service/backup.go @@ -384,6 +384,7 @@ func LoadLocalDirByStr(vars string) (string, error) { } return baseDir, nil } + return baseDir, nil } return "", fmt.Errorf("error type dir: %T", varMap["dir"]) } diff --git a/agent/app/service/dashboard.go b/agent/app/service/dashboard.go index 9558e1ca1..35199d3d8 100644 --- a/agent/app/service/dashboard.go +++ b/agent/app/service/dashboard.go @@ -27,6 +27,7 @@ type DashboardService struct{} type IDashboardService interface { LoadOsInfo() (*dto.OsInfo, error) LoadBaseInfo(ioOption string, netOption string) (*dto.DashboardBase, error) + LoadCurrentInfoForNode() *dto.NodeCurrent LoadCurrentInfo(ioOption string, netOption string) *dto.DashboardCurrent Restart(operation string) error @@ -40,7 +41,7 @@ func (u *DashboardService) Restart(operation string) error { if operation != "1panel" && operation != "system" { return fmt.Errorf("handle restart operation %s failed, err: nonsupport such operation", operation) } - itemCmd := fmt.Sprintf("%s 1pctl restart", cmd.SudoHandleCmd()) + itemCmd := fmt.Sprintf("%s systemctl restart 1panel.service", cmd.SudoHandleCmd()) if operation == "system" { itemCmd = fmt.Sprintf("%s reboot", cmd.SudoHandleCmd()) } @@ -79,6 +80,37 @@ func (u *DashboardService) LoadOsInfo() (*dto.OsInfo, error) { return &baseInfo, nil } +func (u *DashboardService) LoadCurrentInfoForNode() *dto.NodeCurrent { + var currentInfo dto.NodeCurrent + + currentInfo.CPUTotal, _ = cpu.Counts(true) + totalPercent, _ := cpu.Percent(0, false) + if len(totalPercent) == 1 { + currentInfo.CPUUsedPercent = totalPercent[0] + currentInfo.CPUUsed = currentInfo.CPUUsedPercent * 0.01 * float64(currentInfo.CPUTotal) + } + + loadInfo, _ := load.Avg() + currentInfo.Load1 = loadInfo.Load1 + currentInfo.Load5 = loadInfo.Load5 + currentInfo.Load15 = loadInfo.Load15 + currentInfo.LoadUsagePercent = loadInfo.Load1 / (float64(currentInfo.CPUTotal*2) * 0.75) * 100 + + memoryInfo, _ := mem.VirtualMemory() + currentInfo.MemoryTotal = memoryInfo.Total + currentInfo.MemoryAvailable = memoryInfo.Available + currentInfo.MemoryUsed = memoryInfo.Used + currentInfo.MemoryUsedPercent = memoryInfo.UsedPercent + + swapInfo, _ := mem.SwapMemory() + currentInfo.SwapMemoryTotal = swapInfo.Total + currentInfo.SwapMemoryAvailable = swapInfo.Free + currentInfo.SwapMemoryUsed = swapInfo.Used + currentInfo.SwapMemoryUsedPercent = swapInfo.UsedPercent + + return ¤tInfo +} + func (u *DashboardService) LoadBaseInfo(ioOption string, netOption string) (*dto.DashboardBase, error) { var baseInfo dto.DashboardBase hostInfo, err := host.Info() diff --git a/agent/constant/errs.go b/agent/constant/errs.go index 411387d3d..3dc3fae3d 100644 --- a/agent/constant/errs.go +++ b/agent/constant/errs.go @@ -7,46 +7,32 @@ import ( const ( CodeSuccess = 200 CodeErrBadRequest = 400 - CodeErrUnauthorized = 401 - CodeErrNotFound = 404 - CodeAuth = 406 CodeGlobalLoading = 407 CodeErrInternalServer = 500 - CodeErrIP = 310 - CodeErrDomain = 311 - CodeErrEntrance = 312 - CodePasswordExpired = 313 - CodeErrXpack = 410 ) // internal var ( - ErrCaptchaCode = errors.New("ErrCaptchaCode") - ErrAuth = errors.New("ErrAuth") ErrRecordExist = errors.New("ErrRecordExist") ErrRecordNotFound = errors.New("ErrRecordNotFound") ErrStructTransform = errors.New("ErrStructTransform") ErrInitialPassword = errors.New("ErrInitialPassword") ErrNotSupportType = errors.New("ErrNotSupportType") ErrInvalidParams = errors.New("ErrInvalidParams") - - ErrTokenParse = errors.New("ErrTokenParse") ) // api var ( - ErrTypeInternalServer = "ErrInternalServer" - ErrTypeInvalidParams = "ErrInvalidParams" - ErrTypeNotLogin = "ErrNotLogin" - ErrTypePasswordExpired = "ErrPasswordExpired" - ErrNameIsExist = "ErrNameIsExist" - ErrDemoEnvironment = "ErrDemoEnvironment" - ErrCmdIllegal = "ErrCmdIllegal" - ErrXpackNotFound = "ErrXpackNotFound" - ErrXpackNotActive = "ErrXpackNotActive" - ErrXpackOutOfDate = "ErrXpackOutOfDate" + ErrTypeInternalServer = "ErrInternalServer" + ErrTypeInvalidParams = "ErrInvalidParams" + ErrNameIsExist = "ErrNameIsExist" + ErrDemoEnvironment = "ErrDemoEnvironment" + ErrCmdIllegal = "ErrCmdIllegal" + ErrXpackNotFound = "ErrXpackNotFound" + ErrXpackNotActive = "ErrXpackNotActive" + ErrXpackOutOfDate = "ErrXpackOutOfDate" ) // app @@ -95,7 +81,7 @@ var ( ErrPathNotFound = "ErrPathNotFound" ErrMovePathFailed = "ErrMovePathFailed" ErrLinkPathNotFound = "ErrLinkPathNotFound" - ErrFileIsExist = "ErrFileIsExist" + ErrFileIsExist = "ErrFileIsExist" ErrFileUpload = "ErrFileUpload" ErrFileDownloadDir = "ErrFileDownloadDir" ErrCmdNotFound = "ErrCmdNotFound" diff --git a/agent/constant/session.go b/agent/constant/session.go index 94fdf462d..189fdb62c 100644 --- a/agent/constant/session.go +++ b/agent/constant/session.go @@ -1,13 +1,5 @@ package constant const ( - AuthMethodSession = "session" - SessionName = "psession" - - AuthMethodJWT = "jwt" JWTHeaderName = "PanelAuthorization" - JWTBufferTime = 3600 - JWTIssuer = "1Panel" - - PasswordExpiredName = "expired" ) diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index bca70a3fc..6a9166083 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -1,5 +1,4 @@ ErrInvalidParams: "Request parameter error: {{ .detail }}" -ErrTokenParse: "Token generation error: {{ .detail }}" ErrInitialPassword: "Initial password error" ErrInternalServer: "Service internal error: {{ .detail }}" ErrRecordExist: "Record already exists" diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 08d8e0fe1..d2a4b63f7 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -1,5 +1,4 @@ ErrInvalidParams: "請求參數錯誤: {{ .detail }}" -ErrTokenParse: "Token 產生錯誤: {{ .detail }}" ErrInitialPassword: "原密碼錯誤" ErrInternalServer: "伺服器內部錯誤: {{ .detail }}" ErrRecordExist: "記錄已存在" diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 7dfaca7d1..cf9258006 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -1,5 +1,4 @@ ErrInvalidParams: "请求参数错误: {{ .detail }}" -ErrTokenParse: "Token 生成错误: {{ .detail }}" ErrInitialPassword: "原密码错误" ErrInternalServer: "服务内部错误: {{ .detail }}" ErrRecordExist: "记录已存在" diff --git a/agent/router/ro_dashboard.go b/agent/router/ro_dashboard.go index 2d8d04e0a..f78e58c46 100644 --- a/agent/router/ro_dashboard.go +++ b/agent/router/ro_dashboard.go @@ -13,6 +13,7 @@ func (s *DashboardRouter) InitRouter(Router *gin.RouterGroup) { { cmdRouter.GET("/base/os", baseApi.LoadDashboardOsInfo) cmdRouter.GET("/base/:ioOption/:netOption", baseApi.LoadDashboardBaseInfo) + cmdRouter.GET("/current/node", baseApi.LoadCurrentInfoForNode) cmdRouter.GET("/current/:ioOption/:netOption", baseApi.LoadDashboardCurrentInfo) cmdRouter.POST("/system/restart/:operation", baseApi.SystemRestart) } diff --git a/core/app/service/backup.go b/core/app/service/backup.go index e084cce84..4308ed25f 100644 --- a/core/app/service/backup.go +++ b/core/app/service/backup.go @@ -407,6 +407,7 @@ func LoadLocalDirByStr(vars string) (string, error) { return "", fmt.Errorf("mkdir %s failed, err: %v", baseDir, err) } } + return baseDir, nil } return "", fmt.Errorf("error type dir: %T", varMap["dir"]) } diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index fe8b03cb8..fd61c53f8 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -27,7 +27,7 @@ class RequestHttp { ...config.headers, }; config.headers.CurrentNode = globalStore.currentNode; - if (config.url === '/auth/login' || config.url === '/auth/mfalogin') { + if (config.url === '/core/auth/login' || config.url === '/core/auth/mfalogin') { let entrance = Base64.encode(globalStore.entrance); config.headers.EntranceCode = entrance; } diff --git a/frontend/src/components/table-setting/index.vue b/frontend/src/components/table-setting/index.vue index 3f5208f2d..8495d11f0 100644 --- a/frontend/src/components/table-setting/index.vue +++ b/frontend/src/components/table-setting/index.vue @@ -1,8 +1,8 @@