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