package tracing import "fmt" // Exporter is type of tracing target. type Exporter string const ( Stdout Exporter = "stdout" OTLPgRPC Exporter = "otlp_grpc" ) type Config struct { // Enabled is true, if tracing enabled. Enabled bool // Exporter is collector type. Exporter Exporter // Endpoint is collector endpoint for OTLP exporters. Endpoint string // Service is service name that will be used in tracing. // Mandatory. Service string // InstanceID is identity of service instance. // Optional. InstanceID string // Version is version of service instance. // Optional. Version string } func (c *Config) validate() error { if !c.Enabled { return nil } if c.Exporter != Stdout && c.Exporter != OTLPgRPC { return fmt.Errorf("tracing config error: unknown exporter '%s', valid values are %v", c.Exporter, []string{string(Stdout), string(OTLPgRPC)}) } if len(c.Service) == 0 { return fmt.Errorf("tracing config error: service name must be specified") } if c.Exporter == OTLPgRPC && len(c.Endpoint) == 0 { return fmt.Errorf("tracing config error: exporter '%s' requires endpoint", c.Exporter) } return nil } func (c *Config) hasChange(other *Config) bool { if !c.Enabled && !other.Enabled { return false } if c.Enabled != other.Enabled { return true } if c.Exporter == Stdout && other.Exporter == Stdout { return !c.serviceInfoEqual(other) } return c.Exporter != other.Exporter || c.Endpoint != other.Endpoint || !c.serviceInfoEqual(other) } func (c *Config) serviceInfoEqual(other *Config) bool { return c.Service == other.Service && c.InstanceID == other.InstanceID && c.Version == other.Version }