Skip to content

Commit 6670be7

Browse files
authored
Merge pull request #112 from scribd/laynax/SERF-3423/trace-driver
[SERF-3423] Adding MySQL driver instrumentation
2 parents 3aa40ed + fc38460 commit 6670be7

File tree

1 file changed

+19
-27
lines changed

1 file changed

+19
-27
lines changed

pkg/database/gorm.go

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package database
22

33
import (
4+
"database/sql"
45
"fmt"
56
"strconv"
67
"time"
78

89
"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"
912
gormtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/gorm.io/gorm.v1"
1013
"gorm.io/driver/mysql"
1114
"gorm.io/gorm"
@@ -15,24 +18,7 @@ const testEnv = "test"
1518

1619
// NewConnection returns a new instrumented Gorm database connection.
1720
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 {
3421
connectionDetails := NewConnectionDetails(config)
35-
3622
connectionString := connectionDetails.String()
3723
driverName := connectionDetails.Dialect
3824

@@ -47,22 +33,28 @@ func getDialectorFromConfig(config *Config, environment string) gorm.Dialector {
4733
connectionString = testDriverName
4834
}
4935

50-
return mysql.New(mysql.Config{
51-
DSN: connectionString,
52-
DriverName: driverName,
53-
})
54-
}
36+
serviceName := fmt.Sprintf("%s-mysql", appName)
5537

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)
5840
if err != nil {
59-
return err
41+
return nil, err
6042
}
6143

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) {
6256
db.SetMaxIdleConns(config.Pool)
6357
db.SetMaxOpenConns(config.MaxOpenConnections)
6458
db.SetConnMaxIdleTime(config.ConnectionMaxIdleTime)
6559
db.SetConnMaxLifetime(config.ConnectionMaxLifetime)
66-
67-
return nil
6860
}

0 commit comments

Comments
 (0)