package processor import ( log "github.com/sirupsen/logrus" "parsing-service/internal/appState" "parsing-service/internal/shared" "sync" ) func (p *Processor) StartWork(receivedTasks []shared.TaskResponse) { log.Info("Starting work...") p.state.ResetCounters() in := make(chan shared.Task, p.numCPUs*10) wg := &sync.WaitGroup{} for i := 0; i < p.numCPUs*10; i++ { wg.Add(1) go func() { defer wg.Done() p.worker(in) }() } tasksNumber := len(receivedTasks) if tasksNumber > 0 { p.state.SetStatus(appState.StatusWorkInProgress) p.state.SetTasksReceived(tasksNumber) p.sortTasks(in, receivedTasks) } close(in) wg.Wait() log.Debug("All goroutines finished") p.state.SetLastCheck() p.state.SetStatus(appState.StatusIdle) log.Debugf("State | %+v", p.state) } func (p *Processor) sortTasks(in chan<- shared.Task, receivedTasks []shared.TaskResponse) { for _, task := range receivedTasks { switch { case task.OriginSurugayaLink != "": in <- shared.Task{ MerchUuid: task.MerchUuid, Origin: shared.OriginSurugaya, Link: task.OriginSurugayaLink, RetryCount: 3, } case task.OriginMandarakeLink != "": in <- shared.Task{ MerchUuid: task.MerchUuid, Origin: shared.OriginMandarake, Link: task.OriginMandarakeLink, RetryCount: 3, } } } }