1
1
package database
2
2
3
3
import (
4
+ "database/sql"
4
5
"fmt"
5
6
"strconv"
6
7
"time"
7
8
8
9
"github.com/DATA-DOG/go-txdb"
10
+ mysqldriver "github.com/go-sql-driver/mysql"
11
+ sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
9
12
gormtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/gorm.io/gorm.v1"
10
13
"gorm.io/driver/mysql"
11
14
"gorm.io/gorm"
@@ -15,24 +18,7 @@ const testEnv = "test"
15
18
16
19
// NewConnection returns a new instrumented Gorm database connection.
17
20
func NewConnection (config * Config , environment , appName string ) (* gorm.DB , error ) {
18
- serviceName := fmt .Sprintf ("%s-mysql" , appName )
19
- dialector := getDialectorFromConfig (config , environment )
20
-
21
- db , err := gormtrace .Open (dialector , nil , gormtrace .WithServiceName (serviceName ))
22
- if err != nil {
23
- return nil , err
24
- }
25
-
26
- if err := databasePoolSettings (db , config ); err != nil {
27
- return nil , err
28
- }
29
-
30
- return db , nil
31
- }
32
-
33
- func getDialectorFromConfig (config * Config , environment string ) gorm.Dialector {
34
21
connectionDetails := NewConnectionDetails (config )
35
-
36
22
connectionString := connectionDetails .String ()
37
23
driverName := connectionDetails .Dialect
38
24
@@ -47,22 +33,28 @@ func getDialectorFromConfig(config *Config, environment string) gorm.Dialector {
47
33
connectionString = testDriverName
48
34
}
49
35
50
- return mysql .New (mysql.Config {
51
- DSN : connectionString ,
52
- DriverName : driverName ,
53
- })
54
- }
36
+ serviceName := fmt .Sprintf ("%s-mysql" , appName )
55
37
56
- func databasePoolSettings ( gormDB * gorm. DB , config * Config ) error {
57
- db , err := gormDB . DB ( )
38
+ sqltrace . Register ( driverName , & mysqldriver. MySQLDriver {}, sqltrace . WithServiceName ( serviceName ))
39
+ sqlDB , err := sqltrace . Open ( driverName , connectionString )
58
40
if err != nil {
59
- return err
41
+ return nil , err
60
42
}
61
43
44
+ databasePoolSettings (sqlDB , config )
45
+
46
+ dialector := mysql .New (mysql.Config {Conn : sqlDB })
47
+ db , err := gormtrace .Open (dialector , nil , gormtrace .WithServiceName (serviceName ))
48
+ if err != nil {
49
+ return nil , err
50
+ }
51
+
52
+ return db , nil
53
+ }
54
+
55
+ func databasePoolSettings (db * sql.DB , config * Config ) {
62
56
db .SetMaxIdleConns (config .Pool )
63
57
db .SetMaxOpenConns (config .MaxOpenConnections )
64
58
db .SetConnMaxIdleTime (config .ConnectionMaxIdleTime )
65
59
db .SetConnMaxLifetime (config .ConnectionMaxLifetime )
66
-
67
- return nil
68
60
}
0 commit comments