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-02 20:35:53 +03:00
|
|
|
for _, task := range receivedTasks {
|
|
|
|
|
switch {
|
|
|
|
|
case task.OriginSurugayaLink != "":
|
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-02 20:35:53 +03:00
|
|
|
case task.OriginMandarakeLink != "":
|
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
|
|
|
}
|