config.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package datadog
  2. import (
  3. "errors"
  4. "time"
  5. "github.com/imgproxy/imgproxy/v3/ensure"
  6. "github.com/imgproxy/imgproxy/v3/env"
  7. )
  8. var (
  9. IMGPROXY_DATADOG_ENABLE = env.Describe("IMGPROXY_DATADOG_ENABLE", "boolean")
  10. IMGPROXY_DATADOG_ENABLE_ADDITIONAL_METRICS = env.Describe("IMGPROXY_DATADOG_ENABLE_ADDITIONAL_METRICS", "boolean")
  11. DD_SERVICE = env.Describe("DD_SERVICE", "string")
  12. DD_TRACE_STARTUP_LOGS = env.Describe("DD_TRACE_STARTUP_LOGS", "boolean")
  13. DD_AGENT_HOST = env.Describe("DD_AGENT_HOST", "host")
  14. DD_TRACE_AGENT_PORT = env.Describe("DD_TRACE_AGENT_PORT", "port")
  15. DD_DOGSTATSD_PORT = env.Describe("DD_DOGSTATSD_PORT", "port")
  16. )
  17. // Config holds the configuration for DataDog monitoring
  18. type Config struct {
  19. Enable bool // Enable DataDog tracing
  20. EnableMetrics bool // Enable DataDog metrics collection
  21. Service string // DataDog service name
  22. TraceStartupLogs bool // Enable trace startup logs
  23. AgentHost string // DataDog agent host
  24. TracePort int // DataDog tracer port
  25. StatsDPort int // DataDog StatsD port
  26. MetricsInterval time.Duration // Interval for sending metrics to DataDog
  27. }
  28. // NewDefaultConfig returns a new default configuration for DataDog monitoring
  29. func NewDefaultConfig() Config {
  30. return Config{
  31. Enable: false,
  32. EnableMetrics: false,
  33. Service: "imgproxy",
  34. TraceStartupLogs: false,
  35. AgentHost: "localhost",
  36. TracePort: 8126,
  37. StatsDPort: 8125,
  38. MetricsInterval: 10 * time.Second,
  39. }
  40. }
  41. // LoadConfigFromEnv loads configuration from environment variables
  42. func LoadConfigFromEnv(c *Config) (*Config, error) {
  43. c = ensure.Ensure(c, NewDefaultConfig)
  44. err := errors.Join(
  45. env.Bool(&c.Enable, IMGPROXY_DATADOG_ENABLE),
  46. env.Bool(&c.EnableMetrics, IMGPROXY_DATADOG_ENABLE_ADDITIONAL_METRICS),
  47. env.String(&c.Service, DD_SERVICE),
  48. env.Bool(&c.TraceStartupLogs, DD_TRACE_STARTUP_LOGS),
  49. env.String(&c.AgentHost, DD_AGENT_HOST),
  50. env.Int(&c.TracePort, DD_TRACE_AGENT_PORT),
  51. env.Int(&c.StatsDPort, DD_DOGSTATSD_PORT),
  52. )
  53. return c, err
  54. }
  55. // Enabled returns true if DataDog is enabled
  56. func (c *Config) Enabled() bool {
  57. return c.Enable
  58. }
  59. // Validate checks the configuration for errors
  60. func (c *Config) Validate() error {
  61. // If DataDog is not enabled, no need to validate further
  62. if !c.Enabled() {
  63. return nil
  64. }
  65. // Service name is required
  66. if len(c.Service) == 0 {
  67. return DD_SERVICE.ErrorEmpty()
  68. }
  69. if c.TracePort <= 0 || c.TracePort > 65535 {
  70. return DD_TRACE_AGENT_PORT.ErrorRange()
  71. }
  72. // StatsD port must be in the valid range
  73. if c.StatsDPort <= 0 || c.StatsDPort > 65535 {
  74. return DD_DOGSTATSD_PORT.ErrorRange()
  75. }
  76. return nil
  77. }