diff --git a/cmd/run.go b/cmd/run.go index 42281b4..e23ce72 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -54,6 +54,8 @@ func NewRun() *cobra.Command { runCmd.Flags().IntVarP(&config.Server.Port, "server-port", "p", 8080, "Server port") duration.DurationVar(runCmd.Flags(), &config.Server.GracefulShutdown, "server-graceful-shutdown", 15*time.Second, "Server graceful shutdown timeout") runCmd.Flags().BoolVar(&config.Server.EnablePprof, "server-enable-pprof", false, "Enable Pprof Profiling") + duration.DurationVar(runCmd.Flags(), &config.Server.ReadTimeout, "server-read-timeout", 1*time.Hour, "Server read timeout") + duration.DurationVar(runCmd.Flags(), &config.Server.WriteTimeout, "server-write-timeout", 1*time.Hour, "Server write timeout") runCmd.Flags().BoolVar(&config.CronJobs.Enable, "cronjobs-enable", true, "Run cron jobs") @@ -233,10 +235,15 @@ func initApp(lc fx.Lifecycle, cfg *config.Config, c *controller.Controller) *gin r.Use(gin.Recovery()) + skipPathRegexps := []*regexp.Regexp{ + regexp.MustCompile(`^/assets/.*`), + regexp.MustCompile(`^/images/.*`), + } + r.Use(ginzap.GinzapWithConfig(logging.DefaultLogger().Desugar(), &ginzap.Config{ - TimeFormat: time.RFC3339, - UTC: true, - SkipPaths: []string{"/favicon.ico", "/assets"}, + TimeFormat: time.RFC3339, + UTC: true, + SkipPathRegexps: skipPathRegexps, })) r.Use(middleware.Cors()) @@ -253,8 +260,12 @@ func initApp(lc fx.Lifecycle, cfg *config.Config, c *controller.Controller) *gin r = api.InitRouter(r, c, cfg) srv := &http.Server{ - Addr: fmt.Sprintf(":%d", cfg.Server.Port), - Handler: r, + Addr: fmt.Sprintf(":%d", cfg.Server.Port), + Handler: r, + ReadTimeout: cfg.Server.ReadTimeout, + WriteTimeout: cfg.Server.WriteTimeout, + ReadHeaderTimeout: 10 * time.Second, + IdleTimeout: 60 * time.Second, } lc.Append(fx.Hook{ OnStart: func(ctx context.Context) error { diff --git a/config.sample.toml b/config.sample.toml index 8469773..c948feb 100644 --- a/config.sample.toml +++ b/config.sample.toml @@ -23,6 +23,8 @@ [server] graceful-shutdown = "15s" port = 8080 + read-timeout = "1h" + write-timeout = "1h" [tg] app-hash = "" @@ -47,5 +49,5 @@ threads = 8 [tg.stream] multi-threads = 0 - buffers = 16 + buffers = 8 diff --git a/internal/config/config.go b/internal/config/config.go index 177467a..3e5cb78 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -17,6 +17,8 @@ type ServerConfig struct { Port int GracefulShutdown time.Duration EnablePprof bool + ReadTimeout time.Duration + WriteTimeout time.Duration } type CronJobConfig struct {