1// Unless explicitly stated otherwise all files in this repository are licensed 2// under the Apache License Version 2.0. 3// This product includes software developed at Datadog (https://www.datadoghq.com/). 4// Copyright 2016 Datadog, Inc. 5 6package sql 7 8import ( 9 "math" 10 11 "gopkg.in/DataDog/dd-trace-go.v1/internal" 12) 13 14type config struct { 15 serviceName string 16 analyticsRate float64 17 dsn string 18} 19 20// Option represents an option that can be passed to Register, Open or OpenDB. 21type Option func(*config) 22 23type registerConfig = config 24 25// RegisterOption has been deprecated in favor of Option. 26type RegisterOption = Option 27 28func defaults(cfg *config) { 29 // default cfg.serviceName set in Register based on driver name 30 // cfg.analyticsRate = globalconfig.AnalyticsRate() 31 if internal.BoolEnv("DD_TRACE_SQL_ANALYTICS_ENABLED", false) { 32 cfg.analyticsRate = 1.0 33 } else { 34 cfg.analyticsRate = math.NaN() 35 } 36} 37 38// WithServiceName sets the given service name when registering a driver, 39// or opening a database connection. 40func WithServiceName(name string) Option { 41 return func(cfg *config) { 42 cfg.serviceName = name 43 } 44} 45 46// WithAnalytics enables Trace Analytics for all started spans. 47func WithAnalytics(on bool) Option { 48 return func(cfg *config) { 49 if on { 50 cfg.analyticsRate = 1.0 51 } else { 52 cfg.analyticsRate = math.NaN() 53 } 54 } 55} 56 57// WithAnalyticsRate sets the sampling rate for Trace Analytics events 58// correlated to started spans. 59func WithAnalyticsRate(rate float64) Option { 60 return func(cfg *config) { 61 if rate >= 0.0 && rate <= 1.0 { 62 cfg.analyticsRate = rate 63 } else { 64 cfg.analyticsRate = math.NaN() 65 } 66 } 67} 68 69// WithDSN allows the data source name (DSN) to be provided when 70// using OpenDB and a driver.Connector. 71// The value is used to automatically set tags on spans. 72func WithDSN(name string) Option { 73 return func(cfg *config) { 74 cfg.dsn = name 75 } 76} 77