safesight/control/internal/models/task.go
tian 98e375dc36 chore: 合并 safesight-control 仓库为 control/ 子目录
项目合并为单仓库:设备端(根) + 管理端(control/)。
两端 git 历史完整保留(git subtree 合并)。

git-subtree-dir: control
git-subtree-mainline: 923ab10d5c
git-subtree-split: 70738edb31
2026-08-02 11:13:26 +08:00

54 lines
1.5 KiB
Go

package models
import (
"sync"
"time"
)
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"`
CreatedAt string `json:"created_at"`
CompletedAt string `json:"completed_at"`
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,
CreatedAt: time.Now().Format("2006-01-02 15:04:05"),
}
}