Files
jiacrontab/jiacrontab_admin/params.go
jiazhizhong 1279635d7f fix
2022-03-10 17:09:03 +08:00

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
}