feat(service): add task defaults, job status, and cluster helpers

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
dailz
2026-04-20 10:38:41 +08:00
parent f894e870ed
commit 166ca3092c
3 changed files with 151 additions and 9 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"strconv"
"strings"
"time"
"gcy_hpc_server/internal/model"
@@ -49,6 +50,73 @@ func (s *JobService) SubmitJob(ctx context.Context, req *model.SubmitJobRequest)
"HOME=/root",
}
if req.MemoryPerNode != nil {
jobDesc.MemoryPerNode = &slurm.Uint64NoVal{Number: req.MemoryPerNode}
}
if req.MemoryPerCpu != nil {
jobDesc.MemoryPerCpu = &slurm.Uint64NoVal{Number: req.MemoryPerCpu}
}
if req.Nodes != nil {
jobDesc.Nodes = req.Nodes
}
if req.Tasks != nil {
jobDesc.Tasks = req.Tasks
}
if req.CpusPerTask != nil {
jobDesc.CpusPerTask = req.CpusPerTask
}
if req.Constraints != nil {
jobDesc.Constraints = req.Constraints
}
if req.Reservation != nil {
jobDesc.Reservation = req.Reservation
}
if req.Account != nil {
jobDesc.Account = req.Account
}
if req.Nice != nil {
jobDesc.Nice = req.Nice
}
if req.MailType != nil {
jobDesc.MailType = strings.Split(*req.MailType, ",")
}
if req.MailUser != nil {
jobDesc.MailUser = req.MailUser
}
if req.StandardOutput != nil {
jobDesc.StandardOutput = req.StandardOutput
}
if req.StandardError != nil {
jobDesc.StandardError = req.StandardError
}
if req.StandardInput != nil {
jobDesc.StandardInput = req.StandardInput
}
if req.RequiredNodes != nil {
jobDesc.RequiredNodes = strings.Split(*req.RequiredNodes, ",")
}
if req.ExcludedNodes != nil {
jobDesc.ExcludedNodes = strings.Split(*req.ExcludedNodes, ",")
}
if req.BeginTime != nil {
jobDesc.BeginTime = &slurm.Uint64NoVal{Number: req.BeginTime}
}
if req.Deadline != nil {
jobDesc.Deadline = req.Deadline
}
if req.Array != nil {
jobDesc.Array = req.Array
}
if req.Dependency != nil {
jobDesc.Dependency = req.Dependency
}
if req.Requeue != nil {
jobDesc.Requeue = req.Requeue
}
if req.KillOnNodeFail != nil {
jobDesc.KillOnNodeFail = req.KillOnNodeFail
}
submitReq := &slurm.JobSubmitReq{
Script: &script,
Job: jobDesc,