From bcc6ea2d294796a505d3e7c7186b7ce39dfc29a2 Mon Sep 17 00:00:00 2001 From: nquidox Date: Wed, 8 Apr 2026 12:17:25 +0300 Subject: [PATCH 1/4] logs --- internal/scrapper/helper.go | 2 +- internal/tasks/handler.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/scrapper/helper.go b/internal/scrapper/helper.go index 2098b84..ca87064 100644 --- a/internal/scrapper/helper.go +++ b/internal/scrapper/helper.go @@ -22,7 +22,7 @@ func (s *Scrapper) setupBrowser(ctx context.Context) (string, error) { chromedp.Navigate("https://www.mandarake.co.jp/index2.html"), chromedp.WaitReady("body", chromedp.ByQuery), ); err != nil { - log.WithError(err).Error(pkgLogHeader + logGetPrice + "failed to get single price tag") + log.WithError(err).Error(pkgLogHeader + "failed to setup browser") return copyright, err } diff --git a/internal/tasks/handler.go b/internal/tasks/handler.go index d888027..df04628 100644 --- a/internal/tasks/handler.go +++ b/internal/tasks/handler.go @@ -47,6 +47,8 @@ func New(deps Deps) TaskTransport { } func (h *Handler) initConsumer(deps *Deps) error { + log.WithField("enabled", deps.LoggingEnabled).Debugf("%v rabbit mq logger", pkgLogHeader) + client, err := rabbit.NewClient(rabbit.Address{ Username: deps.Username, Password: deps.Password, From 6c820da7e8316d1c8a5ee7816ffc2cf1ccc1fbf0 Mon Sep 17 00:00:00 2001 From: nquidox Date: Wed, 8 Apr 2026 12:18:09 +0300 Subject: [PATCH 2/4] update --- go.mod | 2 +- go.sum | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 150c45b..e98348c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.1 require ( github.com/chromedp/chromedp v0.15.1 github.com/sirupsen/logrus v1.9.4 - repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.16 + repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.17 ) require ( diff --git a/go.sum b/go.sum index 373cedc..7cf0713 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -github.com/chromedp/cdproto v0.0.0-20260321001828-e3e3800016bc h1:wkN/LMi5vc60pBRWx6qpbk/aEvq3/ZVNpnMvsw8PVVU= -github.com/chromedp/cdproto v0.0.0-20260321001828-e3e3800016bc/go.mod h1:cbyjALe67vDvlvdiG9369P8w5U2w6IshwtyD2f2Tvag= github.com/chromedp/cdproto v0.0.0-20260328224638-b7b298a31867 h1:W7wqm9lwNALD2uUhNUh06NcZPeegWpzaMmy6zCtqYnc= github.com/chromedp/cdproto v0.0.0-20260328224638-b7b298a31867/go.mod h1:cbyjALe67vDvlvdiG9369P8w5U2w6IshwtyD2f2Tvag= github.com/chromedp/chromedp v0.15.1 h1:EJWiPm7BNqDqjYy6U0lTSL5wNH+iNt9GjC3a4gfjNyQ= @@ -37,5 +35,5 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.16 h1:bqoQZr4kblRyGQFjqBItakGm/p2PP0+68U12lLnuIYM= -repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.16/go.mod h1:8PREIIYfA3UPigQNF+Hx+778/twVxJzI8bI8fcpVXEo= +repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.17 h1:f+oJRW0t894F9TjqG4UJAHWLcg1RffoHe5olsmYoltQ= +repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.17/go.mod h1:8PREIIYfA3UPigQNF+Hx+778/twVxJzI8bI8fcpVXEo= From 7c45234c956c055a65ebbd939614e9ae76d54faf Mon Sep 17 00:00:00 2001 From: nquidox Date: Wed, 8 Apr 2026 12:30:02 +0300 Subject: [PATCH 3/4] update --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e98348c..ed8a617 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.1 require ( github.com/chromedp/chromedp v0.15.1 github.com/sirupsen/logrus v1.9.4 - repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.17 + repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.18 ) require ( diff --git a/go.sum b/go.sum index 7cf0713..c59c3b6 100644 --- a/go.sum +++ b/go.sum @@ -35,5 +35,5 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.17 h1:f+oJRW0t894F9TjqG4UJAHWLcg1RffoHe5olsmYoltQ= -repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.17/go.mod h1:8PREIIYfA3UPigQNF+Hx+778/twVxJzI8bI8fcpVXEo= +repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.18 h1:y2oQOoQApDXUdZc/9T5fA80pkq2O+0aw3AKbSNrY1aE= +repo.nqws.ru/merch-tracker-v2/mt-rabbit v0.1.18/go.mod h1:8PREIIYfA3UPigQNF+Hx+778/twVxJzI8bI8fcpVXEo= From 270cc77d312755367a1eac750c99dc4193ac49fe Mon Sep 17 00:00:00 2001 From: nquidox Date: Fri, 24 Apr 2026 12:57:00 +0300 Subject: [PATCH 4/4] metrics server added --- config/config.go | 17 +++++++++-- internal/app/handler.go | 23 +++++++++++++-- mandarake.env | 6 ++++ pkg/router/handler.go | 62 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 pkg/router/handler.go diff --git a/config/config.go b/config/config.go index 0825aa3..994bb61 100644 --- a/config/config.go +++ b/config/config.go @@ -3,8 +3,9 @@ package config import "runtime" type Config struct { - App AppConfig - Rabbit RabbitMQConfig + App AppConfig + Rabbit RabbitMQConfig + Metrics MetricsConfig } type AppConfig struct { @@ -27,6 +28,12 @@ type RabbitMQConfig struct { TaskResultQueue string } +type MetricsConfig struct { + Host string + Port string + GinMode string +} + func New() *Config { return &Config{ App: AppConfig{ @@ -48,5 +55,11 @@ func New() *Config { TaskSourceQueue: getEnv("TASK_SOURCE_QUEUE", "task-publisher-mandarake"), TaskResultQueue: getEnv("TASK_RESULT_QUEUE", "tasks-results"), }, + + Metrics: MetricsConfig{ + Host: getEnv("METRICS_HOST", "0.0.0.0"), + Port: getEnv("METRICS_PORT", "19080"), + GinMode: getEnv("METRICS_GIN_MODE", "dev"), + }, } } diff --git a/internal/app/handler.go b/internal/app/handler.go index b7b56f0..09dc91f 100644 --- a/internal/app/handler.go +++ b/internal/app/handler.go @@ -3,17 +3,20 @@ 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 + transport tasks.TaskTransport + scrapper scrapper.PriceScrapper + metricsSrv *router.Handler } func NewApp(cfg *config.Config) *App { @@ -37,6 +40,11 @@ func NewApp(cfg *config.Config) *App { 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 } @@ -52,6 +60,13 @@ func (app *App) Run(ctx context.Context) error { return err } + //start metrics server + go func() { + if err := app.metricsSrv.Run(); err != nil { + log.Fatal(err) + } + }() + <-ctx.Done() return app.Shutdown(ctx) } @@ -63,6 +78,10 @@ func (app *App) Shutdown(ctx context.Context) error { app.scrapper.Stop() + if err := app.metricsSrv.Shutdown(ctx); err != nil { + log.WithError(err).Error("Failed to shutdown server") + } + _ = ctx return nil } diff --git a/mandarake.env b/mandarake.env index 111c8f6..8fc5ae4 100644 --- a/mandarake.env +++ b/mandarake.env @@ -14,3 +14,9 @@ RABBIT_LOGGING_ENABLED=false TASK_SOURCE_QUEUE=task-publisher-mandarake TASK_RESULT_QUEUE=tasks-results + + +METRICS_HOST=0.0.0.0 +METRICS_PORT=19080 +METRICS_GIN_MODE=release + diff --git a/pkg/router/handler.go b/pkg/router/handler.go new file mode 100644 index 0000000..0f924cc --- /dev/null +++ b/pkg/router/handler.go @@ -0,0 +1,62 @@ +package router + +import ( + "context" + "errors" + "github.com/gin-gonic/gin" + log "github.com/sirupsen/logrus" + ginprometheus "github.com/zsais/go-gin-prometheus" + "net/http" +) + +type Handler struct { + srv *http.Server +} + +type Deps struct { + Addr string + GinMode string +} + +const pkgLogHeader string = "Router |" + +func NewHandler(deps Deps) *Handler { + engine := gin.New() + + if deps.GinMode == "release" { + gin.SetMode(gin.ReleaseMode) + err := engine.SetTrustedProxies([]string{"172.20.0.0/16"}) + if err != nil { + log.WithError(err).Errorf("%v Set proxies failed", pkgLogHeader) + return nil + } + } + + logGroup := engine.Group("") + logGroup.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"msg": "v2"}) }) + + p := ginprometheus.NewPrometheus("gin") + p.Use(engine) + + srv := http.Server{ + Addr: deps.Addr, + Handler: engine, + } + + return &Handler{ + srv: &srv, + } +} + +func (h *Handler) Run() error { + log.Infof("Starting server on %s", h.srv.Addr) + if err := h.srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { + log.WithError(err).Errorf("%v ListenAndServe failed", pkgLogHeader) + return err + } + return nil +} + +func (h *Handler) Shutdown(ctx context.Context) error { + return h.srv.Shutdown(ctx) +}