github.com/netdata/go.d.plugin@v0.58.1/modules/mysql/mycnf.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package mysql 4 5 import ( 6 "fmt" 7 "os" 8 9 "gopkg.in/ini.v1" 10 ) 11 12 func dsnFromFile(filename string) (string, error) { 13 f, err := ini.Load(filename) 14 if err != nil { 15 return "", err 16 } 17 18 section, err := f.GetSection("client") 19 if err != nil { 20 return "", err 21 } 22 23 defaultUser := getUser() 24 defaultHost := "localhost" 25 defaultPort := "3306" 26 27 user := section.Key("user").String() 28 password := section.Key("password").String() 29 socket := section.Key("socket").String() 30 host := section.Key("host").String() 31 port := section.Key("port").String() 32 database := section.Key("database").String() 33 34 var dsn string 35 36 if user != "" { 37 dsn = user 38 } else { 39 dsn = defaultUser 40 } 41 42 if password != "" { 43 dsn += ":" + password 44 } 45 46 switch { 47 case socket != "": 48 dsn += fmt.Sprintf("@unix(%s)/", socket) 49 case host != "" && port != "": 50 dsn += fmt.Sprintf("@tcp(%s:%s)/", host, port) 51 case host != "": 52 dsn += fmt.Sprintf("@tcp(%s:%s)/", host, defaultPort) 53 case port != "": 54 dsn += fmt.Sprintf("@tcp(%s:%s)/", defaultHost, port) 55 default: 56 dsn += "@/" 57 } 58 59 if database != "" { 60 dsn += database 61 } 62 return dsn, nil 63 } 64 65 func getUser() (user string) { 66 if user = os.Getenv("LOGNAME"); user != "" { 67 return user 68 } 69 if user = os.Getenv("USER"); user != "" { 70 return user 71 } 72 if user = os.Getenv("LNAME"); user != "" { 73 return user 74 } 75 if user = os.Getenv("USERNAME"); user != "" { 76 return user 77 } 78 return "" 79 }