scrapper-mandarake/internal/app/handler.go

69 lines
1.5 KiB
Go
Raw Permalink Normal View History

2026-04-03 13:02:10 +03:00
package app
import (
"context"
log "github.com/sirupsen/logrus"
2026-04-03 20:54:30 +03:00
"scrapper-mandarake/config"
"scrapper-mandarake/internal/scrapper"
"scrapper-mandarake/internal/tasks"
2026-04-03 13:02:10 +03:00
"time"
)
const AppName string = "Mandarake parser"
type App struct {
2026-04-03 20:54:30 +03:00
transport tasks.TaskTransport
scrapper scrapper.PriceScrapper
2026-04-03 13:02:10 +03:00
}
func NewApp(cfg *config.Config) *App {
2026-04-03 20:54:30 +03:00
a := App{}
a.transport = tasks.New(tasks.Deps{
Username: cfg.Rabbit.User,
Password: cfg.Rabbit.Pass,
Host: cfg.Rabbit.Host,
Port: cfg.Rabbit.Port,
Vhost: cfg.Rabbit.Vhost,
TaskSourceQueue: cfg.Rabbit.TaskSourceQueue,
TaskResultQueue: cfg.Rabbit.TaskResultQueue,
LoggingEnabled: cfg.Rabbit.LoggingEnabled,
ChanLen: cfg.App.ChanLen,
})
a.scrapper = scrapper.New(scrapper.Deps{
ExternalBrowser: cfg.App.ExternalBrowser,
GoroutinesNumber: cfg.App.NumCPUs,
TaskTimeout: cfg.App.TaskTimeoutSeconds,
})
2026-04-03 13:02:10 +03:00
2026-04-03 20:54:30 +03:00
log.Infof("%v: %v", AppName, cfg.App.Mode)
2026-04-03 13:02:10 +03:00
return &a
}
func (app *App) Run(ctx context.Context) error {
log.Info("App started")
2026-04-03 20:54:30 +03:00
getTasksChan := app.transport.GetTasks(ctx)
sendResultsChan := app.transport.SendResult(ctx)
if err := app.scrapper.Start(ctx, getTasksChan, sendResultsChan); err != nil {
log.Fatal(err)
2026-04-03 13:02:10 +03:00
return err
}
2026-04-03 20:54:30 +03:00
<-ctx.Done()
return app.Shutdown(ctx)
2026-04-03 13:02:10 +03:00
}
func (app *App) Shutdown(ctx context.Context) error {
log.Info("App shutting down")
ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
2026-04-03 20:54:30 +03:00
app.scrapper.Stop()
2026-04-03 13:02:10 +03:00
_ = ctx
return nil
}