package model import ( "encoding/json" "time" "gorm.io/gorm" ) // 任务状态常量 const ( TaskStatusSubmitted = "submitted" TaskStatusPreparing = "preparing" TaskStatusDownloading = "downloading" TaskStatusReady = "ready" TaskStatusQueued = "queued" TaskStatusRunning = "running" TaskStatusCompleted = "completed" TaskStatusFailed = "failed" ) // 任务步骤常量,用于步骤级重试追踪 const ( TaskStepPreparing = "preparing" TaskStepDownloading = "downloading" TaskStepSubmitting = "submitting" ) // Task 表示通过应用框架提交的 HPC 任务记录。 type Task struct { ID int64 `gorm:"primaryKey;autoIncrement" json:"id"` // 主键 TaskName string `gorm:"size:255" json:"task_name"` // 任务名称 AppID int64 `json:"app_id"` // 所属应用ID AppName string `gorm:"size:255" json:"app_name"` // 应用名称 Status string `json:"status"` // 任务状态 CurrentStep string `json:"current_step"` // 当前执行步骤 RetryCount int `json:"retry_count"` // 重试次数 Values json.RawMessage `gorm:"type:text" json:"values,omitempty"` // 业务参数JSON InputFileIDs json.RawMessage `json:"input_file_ids" gorm:"column:input_file_ids;type:text"` // 输入文件ID列表JSON Script string `json:"script,omitempty"` // 渲染后的脚本内容 SlurmJobID *int32 `json:"slurm_job_id,omitempty"` // Slurm作业ID WorkDir string `json:"work_dir,omitempty"` // 工作目录 Partition string `json:"partition,omitempty"` // 提交到的分区(空字符串表示未设置) ErrorMessage string `json:"error_message,omitempty"` // 错误信息 UserID string `json:"user_id"` // 提交用户ID SubmittedAt time.Time `json:"submitted_at"` // 提交时间 StartedAt *time.Time `json:"started_at,omitempty"` // 开始运行时间 FinishedAt *time.Time `json:"finished_at,omitempty"` // 完成时间 CreatedAt time.Time `json:"created_at"` // 创建时间 UpdatedAt time.Time `json:"updated_at"` // 更新时间 DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at,omitempty"` // 软删除时间 Cpus *int32 // 请求的CPU核数 MemoryPerNode *int64 // 每节点内存(MB) MemoryPerCpu *int64 // 每CPU内存(MB) TimeLimit *int32 // 运行时间限制(分钟) QOS *string // 服务质量策略 JobName *string // 作业名称 Nodes *string // 请求的节点数(支持范围如"2-4") Tasks *int32 // 任务数 CpusPerTask *int32 // 每任务CPU核数 Constraints *string // 节点特性约束 Reservation *string // 预约名称 Account *string // 计费账户 Nice *int32 // nice调整值 MailType *string // 邮件通知类型(逗号分隔) MailUser *string // 邮件地址 StandardOutput *string // 标准输出路径 StandardError *string // 标准错误路径 StandardInput *string // 标准输入路径 RequiredNodes *string // 指定运行的节点(逗号分隔) ExcludedNodes *string // 排除的节点(逗号分隔) BeginTime *int64 // 最早开始时间(Unix时间戳) Deadline *int64 // 截止时间(Unix时间戳) Array *string // 数组作业规格 Dependency *string // 作业依赖关系 Requeue *bool // 失败后是否重新排队 KillOnNodeFail *bool // 节点故障时是否终止作业 } func (Task) TableName() string { return "hpc_tasks" } // CreateTaskRequest 是创建任务的 API 请求。 type CreateTaskRequest struct { AppID int64 `json:"app_id" binding:"required"` // 所属应用ID(必填) TaskName string `json:"task_name"` // 任务名称 Values map[string]string `json:"values"` // 脚本业务参数键值对 InputFileIDs []int64 `json:"file_ids"` // 输入文件ID列表 Partition *string `json:"partition,omitempty"` // 提交到的分区 Cpus *int32 `json:"cpus,omitempty"` // 请求的CPU核数 MemoryPerNode *int64 `json:"memory_per_node,omitempty"` // 每节点内存(MB) MemoryPerCpu *int64 `json:"memory_per_cpu,omitempty"` // 每CPU内存(MB) TimeLimit *int32 `json:"time_limit,omitempty"` // 运行时间限制(分钟) QOS *string `json:"qos,omitempty"` // 服务质量策略 JobName *string `json:"job_name,omitempty"` // 作业名称 Nodes *string `json:"nodes,omitempty"` // 请求的节点数(支持范围如"2-4") Tasks *int32 `json:"tasks,omitempty"` // 任务数 CpusPerTask *int32 `json:"cpus_per_task,omitempty"` // 每任务CPU核数 Constraints *string `json:"constraints,omitempty"` // 节点特性约束 Reservation *string `json:"reservation,omitempty"` // 预约名称 Account *string `json:"account,omitempty"` // 计费账户 Nice *int32 `json:"nice,omitempty"` // nice调整值 MailType *string `json:"mail_type,omitempty"` // 邮件通知类型(逗号分隔) MailUser *string `json:"mail_user,omitempty"` // 邮件地址 StandardOutput *string `json:"standard_output,omitempty"` // 标准输出路径 StandardError *string `json:"standard_error,omitempty"` // 标准错误路径 StandardInput *string `json:"standard_input,omitempty"` // 标准输入路径 RequiredNodes *string `json:"required_nodes,omitempty"` // 指定运行的节点(逗号分隔) ExcludedNodes *string `json:"excluded_nodes,omitempty"` // 排除的节点(逗号分隔) BeginTime *int64 `json:"begin_time,omitempty"` // 最早开始时间(Unix时间戳) Deadline *int64 `json:"deadline,omitempty"` // 截止时间(Unix时间戳) Array *string `json:"array,omitempty"` // 数组作业规格 Dependency *string `json:"dependency,omitempty"` // 作业依赖关系 Requeue *bool `json:"requeue,omitempty"` // 失败后是否重新排队 KillOnNodeFail *bool `json:"kill_on_node_fail,omitempty"` // 节点故障时是否终止作业 } // TaskResponse 是任务列表/详情 API 响应中的任务项。 type TaskResponse struct { ID int64 `json:"id"` // 主键 TaskName string `json:"task_name"` // 任务名称 AppID int64 `json:"app_id"` // 所属应用ID AppName string `json:"app_name"` // 应用名称 Status string `json:"status"` // 任务状态 CurrentStep string `json:"current_step"` // 当前执行步骤 RetryCount int `json:"retry_count"` // 重试次数 SlurmJobID *int32 `json:"slurm_job_id"` // Slurm作业ID WorkDir string `json:"work_dir"` // 工作目录 ErrorMessage string `json:"error_message"` // 错误信息 CreatedAt time.Time `json:"created_at"` // 创建时间 UpdatedAt time.Time `json:"updated_at"` // 更新时间 Partition string `json:"partition,omitempty"` // 提交到的分区 Cpus *int32 `json:"cpus,omitempty"` // 请求的CPU核数 MemoryPerNode *int64 `json:"memory_per_node,omitempty"` // 每节点内存(MB) MemoryPerCpu *int64 `json:"memory_per_cpu,omitempty"` // 每CPU内存(MB) TimeLimit *int32 `json:"time_limit,omitempty"` // 运行时间限制(分钟) QOS *string `json:"qos,omitempty"` // 服务质量策略 JobName *string `json:"job_name,omitempty"` // 作业名称 Nodes *string `json:"nodes,omitempty"` // 请求的节点数(支持范围如"2-4") Tasks *int32 `json:"tasks,omitempty"` // 任务数 CpusPerTask *int32 `json:"cpus_per_task,omitempty"` // 每任务CPU核数 Constraints *string `json:"constraints,omitempty"` // 节点特性约束 Reservation *string `json:"reservation,omitempty"` // 预约名称 Account *string `json:"account,omitempty"` // 计费账户 Nice *int32 `json:"nice,omitempty"` // nice调整值 MailType *string `json:"mail_type,omitempty"` // 邮件通知类型(逗号分隔) MailUser *string `json:"mail_user,omitempty"` // 邮件地址 StandardOutput *string `json:"standard_output,omitempty"` // 标准输出路径 StandardError *string `json:"standard_error,omitempty"` // 标准错误路径 StandardInput *string `json:"standard_input,omitempty"` // 标准输入路径 RequiredNodes *string `json:"required_nodes,omitempty"` // 指定运行的节点(逗号分隔) ExcludedNodes *string `json:"excluded_nodes,omitempty"` // 排除的节点(逗号分隔) BeginTime *int64 `json:"begin_time,omitempty"` // 最早开始时间(Unix时间戳) Deadline *int64 `json:"deadline,omitempty"` // 截止时间(Unix时间戳) Array *string `json:"array,omitempty"` // 数组作业规格 Dependency *string `json:"dependency,omitempty"` // 作业依赖关系 Requeue *bool `json:"requeue,omitempty"` // 失败后是否重新排队 KillOnNodeFail *bool `json:"kill_on_node_fail,omitempty"` // 节点故障时是否终止作业 } // TaskListResponse 是任务列表分页响应。 type TaskListResponse struct { Items []TaskResponse `json:"items"` // 任务列表 Total int64 `json:"total"` // 总数 } // TaskListQuery 是任务列表查询参数。 type TaskListQuery struct { Page int `form:"page" json:"page,omitempty"` // 页码 PageSize int `form:"page_size" json:"page_size,omitempty"` // 每页条数 Status string `form:"status" json:"status,omitempty"` // 按状态过滤 }