This commit is contained in:
parent
7c45234c95
commit
270cc77d31
4 changed files with 104 additions and 4 deletions
|
|
@ -3,8 +3,9 @@ package config
|
||||||
import "runtime"
|
import "runtime"
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
App AppConfig
|
App AppConfig
|
||||||
Rabbit RabbitMQConfig
|
Rabbit RabbitMQConfig
|
||||||
|
Metrics MetricsConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
type AppConfig struct {
|
type AppConfig struct {
|
||||||
|
|
@ -27,6 +28,12 @@ type RabbitMQConfig struct {
|
||||||
TaskResultQueue string
|
TaskResultQueue string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MetricsConfig struct {
|
||||||
|
Host string
|
||||||
|
Port string
|
||||||
|
GinMode string
|
||||||
|
}
|
||||||
|
|
||||||
func New() *Config {
|
func New() *Config {
|
||||||
return &Config{
|
return &Config{
|
||||||
App: AppConfig{
|
App: AppConfig{
|
||||||
|
|
@ -48,5 +55,11 @@ func New() *Config {
|
||||||
TaskSourceQueue: getEnv("TASK_SOURCE_QUEUE", "task-publisher-mandarake"),
|
TaskSourceQueue: getEnv("TASK_SOURCE_QUEUE", "task-publisher-mandarake"),
|
||||||
TaskResultQueue: getEnv("TASK_RESULT_QUEUE", "tasks-results"),
|
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"),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,17 +3,20 @@ package app
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
"net"
|
||||||
"scrapper-mandarake/config"
|
"scrapper-mandarake/config"
|
||||||
"scrapper-mandarake/internal/scrapper"
|
"scrapper-mandarake/internal/scrapper"
|
||||||
"scrapper-mandarake/internal/tasks"
|
"scrapper-mandarake/internal/tasks"
|
||||||
|
"scrapper-mandarake/pkg/router"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const AppName string = "Mandarake parser"
|
const AppName string = "Mandarake parser"
|
||||||
|
|
||||||
type App struct {
|
type App struct {
|
||||||
transport tasks.TaskTransport
|
transport tasks.TaskTransport
|
||||||
scrapper scrapper.PriceScrapper
|
scrapper scrapper.PriceScrapper
|
||||||
|
metricsSrv *router.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewApp(cfg *config.Config) *App {
|
func NewApp(cfg *config.Config) *App {
|
||||||
|
|
@ -37,6 +40,11 @@ func NewApp(cfg *config.Config) *App {
|
||||||
TaskTimeout: cfg.App.TaskTimeoutSeconds,
|
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)
|
log.Infof("%v: %v", AppName, cfg.App.Mode)
|
||||||
return &a
|
return &a
|
||||||
}
|
}
|
||||||
|
|
@ -52,6 +60,13 @@ func (app *App) Run(ctx context.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//start metrics server
|
||||||
|
go func() {
|
||||||
|
if err := app.metricsSrv.Run(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
return app.Shutdown(ctx)
|
return app.Shutdown(ctx)
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +78,10 @@ func (app *App) Shutdown(ctx context.Context) error {
|
||||||
|
|
||||||
app.scrapper.Stop()
|
app.scrapper.Stop()
|
||||||
|
|
||||||
|
if err := app.metricsSrv.Shutdown(ctx); err != nil {
|
||||||
|
log.WithError(err).Error("Failed to shutdown server")
|
||||||
|
}
|
||||||
|
|
||||||
_ = ctx
|
_ = ctx
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,3 +14,9 @@ RABBIT_LOGGING_ENABLED=false
|
||||||
|
|
||||||
TASK_SOURCE_QUEUE=task-publisher-mandarake
|
TASK_SOURCE_QUEUE=task-publisher-mandarake
|
||||||
TASK_RESULT_QUEUE=tasks-results
|
TASK_RESULT_QUEUE=tasks-results
|
||||||
|
|
||||||
|
|
||||||
|
METRICS_HOST=0.0.0.0
|
||||||
|
METRICS_PORT=19080
|
||||||
|
METRICS_GIN_MODE=release
|
||||||
|
|
||||||
|
|
|
||||||
62
pkg/router/handler.go
Normal file
62
pkg/router/handler.go
Normal file
|
|
@ -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)
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue