From 4f9fda66d591afc04c618256c7a59bd0bccd3ba8 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Thu, 7 Apr 2022 15:25:24 +0200 Subject: [PATCH 1/2] RDBMS: support *nix sockets as documented --- pkg/config/database.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/pkg/config/database.go b/pkg/config/database.go index 71c557ff..c2652dc1 100644 --- a/pkg/config/database.go +++ b/pkg/config/database.go @@ -13,6 +13,7 @@ import ( "net" "net/url" "strconv" + "strings" "sync" "time" ) @@ -45,8 +46,15 @@ func (d *Database) Open(logger *logging.Logger) (*icingadb.DB, error) { config.User = d.User config.Passwd = d.Password - config.Net = "tcp" - config.Addr = net.JoinHostPort(d.Host, fmt.Sprint(d.Port)) + + if strings.HasPrefix(d.Host, "/") { + config.Net = "unix" + config.Addr = d.Host + } else { + config.Net = "tcp" + config.Addr = net.JoinHostPort(d.Host, fmt.Sprint(d.Port)) + } + config.DBName = d.Database config.Timeout = time.Minute config.Params = map[string]string{"sql_mode": "ANSI_QUOTES"} @@ -68,15 +76,20 @@ func (d *Database) Open(logger *logging.Logger) (*icingadb.DB, error) { uri := &url.URL{ Scheme: "postgres", User: url.UserPassword(d.User, d.Password), - Host: net.JoinHostPort(d.Host, strconv.FormatInt(int64(d.Port), 10)), Path: "/" + url.PathEscape(d.Database), } + query := url.Values{"connect_timeout": {"60"}, "binary_parameters": {"yes"}} + if strings.HasPrefix(d.Host, "/") { + query["host"] = []string{d.Host} // https://github.com/lib/pq/issues/796 + } else { + uri.Host = net.JoinHostPort(d.Host, strconv.FormatInt(int64(d.Port), 10)) + } + if _, err := d.TlsOptions.MakeConfig(uri.Host); err != nil { return nil, err } - query := url.Values{"connect_timeout": {"60"}, "binary_parameters": {"yes"}} if d.TlsOptions.Enable { if d.TlsOptions.Insecure { query["sslmode"] = []string{"require"} From eb61bce2f2fe32bbe8a26347e6915e698a7e7ba4 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Thu, 7 Apr 2022 15:57:26 +0200 Subject: [PATCH 2/2] Document Redis *nix socket support --- doc/03-Configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/03-Configuration.md b/doc/03-Configuration.md index af9cefd1..19def87f 100644 --- a/doc/03-Configuration.md +++ b/doc/03-Configuration.md @@ -11,7 +11,7 @@ Configuration of the Redis that Icinga writes to. Option | Description -------------------------|----------------------------------------------- -address | **Required.** Redis host:port address. +address | **Required.** Redis host:port address or absolute Unix socket path. password | **Optional.** The password to use. tls | **Optional.** Whether to use TLS. cert | **Optional.** Path to TLS client certificate.