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  }