1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package datadog
- import (
- "errors"
- "time"
- "github.com/imgproxy/imgproxy/v3/ensure"
- "github.com/imgproxy/imgproxy/v3/env"
- )
- var (
- IMGPROXY_DATADOG_ENABLE = env.Describe("IMGPROXY_DATADOG_ENABLE", "boolean")
- IMGPROXY_DATADOG_ENABLE_ADDITIONAL_METRICS = env.Describe("IMGPROXY_DATADOG_ENABLE_ADDITIONAL_METRICS", "boolean")
- DD_SERVICE = env.Describe("DD_SERVICE", "string")
- DD_TRACE_STARTUP_LOGS = env.Describe("DD_TRACE_STARTUP_LOGS", "boolean")
- DD_AGENT_HOST = env.Describe("DD_AGENT_HOST", "host")
- DD_TRACE_AGENT_PORT = env.Describe("DD_TRACE_AGENT_PORT", "port")
- DD_DOGSTATSD_PORT = env.Describe("DD_DOGSTATSD_PORT", "port")
- )
- // Config holds the configuration for DataDog monitoring
- type Config struct {
- Enable bool // Enable DataDog tracing
- EnableMetrics bool // Enable DataDog metrics collection
- Service string // DataDog service name
- TraceStartupLogs bool // Enable trace startup logs
- AgentHost string // DataDog agent host
- TracePort int // DataDog tracer port
- StatsDPort int // DataDog StatsD port
- MetricsInterval time.Duration // Interval for sending metrics to DataDog
- }
- // NewDefaultConfig returns a new default configuration for DataDog monitoring
- func NewDefaultConfig() Config {
- return Config{
- Enable: false,
- EnableMetrics: false,
- Service: "imgproxy",
- TraceStartupLogs: false,
- AgentHost: "localhost",
- TracePort: 8126,
- StatsDPort: 8125,
- MetricsInterval: 10 * time.Second,
- }
- }
- // LoadConfigFromEnv loads configuration from environment variables
- func LoadConfigFromEnv(c *Config) (*Config, error) {
- c = ensure.Ensure(c, NewDefaultConfig)
- err := errors.Join(
- env.Bool(&c.Enable, IMGPROXY_DATADOG_ENABLE),
- env.Bool(&c.EnableMetrics, IMGPROXY_DATADOG_ENABLE_ADDITIONAL_METRICS),
- env.String(&c.Service, DD_SERVICE),
- env.Bool(&c.TraceStartupLogs, DD_TRACE_STARTUP_LOGS),
- env.String(&c.AgentHost, DD_AGENT_HOST),
- env.Int(&c.TracePort, DD_TRACE_AGENT_PORT),
- env.Int(&c.StatsDPort, DD_DOGSTATSD_PORT),
- )
- return c, err
- }
- // Enabled returns true if DataDog is enabled
- func (c *Config) Enabled() bool {
- return c.Enable
- }
- // Validate checks the configuration for errors
- func (c *Config) Validate() error {
- // If DataDog is not enabled, no need to validate further
- if !c.Enabled() {
- return nil
- }
- // Service name is required
- if len(c.Service) == 0 {
- return DD_SERVICE.ErrorEmpty()
- }
- if c.TracePort <= 0 || c.TracePort > 65535 {
- return DD_TRACE_AGENT_PORT.ErrorRange()
- }
- // StatsD port must be in the valid range
- if c.StatsDPort <= 0 || c.StatsDPort > 65535 {
- return DD_DOGSTATSD_PORT.ErrorRange()
- }
- return nil
- }
|