70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package parsers
|
|
|
|
import (
|
|
"context"
|
|
log "github.com/sirupsen/logrus"
|
|
"io"
|
|
"task-processor/internal/appState"
|
|
"task-processor/internal/shared"
|
|
sc "task-processor/proto/surugayaScrapper"
|
|
)
|
|
|
|
type SurugayaParser struct {
|
|
scrapper sc.SurugayaScrapperClient
|
|
ctx context.Context
|
|
}
|
|
|
|
func NewSurugayaParser(ctx context.Context, scrapper sc.SurugayaScrapperClient) *SurugayaParser {
|
|
log.Debug("Surugaya parser init")
|
|
return &SurugayaParser{
|
|
scrapper: scrapper,
|
|
ctx: ctx,
|
|
}
|
|
}
|
|
|
|
func (s *SurugayaParser) HandleTasks(task []shared.Task, sender chan shared.TaskResult, state *appState.State) {
|
|
log.WithField("count", len(task)).Debug("Handling Surugaya Tasks")
|
|
|
|
stream, err := s.scrapper.ProcessTasks(s.ctx)
|
|
if err != nil {
|
|
log.WithField("err", err).Error("Error creating stream")
|
|
return
|
|
}
|
|
|
|
for _, t := range task {
|
|
if err = stream.Send(&sc.Task{
|
|
MerchUuid: t.MerchUuid,
|
|
Link: t.Link,
|
|
}); err != nil {
|
|
log.WithField("err", err).Error("Error sending task")
|
|
return
|
|
}
|
|
}
|
|
|
|
if err = stream.CloseSend(); err != nil {
|
|
log.WithError(err).Warn("Failed to close send stream")
|
|
}
|
|
|
|
counter := 0
|
|
for {
|
|
result, err := stream.Recv()
|
|
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
|
|
if err != nil {
|
|
log.WithError(err).Error("Error receiving result")
|
|
return
|
|
}
|
|
|
|
sender <- shared.TaskResult{
|
|
MerchUuid: result.GetMerchUuid(),
|
|
Origin: shared.OriginSurugaya,
|
|
Price: result.GetPrice(),
|
|
}
|
|
counter++
|
|
}
|
|
|
|
log.WithField("count", counter).Debug("All Surugaya results received")
|
|
}
|