scrapper-mandarake/internal/app/handler.go
nquidox 270cc77d31
Some checks failed
/ Make image (push) Failing after 31s
metrics server added
2026-04-24 12:57:00 +03:00

87 lines
1.9 KiB
Go

package app
import (
"context"
log "github.com/sirupsen/logrus"
"net"
"scrapper-mandarake/config"
"scrapper-mandarake/internal/scrapper"
"scrapper-mandarake/internal/tasks"
"scrapper-mandarake/pkg/router"
"time"
)
const AppName string = "Mandarake parser"
type App struct {
transport tasks.TaskTransport
scrapper scrapper.PriceScrapper
metricsSrv *router.Handler
}
func NewApp(cfg *config.Config) *App {
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,
})
a.metricsSrv = router.NewHandler(router.Deps{
Addr: net.JoinHostPort(cfg.Metrics.Host, cfg.Metrics.Port),
GinMode: cfg.Metrics.GinMode,
})
log.Infof("%v: %v", AppName, cfg.App.Mode)
return &a
}
func (app *App) Run(ctx context.Context) error {
log.Info("App started")
getTasksChan := app.transport.GetTasks(ctx)
sendResultsChan := app.transport.SendResult(ctx)
if err := app.scrapper.Start(ctx, getTasksChan, sendResultsChan); err != nil {
log.Fatal(err)
return err
}
//start metrics server
go func() {
if err := app.metricsSrv.Run(); err != nil {
log.Fatal(err)
}
}()
<-ctx.Done()
return app.Shutdown(ctx)
}
func (app *App) Shutdown(ctx context.Context) error {
log.Info("App shutting down")
ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
app.scrapper.Stop()
if err := app.metricsSrv.Shutdown(ctx); err != nil {
log.WithError(err).Error("Failed to shutdown server")
}
_ = ctx
return nil
}