diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/collectors/go.d.plugin/modules/mysql/mycnf.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/mysql/mycnf.go b/src/go/collectors/go.d.plugin/modules/mysql/mycnf.go new file mode 100644 index 000000000..2069af80d --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/mysql/mycnf.go @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package mysql + +import ( + "fmt" + "os" + + "gopkg.in/ini.v1" +) + +func dsnFromFile(filename string) (string, error) { + f, err := ini.Load(filename) + if err != nil { + return "", err + } + + section, err := f.GetSection("client") + if err != nil { + return "", err + } + + defaultUser := getUser() + defaultHost := "localhost" + defaultPort := "3306" + + user := section.Key("user").String() + password := section.Key("password").String() + socket := section.Key("socket").String() + host := section.Key("host").String() + port := section.Key("port").String() + database := section.Key("database").String() + + var dsn string + + if user != "" { + dsn = user + } else { + dsn = defaultUser + } + + if password != "" { + dsn += ":" + password + } + + switch { + case socket != "": + dsn += fmt.Sprintf("@unix(%s)/", socket) + case host != "" && port != "": + dsn += fmt.Sprintf("@tcp(%s:%s)/", host, port) + case host != "": + dsn += fmt.Sprintf("@tcp(%s:%s)/", host, defaultPort) + case port != "": + dsn += fmt.Sprintf("@tcp(%s:%s)/", defaultHost, port) + default: + dsn += "@/" + } + + if database != "" { + dsn += database + } + return dsn, nil +} + +func getUser() (user string) { + if user = os.Getenv("LOGNAME"); user != "" { + return user + } + if user = os.Getenv("USER"); user != "" { + return user + } + if user = os.Getenv("LNAME"); user != "" { + return user + } + if user = os.Getenv("USERNAME"); user != "" { + return user + } + return "" +} |