Files
aiops/backend/model/automation.go
T
2026-07-09 14:16:56 +08:00

125 lines
5.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package model
import (
"time"
)
// CronJob 定时任务模型
type CronJob struct {
ID uint `gorm:"primarykey" json:"id"`
Name string `gorm:"size:128;not null" json:"name"`
Description string `gorm:"size:500" json:"description"`
CronExpr string `gorm:"size:64;not null" json:"cron_expr"`
Type string `gorm:"size:32;not null" json:"type"` // shell, python, command
Content string `gorm:"type:text" json:"content"`
ScriptID *uint `json:"script_id"`
TargetType string `gorm:"size:32;default:server" json:"target_type"` // server, group, tag
Targets string `gorm:"type:text" json:"targets"` // JSON
Timeout int `gorm:"default:300" json:"timeout"`
Enabled bool `gorm:"default:true" json:"enabled"`
LastRunAt *time.Time `json:"last_run_at"`
LastStatus string `gorm:"size:32" json:"last_status"`
RunCount int `gorm:"default:0" json:"run_count"`
SuccessCount int `gorm:"default:0" json:"success_count"`
FailCount int `gorm:"default:0" json:"fail_count"`
NotifyOn string `gorm:"size:32;default:failure" json:"notify_on"` // always, failure, success
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// 关联
Script *Script `json:"script,omitempty"`
}
// TableName 表名
func (CronJob) TableName() string {
return "ops_cron_jobs"
}
// Script 脚本库模型
type Script struct {
ID uint `gorm:"primarykey" json:"id"`
Name string `gorm:"size:128;not null" json:"name"`
Code string `gorm:"size:64;uniqueIndex;not null" json:"code"`
Description string `gorm:"size:500" json:"description"`
Type string `gorm:"size:32;default:shell" json:"type"` // shell, python
Content string `gorm:"type:text;not null" json:"content"`
Params string `gorm:"type:text" json:"params"` // JSON
Timeout int `gorm:"default:300" json:"timeout"`
Version int `gorm:"default:1" json:"version"`
RunCount int `gorm:"default:0" json:"run_count"`
CreatedBy uint `json:"created_by"`
UpdatedBy uint `json:"updated_by"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// TableName 表名
func (Script) TableName() string {
return "ops_scripts"
}
// TaskExecution 任务执行记录(cron / script,不含 Ansible;Ansible 走 AnsibleJob)
type TaskExecution struct {
ID uint `gorm:"primarykey" json:"id"`
TaskType string `gorm:"size:32;not null" json:"task_type"` // cron, script
TaskID uint `json:"task_id"`
TaskName string `gorm:"size:128" json:"task_name"`
Status string `gorm:"size:32;default:pending" json:"status"` // pending, running, success, failed, cancelled
TargetType string `gorm:"size:32" json:"target_type"`
Targets string `gorm:"type:text" json:"targets"`
Output string `gorm:"type:longtext" json:"output"`
Error string `gorm:"type:text" json:"error"`
Duration int `json:"duration"`
StartedAt *time.Time `json:"started_at"`
FinishedAt *time.Time `json:"finished_at"`
CreatedBy uint `json:"created_by"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// TableName 表名
func (TaskExecution) TableName() string {
return "ops_task_executions"
}
// CreateCronJobRequest 创建定时任务请求
type CreateCronJobRequest struct {
Name string `json:"name" binding:"required"`
Description string `json:"description"`
CronExpr string `json:"cron_expr" binding:"required"`
Type string `json:"type" binding:"required,oneof=shell python powershell command bash"`
Content string `json:"content"`
ScriptID *uint `json:"script_id"`
TargetType string `json:"target_type" binding:"omitempty,oneof=server group tag"`
Targets []uint `json:"targets"`
Timeout int `json:"timeout"`
NotifyOn string `json:"notify_on" binding:"omitempty,oneof=always failure success"`
}
// CreateScriptRequest 创建脚本请求
type CreateScriptRequest struct {
Name string `json:"name" binding:"required"`
Code string `json:"code"` // 为空时由 handler 自动生成 // Logan.Li
Description string `json:"description"`
Type string `json:"type" binding:"omitempty,oneof=shell python powershell command bash"`
Content string `json:"content" binding:"required"`
Params string `json:"params"`
Timeout int `json:"timeout"`
}
// ExecuteScriptRequest 执行脚本请求
type ExecuteScriptRequest struct {
TargetType string `json:"target_type" binding:"required,oneof=server group tag"`
Targets []uint `json:"targets" binding:"required"`
Params map[string]string `json:"params"`
}
// AutomationStats 自动化统计
type AutomationStats struct {
CronJobCount int64 `json:"cron_job_count"`
ScriptCount int64 `json:"script_count"`
PlaybookCount int64 `json:"playbook_count"`
TodayExecutions int64 `json:"today_executions"`
SuccessRate float64 `json:"success_rate"`
}