3588AdminBackend/internal/models/task.go
2026-01-10 21:30:28 +08:00

50 lines
1.2 KiB
Go

package models
import (
"sync"
)
type TaskStatus string
const (
TaskPending TaskStatus = "pending"
TaskRunning TaskStatus = "running"
TaskSuccess TaskStatus = "success"
TaskFailed TaskStatus = "failed"
)
type DeviceTaskStatus struct {
DeviceID string `json:"device_id"`
Status TaskStatus `json:"status"`
Progress float64 `json:"progress"`
Error string `json:"error"`
}
type Task struct {
ID string `json:"task_id"`
Type string `json:"type"`
DeviceIDs []string `json:"device_ids"`
Payload interface{} `json:"payload"`
Status TaskStatus `json:"status"`
Devices map[string]*DeviceTaskStatus `json:"devices"`
Mu sync.RWMutex `json:"-"`
}
func NewTask(id, t string, deviceIDs []string, payload interface{}) *Task {
devices := make(map[string]*DeviceTaskStatus)
for _, did := range deviceIDs {
devices[did] = &DeviceTaskStatus{
DeviceID: did,
Status: TaskPending,
}
}
return &Task{
ID: id,
Type: t,
DeviceIDs: deviceIDs,
Payload: payload,
Status: TaskPending,
Devices: devices,
}
}