457 lines
11 KiB
Go
457 lines
11 KiB
Go
package admin
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"jiacrontab/models"
|
|
"jiacrontab/pkg/proto"
|
|
"jiacrontab/pkg/util"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
paramsError = errors.New("参数错误")
|
|
)
|
|
|
|
type Parameter interface {
|
|
Verify(*myctx) error
|
|
}
|
|
|
|
type JobReqParams struct {
|
|
JobID uint `json:"jobID" rule:"required,请填写jobID"`
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
}
|
|
|
|
func (p *JobReqParams) Verify(*myctx) error {
|
|
if p.JobID == 0 || p.Addr == "" {
|
|
return paramsError
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type JobsReqParams struct {
|
|
JobIDs []uint `json:"jobIDs" `
|
|
Addr string `json:"addr"`
|
|
}
|
|
|
|
func (p *JobsReqParams) Verify(ctx *myctx) error {
|
|
|
|
if len(p.JobIDs) == 0 || p.Addr == "" {
|
|
return paramsError
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type EditJobReqParams struct {
|
|
JobID uint `json:"jobID"`
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
IsSync bool `json:"isSync"`
|
|
Name string `json:"name" rule:"required,请填写name"`
|
|
Command []string `json:"command" rule:"required,请填写name"`
|
|
Code string `json:"code"`
|
|
Timeout int `json:"timeout"`
|
|
MaxConcurrent uint `json:"maxConcurrent"`
|
|
ErrorMailNotify bool `json:"errorMailNotify"`
|
|
ErrorAPINotify bool `json:"errorAPINotify"`
|
|
ErrorDingdingNotify bool `json:"errorDingdingNotify"`
|
|
MailTo []string `json:"mailTo"`
|
|
APITo []string `json:"APITo"`
|
|
DingdingTo []string `json:"DingdingTo"`
|
|
RetryNum int `json:"retryNum"`
|
|
WorkDir string `json:"workDir"`
|
|
WorkUser string `json:"workUser"`
|
|
WorkEnv []string `json:"workEnv"`
|
|
WorkIp []string `json:"workIp"`
|
|
KillChildProcess bool `json:"killChildProcess"`
|
|
DependJobs models.DependJobs `json:"dependJobs"`
|
|
Month string `json:"month"`
|
|
Weekday string `json:"weekday"`
|
|
Day string `json:"day"`
|
|
Hour string `json:"hour"`
|
|
Minute string `json:"minute"`
|
|
Second string `json:"second"`
|
|
TimeoutTrigger []string `json:"timeoutTrigger"`
|
|
}
|
|
|
|
func (p *EditJobReqParams) Verify(ctx *myctx) error {
|
|
ts := map[string]bool{
|
|
proto.TimeoutTrigger_CallApi: true,
|
|
proto.TimeoutTrigger_SendEmail: true,
|
|
proto.TimeoutTrigger_Kill: true,
|
|
proto.TimeoutTrigger_DingdingWebhook: true,
|
|
}
|
|
|
|
for _, v := range p.TimeoutTrigger {
|
|
if !ts[v] {
|
|
return fmt.Errorf("%s:%v", v, paramsError)
|
|
}
|
|
}
|
|
|
|
p.Command = util.FilterEmptyEle(p.Command)
|
|
p.MailTo = util.FilterEmptyEle(p.MailTo)
|
|
p.APITo = util.FilterEmptyEle(p.APITo)
|
|
p.DingdingTo = util.FilterEmptyEle(p.DingdingTo)
|
|
p.WorkEnv = util.FilterEmptyEle(p.WorkEnv)
|
|
p.WorkIp = util.FilterEmptyEle(p.WorkIp)
|
|
|
|
if p.Month == "" {
|
|
p.Month = "*"
|
|
}
|
|
|
|
if p.Weekday == "" {
|
|
p.Weekday = "*"
|
|
}
|
|
|
|
if p.Day == "" {
|
|
p.Day = "*"
|
|
}
|
|
|
|
if p.Hour == "" {
|
|
p.Hour = "*"
|
|
}
|
|
|
|
if p.Minute == "" {
|
|
p.Minute = "*"
|
|
}
|
|
|
|
if p.Second == "" {
|
|
p.Second = "*"
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type GetLogReqParams struct {
|
|
Addr string `json:"addr"`
|
|
JobID uint `json:"jobID"`
|
|
Date string `json:"date"`
|
|
Pattern string `json:"pattern"`
|
|
IsTail bool `json:"isTail"`
|
|
Offset int64 `json:"offset"`
|
|
Pagesize int `json:"pagesize"`
|
|
}
|
|
|
|
func (p *GetLogReqParams) Verify(ctx *myctx) error {
|
|
|
|
if p.Pagesize <= 0 {
|
|
p.Pagesize = 50
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type DeleteNodeReqParams struct {
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
GroupID uint `json:"groupID"`
|
|
}
|
|
|
|
func (p *DeleteNodeReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type CleanNodeLogReqParams struct {
|
|
Unit string `json:"unit" rule:"required,请填写时间单位"`
|
|
Offset int `json:"offset"`
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
}
|
|
|
|
func (p *CleanNodeLogReqParams) Verify(ctx *myctx) error {
|
|
if p.Unit != "day" && p.Unit != "month" {
|
|
return errors.New("不支持的时间单位")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type SendTestMailReqParams struct {
|
|
MailTo string `json:"mailTo" rule:"required,请填写mailTo"`
|
|
}
|
|
|
|
func (p *SendTestMailReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type SystemInfoReqParams struct {
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
}
|
|
|
|
func (p *SystemInfoReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type GetJobListReqParams struct {
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
SearchTxt string `json:"searchTxt"`
|
|
PageReqParams
|
|
}
|
|
|
|
func (p *GetJobListReqParams) Verify(ctx *myctx) error {
|
|
|
|
if p.Page <= 1 {
|
|
p.Page = 1
|
|
}
|
|
|
|
if p.Pagesize <= 0 {
|
|
p.Pagesize = 50
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type GetGroupListReqParams struct {
|
|
SearchTxt string `json:"searchTxt"`
|
|
PageReqParams
|
|
}
|
|
|
|
func (p *GetGroupListReqParams) Verify(ctx *myctx) error {
|
|
|
|
if p.Page <= 1 {
|
|
p.Page = 1
|
|
}
|
|
|
|
if p.Pagesize <= 0 {
|
|
p.Pagesize = 50
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type ActionTaskReqParams struct {
|
|
Action string `json:"action" rule:"required,请填写action"`
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
JobIDs []uint `json:"jobIDs" rule:"required,请填写jobIDs"`
|
|
}
|
|
|
|
func (p *ActionTaskReqParams) Verify(ctx *myctx) error {
|
|
if len(p.JobIDs) == 0 {
|
|
return paramsError
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type EditDaemonJobReqParams struct {
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
JobID uint `json:"jobID"`
|
|
Name string `json:"name" rule:"required,请填写name"`
|
|
MailTo []string `json:"mailTo"`
|
|
APITo []string `json:"APITo"`
|
|
DingdingTo []string `json:"DingdingTo"`
|
|
Command []string `json:"command" rule:"required,请填写command"`
|
|
Code string `json:"code"`
|
|
WorkUser string `json:"workUser"`
|
|
WorkIp []string `json:"workIp"`
|
|
WorkEnv []string `json:"workEnv"`
|
|
WorkDir string `json:"workDir"`
|
|
FailRestart bool `json:"failRestart"`
|
|
RetryNum int `json:"retryNum"`
|
|
ErrorMailNotify bool `json:"errorMailNotify"`
|
|
ErrorAPINotify bool `json:"errorAPINotify"`
|
|
ErrorDingdingNotify bool `json:"errorDingdingNotify"`
|
|
}
|
|
|
|
func (p *EditDaemonJobReqParams) Verify(ctx *myctx) error {
|
|
p.MailTo = util.FilterEmptyEle(p.MailTo)
|
|
p.APITo = util.FilterEmptyEle(p.APITo)
|
|
p.Command = util.FilterEmptyEle(p.Command)
|
|
p.WorkEnv = util.FilterEmptyEle(p.WorkEnv)
|
|
p.WorkIp = util.FilterEmptyEle(p.WorkIp)
|
|
return nil
|
|
}
|
|
|
|
type GetJobReqParams struct {
|
|
JobID uint `json:"jobID" rule:"required,请填写jobID"`
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
}
|
|
|
|
func (p *GetJobReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type UserReqParams struct {
|
|
Username string `json:"username" rule:"required,请输入用户名"`
|
|
Passwd string `json:"passwd,omitempty" rule:"required,请输入密码"`
|
|
GroupID uint `json:"groupID"`
|
|
GroupName string `json:"groupName"`
|
|
Avatar string `json:"avatar"`
|
|
Root bool `json:"root"`
|
|
Mail string `json:"mail"`
|
|
}
|
|
|
|
func (p *UserReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type InitAppReqParams struct {
|
|
Username string `json:"username" rule:"required,请输入用户名"`
|
|
Passwd string `json:"passwd" rule:"required,请输入密码"`
|
|
Avatar string `json:"avatar"`
|
|
Mail string `json:"mail"`
|
|
}
|
|
|
|
func (p *InitAppReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type EditUserReqParams struct {
|
|
UserID uint `json:"userID" rule:"required,缺少userID"`
|
|
Username string `json:"username"`
|
|
Passwd string `json:"passwd"`
|
|
OldPwd string `json:"oldpwd"`
|
|
Avatar string `json:"avatar"`
|
|
Mail string `json:"mail"`
|
|
}
|
|
|
|
func (p *EditUserReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type DeleteUserReqParams struct {
|
|
UserID uint `json:"userID" rule:"required,缺少userID"`
|
|
}
|
|
|
|
func (p *DeleteUserReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type LoginReqParams struct {
|
|
Username string `json:"username" rule:"required,请输入用户名"`
|
|
Passwd string `json:"passwd" rule:"required,请输入密码"`
|
|
Remember bool `json:"remember"`
|
|
IsLdap bool `json:"is_ldap"`
|
|
}
|
|
|
|
func (p *LoginReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type PageReqParams struct {
|
|
Page int `json:"page"`
|
|
Pagesize int `json:"pagesize"`
|
|
}
|
|
|
|
type GetNodeListReqParams struct {
|
|
PageReqParams
|
|
SearchTxt string `json:"searchTxt"`
|
|
QueryGroupID uint `json:"queryGroupID"`
|
|
QueryStatus uint `json:"queryStatus"`
|
|
}
|
|
|
|
func (p *GetNodeListReqParams) Verify(ctx *myctx) error {
|
|
|
|
if p.Page == 0 {
|
|
p.Page = 1
|
|
}
|
|
if p.Pagesize <= 0 {
|
|
p.Pagesize = 50
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type EditGroupReqParams struct {
|
|
GroupID uint `json:"groupID" rule:"required,请填写groupID"`
|
|
GroupName string `json:"groupName" rule:"required,请填写groupName"`
|
|
}
|
|
|
|
func (p *EditGroupReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type SetGroupReqParams struct {
|
|
TargetGroupID uint `json:"targetGroupID"`
|
|
TargetGroupName string `json:"targetGroupName"`
|
|
UserID uint `json:"userID" rule:"required,请填写用户ID"`
|
|
Root bool `json:"root"`
|
|
}
|
|
|
|
func (p *SetGroupReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type ReadMoreReqParams struct {
|
|
LastID int `json:"lastID"`
|
|
Pagesize int `json:"pagesize"`
|
|
Keywords string `json:"keywords"`
|
|
Orderby string `json:"orderby"`
|
|
}
|
|
|
|
func (p *ReadMoreReqParams) Verify(ctx *myctx) error {
|
|
if p.Pagesize == 0 {
|
|
p.Pagesize = 50
|
|
}
|
|
|
|
if p.Orderby == "" {
|
|
p.Orderby = "desc"
|
|
}
|
|
|
|
p.Keywords = strings.TrimSpace(p.Keywords)
|
|
return nil
|
|
}
|
|
|
|
type GroupNodeReqParams struct {
|
|
Addr string `json:"addr" rule:"required,请填写addr"`
|
|
TargetNodeName string `json:"targetNodeName"`
|
|
TargetGroupName string `json:"targetGroupName"`
|
|
TargetGroupID uint `json:"targetGroupID"`
|
|
}
|
|
|
|
func (p *GroupNodeReqParams) Verify(ctx *myctx) error {
|
|
return nil
|
|
}
|
|
|
|
type AuditJobReqParams struct {
|
|
JobsReqParams
|
|
JobType string `json:"jobType"`
|
|
}
|
|
|
|
func (p *AuditJobReqParams) Verify(ctx *myctx) error {
|
|
|
|
if p.Addr == "" {
|
|
return paramsError
|
|
}
|
|
|
|
jobTypeMap := map[string]bool{
|
|
"crontab": true,
|
|
"daemon": true,
|
|
}
|
|
|
|
if err := p.JobsReqParams.Verify(nil); err != nil {
|
|
return err
|
|
}
|
|
|
|
if !jobTypeMap[p.JobType] {
|
|
return paramsError
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type GetUsersParams struct {
|
|
PageReqParams
|
|
SearchTxt string `json:"searchTxt"`
|
|
IsAll bool `json:"isAll"`
|
|
QueryGroupID uint `json:"queryGroupID"`
|
|
}
|
|
|
|
func (p *GetUsersParams) Verify(ctx *myctx) error {
|
|
|
|
if p.Page <= 1 {
|
|
p.Page = 1
|
|
}
|
|
|
|
if p.Pagesize <= 0 {
|
|
p.Pagesize = 50
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type CleanLogParams struct {
|
|
IsEvent bool `json:"isEvent"`
|
|
Unit string `json:"unit" rule:"required,请填写时间单位"`
|
|
Offset int `json:"offset"`
|
|
}
|
|
|
|
func (c *CleanLogParams) Verify(ctx *myctx) error {
|
|
if c.Unit != "day" && c.Unit != "month" {
|
|
return errors.New("不支持的时间单位")
|
|
}
|
|
return nil
|
|
}
|