Skip to content

Commit f4590eb

Browse files
committed
add socket to args
1 parent e149561 commit f4590eb

File tree

4 files changed

+35
-23
lines changed

4 files changed

+35
-23
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ Name | Description
143143
-------------------------------------------|--------------------------------------------------------------------------------------------------
144144
mysqld.address | Hostname and port used for connecting to MySQL server, format: `host:port`. (default: `localhost:3306`)
145145
mysqld.username | Username to be used for connecting to MySQL Server
146+
mysqld.socket | Path to mysql socket (overrides mysqd.address)
146147
config.my-cnf | Path to .my.cnf file to read MySQL credentials from. (default: `~/.my.cnf`)
147148
log.level | Logging verbosity (default: info)
148149
exporter.lock_wait_timeout | Set a lock_wait_timeout (in seconds) on the connection to avoid long metadata locking. (default: 2)

config/config.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (ch *MySqlConfigHandler) GetConfig() *Config {
8787
return ch.Config
8888
}
8989

90-
func (ch *MySqlConfigHandler) ReloadConfig(filename string, mysqldAddress string, mysqldUser string, tlsInsecureSkipVerify bool, logger *slog.Logger) error {
90+
func (ch *MySqlConfigHandler) ReloadConfig(filename string, mysqldAddress string, mysqldSocket string, mysqldUser string, tlsInsecureSkipVerify bool, logger *slog.Logger) error {
9191
var host, port string
9292
defer func() {
9393
if err != nil {
@@ -107,16 +107,23 @@ func (ch *MySqlConfigHandler) ReloadConfig(filename string, mysqldAddress string
107107
return fmt.Errorf("failed to load config from %s: %w", filename, err)
108108
}
109109

110-
if host, port, err = net.SplitHostPort(mysqldAddress); err != nil {
111-
return fmt.Errorf("failed to parse address: %w", err)
112-
}
113-
114110
if clientSection := cfg.Section("client"); clientSection != nil {
115-
if cfgHost := clientSection.Key("host"); cfgHost.String() == "" {
116-
cfgHost.SetValue(host)
117-
}
118-
if cfgPort := clientSection.Key("port"); cfgPort.String() == "" {
119-
cfgPort.SetValue(port)
111+
if mysqldSocket != "" {
112+
// If socket is provided, set it in the config
113+
if cfgSocket := clientSection.Key("socket"); cfgSocket.String() == "" {
114+
cfgSocket.SetValue(mysqldSocket)
115+
}
116+
} else {
117+
// Otherwise, parse and set host:port
118+
if host, port, err = net.SplitHostPort(mysqldAddress); err != nil {
119+
return fmt.Errorf("failed to parse address: %w", err)
120+
}
121+
if cfgHost := clientSection.Key("host"); cfgHost.String() == "" {
122+
cfgHost.SetValue(host)
123+
}
124+
if cfgPort := clientSection.Key("port"); cfgPort.String() == "" {
125+
cfgPort.SetValue(port)
126+
}
120127
}
121128
if cfgUser := clientSection.Key("user"); cfgUser.String() == "" {
122129
cfgUser.SetValue(mysqldUser)

config/config_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestValidateConfig(t *testing.T) {
2727
c := MySqlConfigHandler{
2828
Config: &Config{},
2929
}
30-
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", true, promslog.NewNopLogger()); err != nil {
30+
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", "", true, promslog.NewNopLogger()); err != nil {
3131
t.Error(err)
3232
}
3333

@@ -59,7 +59,7 @@ func TestValidateConfig(t *testing.T) {
5959
c := MySqlConfigHandler{
6060
Config: &Config{},
6161
}
62-
if err := c.ReloadConfig("testdata/child_client.cnf", "localhost:3306", "", true, promslog.NewNopLogger()); err != nil {
62+
if err := c.ReloadConfig("testdata/child_client.cnf", "localhost:3306", "", "", true, promslog.NewNopLogger()); err != nil {
6363
t.Error(err)
6464
}
6565
cfg := c.GetConfig()
@@ -72,7 +72,7 @@ func TestValidateConfig(t *testing.T) {
7272
Config: &Config{},
7373
}
7474
os.Setenv("MYSQLD_EXPORTER_PASSWORD", "supersecretpassword")
75-
if err := c.ReloadConfig("", "testhost:5000", "testuser", true, promslog.NewNopLogger()); err != nil {
75+
if err := c.ReloadConfig("", "testhost:5000", "", "testuser", true, promslog.NewNopLogger()); err != nil {
7676
t.Error(err)
7777
}
7878

@@ -89,7 +89,7 @@ func TestValidateConfig(t *testing.T) {
8989
Config: &Config{},
9090
}
9191
os.Setenv("MYSQLD_EXPORTER_PASSWORD", "supersecretpassword")
92-
err := c.ReloadConfig("", "testhost", "testuser", true, promslog.NewNopLogger())
92+
err := c.ReloadConfig("", "testhost", "", "testuser", true, promslog.NewNopLogger())
9393
convey.So(
9494
err,
9595
convey.ShouldBeError,
@@ -101,7 +101,7 @@ func TestValidateConfig(t *testing.T) {
101101
Config: &Config{},
102102
}
103103
os.Setenv("MYSQLD_EXPORTER_PASSWORD", "supersecretpassword")
104-
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "fakeuser", true, promslog.NewNopLogger()); err != nil {
104+
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", "fakeuser", true, promslog.NewNopLogger()); err != nil {
105105
t.Error(err)
106106
}
107107

@@ -116,7 +116,7 @@ func TestValidateConfig(t *testing.T) {
116116
Config: &Config{},
117117
}
118118
os.Clearenv()
119-
err := c.ReloadConfig("testdata/missing_user.cnf", "localhost:3306", "", true, promslog.NewNopLogger())
119+
err := c.ReloadConfig("testdata/missing_user.cnf", "localhost:3306", "", "", true, promslog.NewNopLogger())
120120
convey.So(
121121
err,
122122
convey.ShouldResemble,
@@ -129,7 +129,7 @@ func TestValidateConfig(t *testing.T) {
129129
Config: &Config{},
130130
}
131131
os.Clearenv()
132-
if err := c.ReloadConfig("testdata/missing_password.cnf", "localhost:3306", "", true, promslog.NewNopLogger()); err != nil {
132+
if err := c.ReloadConfig("testdata/missing_password.cnf", "localhost:3306", "", "", true, promslog.NewNopLogger()); err != nil {
133133
t.Error(err)
134134
}
135135

@@ -144,7 +144,7 @@ func TestValidateConfig(t *testing.T) {
144144
Config: &Config{},
145145
}
146146
os.Clearenv()
147-
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", true, promslog.NewNopLogger()); err != nil {
147+
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", "", true, promslog.NewNopLogger()); err != nil {
148148
t.Error(err)
149149
}
150150
cfg := c.GetConfig()
@@ -165,7 +165,7 @@ func TestFormDSN(t *testing.T) {
165165
)
166166

167167
convey.Convey("Host exporter dsn", t, func() {
168-
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", false, promslog.NewNopLogger()); err != nil {
168+
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", "", false, promslog.NewNopLogger()); err != nil {
169169
t.Error(err)
170170
}
171171
convey.Convey("Default Client", func() {
@@ -213,7 +213,7 @@ func TestFormDSNWithSslSkipVerify(t *testing.T) {
213213
)
214214

215215
convey.Convey("Host exporter dsn with tls skip verify", t, func() {
216-
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", true, promslog.NewNopLogger()); err != nil {
216+
if err := c.ReloadConfig("testdata/client.cnf", "localhost:3306", "", "", true, promslog.NewNopLogger()); err != nil {
217217
t.Error(err)
218218
}
219219
convey.Convey("Default Client", func() {
@@ -245,7 +245,7 @@ func TestFormDSNWithCustomTls(t *testing.T) {
245245
)
246246

247247
convey.Convey("Host exporter dsn with custom tls", t, func() {
248-
if err := c.ReloadConfig("testdata/client_custom_tls.cnf", "localhost:3306", "", false, promslog.NewNopLogger()); err != nil {
248+
if err := c.ReloadConfig("testdata/client_custom_tls.cnf", "localhost:3306", "", "", false, promslog.NewNopLogger()); err != nil {
249249
t.Error(err)
250250
}
251251
convey.Convey("Target tls enabled", func() {

mysqld_exporter.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ var (
5353
"mysqld.address",
5454
"Address to use for connecting to MySQL",
5555
).Default("localhost:3306").String()
56+
mysqldSocket = kingpin.Flag(
57+
"mysqld.socket",
58+
"Socket file to use for connecting to MySQL (takes precedence over address)",
59+
).String()
5660
mysqldUser = kingpin.Flag(
5761
"mysqld.username",
5862
"Hostname to use for connecting to MySQL",
@@ -257,7 +261,7 @@ func main() {
257261
logger.Info("Build context", "build_context", version.BuildContext())
258262

259263
var err error
260-
if err = c.ReloadConfig(*configMycnf, *mysqldAddress, *mysqldUser, *tlsInsecureSkipVerify, logger); err != nil {
264+
if err = c.ReloadConfig(*configMycnf, *mysqldAddress, *mysqldSocket, *mysqldUser, *tlsInsecureSkipVerify, logger); err != nil {
261265
logger.Info("Error parsing host config", "file", *configMycnf, "err", err)
262266
os.Exit(1)
263267
}
@@ -293,7 +297,7 @@ func main() {
293297
}
294298
http.HandleFunc("/probe", handleProbe(enabledScrapers, logger))
295299
http.HandleFunc("/-/reload", func(w http.ResponseWriter, r *http.Request) {
296-
if err = c.ReloadConfig(*configMycnf, *mysqldAddress, *mysqldUser, *tlsInsecureSkipVerify, logger); err != nil {
300+
if err = c.ReloadConfig(*configMycnf, *mysqldAddress, *mysqldSocket, *mysqldUser, *tlsInsecureSkipVerify, logger); err != nil {
297301
logger.Warn("Error reloading host config", "file", *configMycnf, "error", err)
298302
return
299303
}

0 commit comments

Comments
 (0)