task-processor/internal/processor/service.go

73 lines
1.8 KiB
Go
Raw Normal View History

2025-10-02 20:35:53 +03:00
package processor
import (
log "github.com/sirupsen/logrus"
"sync"
2025-10-03 19:17:01 +03:00
"task-processor/internal/appState"
"task-processor/internal/shared"
2025-10-02 20:35:53 +03:00
)
func (p *Processor) StartWork(receivedTasks []shared.TaskResponse) {
log.Info("Starting work...")
p.state.ResetCounters()
2025-10-03 19:17:01 +03:00
if len(receivedTasks) == 0 {
p.state.SetStatus(appState.StatusIdle)
return
}
p.state.SetStatus(appState.StatusWorkInProgress)
p.state.SetTasksReceived(len(receivedTasks))
2025-10-02 20:35:53 +03:00
2025-10-03 19:17:01 +03:00
sorted := p.sortTasks(receivedTasks)
var wg sync.WaitGroup
for origin, tasks := range sorted {
2025-10-02 20:35:53 +03:00
wg.Add(1)
2025-10-03 19:17:01 +03:00
go func(origin string, tasks []shared.Task) {
2025-10-02 20:35:53 +03:00
defer wg.Done()
2025-10-03 19:17:01 +03:00
p.handlers[origin].HandleTasks(tasks, p.out, p.state)
}(origin, tasks)
2025-10-02 20:35:53 +03:00
}
wg.Wait()
log.Debug("All goroutines finished")
p.state.SetLastCheck()
p.state.SetStatus(appState.StatusIdle)
log.Debugf("State | %+v", p.state)
}
2025-10-03 19:17:01 +03:00
func (p *Processor) sortTasks(receivedTasks []shared.TaskResponse) map[string][]shared.Task {
sorted := make(map[string][]shared.Task, len(receivedTasks))
2025-10-06 23:13:45 +03:00
log.WithField("count", len(receivedTasks)).Debug("Sorting tasks")
2025-10-02 20:35:53 +03:00
for _, task := range receivedTasks {
2025-10-06 23:13:45 +03:00
if task.OriginSurugayaLink != "" {
log.WithFields(log.Fields{
"origin": shared.OriginSurugaya,
"uuid": task.MerchUuid,
}).Debug("Task")
2025-10-03 19:17:01 +03:00
sorted[shared.OriginSurugaya] = append(sorted[shared.OriginSurugaya], shared.Task{
MerchUuid: task.MerchUuid,
Origin: shared.OriginSurugaya,
Link: task.OriginSurugayaLink,
})
2025-10-06 23:13:45 +03:00
}
if task.OriginMandarakeLink != "" {
log.WithFields(log.Fields{
"origin": shared.OriginMandarake,
"uuid": task.MerchUuid,
}).Debug("Task")
2025-10-03 19:17:01 +03:00
sorted[shared.OriginMandarake] = append(sorted[shared.OriginMandarake], shared.Task{
2025-10-02 20:35:53 +03:00
MerchUuid: task.MerchUuid,
Origin: shared.OriginMandarake,
Link: task.OriginMandarakeLink,
RetryCount: 3,
2025-10-03 19:17:01 +03:00
})
2025-10-02 20:35:53 +03:00
}
}
2025-10-03 19:17:01 +03:00
return sorted
2025-10-02 20:35:53 +03:00
}