config.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package server
  2. import (
  3. "time"
  4. "github.com/imgproxy/imgproxy/v3/config"
  5. )
  6. const (
  7. // gracefulTimeout represents graceful shutdown timeout
  8. gracefulTimeout = time.Duration(5 * time.Second)
  9. )
  10. // Config represents HTTP server config
  11. type Config struct {
  12. Listen string // Address to listen on
  13. Network string // Network type (tcp, unix)
  14. Bind string // Bind address
  15. PathPrefix string // Path prefix for the server
  16. MaxClients int // Maximum number of concurrent clients
  17. ReadRequestTimeout time.Duration // Timeout for reading requests
  18. KeepAliveTimeout time.Duration // Timeout for keep-alive connections
  19. GracefulTimeout time.Duration // Timeout for graceful shutdown
  20. CORSAllowOrigin string // CORS allowed origin
  21. Secret string // Secret for authorization
  22. DevelopmentErrorsMode bool // Enable development mode for detailed error messages
  23. SocketReusePort bool // Enable SO_REUSEPORT socket option
  24. HealthCheckPath string // Health check path from config
  25. WriteResponseTimeout time.Duration
  26. }
  27. // NewConfigFromEnv creates a new Config instance from environment variables
  28. func NewConfigFromEnv() *Config {
  29. return &Config{
  30. Network: config.Network,
  31. Bind: config.Bind,
  32. PathPrefix: config.PathPrefix,
  33. MaxClients: config.MaxClients,
  34. ReadRequestTimeout: time.Duration(config.ReadRequestTimeout) * time.Second,
  35. KeepAliveTimeout: time.Duration(config.KeepAliveTimeout) * time.Second,
  36. GracefulTimeout: gracefulTimeout,
  37. CORSAllowOrigin: config.AllowOrigin,
  38. Secret: config.Secret,
  39. DevelopmentErrorsMode: config.DevelopmentErrorsMode,
  40. SocketReusePort: config.SoReuseport,
  41. HealthCheckPath: config.HealthCheckPath,
  42. WriteResponseTimeout: time.Duration(config.WriteResponseTimeout) * time.Second,
  43. }
  44. }