tasks.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package tasks
  2. import (
  3. "fmt"
  4. "sync"
  5. "sync/atomic"
  6. "time"
  7. "networktool/internal/model"
  8. )
  9. type Service struct {
  10. counter uint64
  11. mu sync.RWMutex
  12. items map[string]model.TaskResult
  13. }
  14. func New() *Service {
  15. return &Service{items: make(map[string]model.TaskResult)}
  16. }
  17. func (s *Service) Create() model.TaskResult {
  18. id := fmt.Sprintf("task-%d-%04d", time.Now().Unix(), atomic.AddUint64(&s.counter, 1))
  19. item := model.TaskResult{TaskID: id, Status: "pending", Step: "validating", Detail: "任务已创建", Rollback: false}
  20. s.mu.Lock()
  21. s.items[id] = item
  22. s.mu.Unlock()
  23. return item
  24. }
  25. func (s *Service) Update(taskID string, status string, step string, detail string, rollback bool) {
  26. s.mu.Lock()
  27. defer s.mu.Unlock()
  28. item, ok := s.items[taskID]
  29. if !ok {
  30. return
  31. }
  32. item.Status = status
  33. item.Step = step
  34. item.Detail = detail
  35. item.Rollback = rollback
  36. s.items[taskID] = item
  37. }
  38. func (s *Service) Get(taskID string) (model.TaskResult, bool) {
  39. s.mu.RLock()
  40. defer s.mu.RUnlock()
  41. item, ok := s.items[taskID]
  42. return item, ok
  43. }