forked from DataDog/dd-trace-go
-
Notifications
You must be signed in to change notification settings - Fork 1
/
parse.go
42 lines (38 loc) · 860 Bytes
/
parse.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package sql
import (
"github.com/DataDog/dd-trace-go/contrib/database/sql/parsedsn"
)
// parseDSN returns all information passed through the DSN:
func parseDSN(driverName, dsn string) (meta map[string]string, err error) {
switch driverName {
case "mysql":
meta, err = parsedsn.MySQL(dsn)
case "postgres":
meta, err = parsedsn.Postgres(dsn)
}
meta = normalize(meta)
return meta, err
}
func normalize(meta map[string]string) map[string]string {
m := make(map[string]string)
for k, v := range meta {
if nk, ok := normalizeKey(k); ok {
m[nk] = v
}
}
return m
}
func normalizeKey(k string) (string, bool) {
switch k {
case "user":
return "db.user", true
case "application_name":
return "db.application", true
case "dbname":
return "db.name", true
case "host", "port":
return "out." + k, true
default:
return "", false
}
}