项目合并为单仓库:设备端(根) + 管理端(control/)。 两端 git 历史完整保留(git subtree 合并)。 git-subtree-dir: control git-subtree-mainline:923ab10d5cgit-subtree-split:70738edb31
54 lines
1.5 KiB
Go
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"),
|
|
}
|
|
}
|