50 lines
1.2 KiB
Go
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,
|
|
}
|
|
}
|