mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 07:52:21 +08:00
Postgres: Config diagnostics / logging update (#105666)
* config diagnostics update * update tests * fix typo
This commit is contained in:
@ -176,7 +176,7 @@ func (s *Service) generateConnectionString(dsInfo sqleng.DataSourceInfo) (string
|
|||||||
var port int
|
var port int
|
||||||
if strings.HasPrefix(dsInfo.URL, "/") {
|
if strings.HasPrefix(dsInfo.URL, "/") {
|
||||||
host = dsInfo.URL
|
host = dsInfo.URL
|
||||||
logger.Debug("Generating connection string with Unix socket specifier", "socket", host)
|
logger.Debug("Generating connection string with Unix socket specifier", "address", dsInfo.URL)
|
||||||
} else {
|
} else {
|
||||||
index := strings.LastIndex(dsInfo.URL, ":")
|
index := strings.LastIndex(dsInfo.URL, ":")
|
||||||
v6Index := strings.Index(dsInfo.URL, "]")
|
v6Index := strings.Index(dsInfo.URL, "]")
|
||||||
@ -187,12 +187,12 @@ func (s *Service) generateConnectionString(dsInfo sqleng.DataSourceInfo) (string
|
|||||||
var err error
|
var err error
|
||||||
port, err = strconv.Atoi(sp[1])
|
port, err = strconv.Atoi(sp[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("%w %q: %w", sqleng.ErrInvalidPortSpecified, sp[1], err)
|
logger.Debug("Error parsing the IPv4 address", "address", dsInfo.URL)
|
||||||
|
return "", sqleng.ErrParsingPostgresURL
|
||||||
}
|
}
|
||||||
|
logger.Debug("Generating IPv4 connection string with network host/port pair", "host", host, "port", port, "address", dsInfo.URL)
|
||||||
logger.Debug("Generating connection string with network host/port pair", "host", host, "port", port)
|
|
||||||
} else {
|
} else {
|
||||||
logger.Debug("Generating connection string with network host", "host", host)
|
logger.Debug("Generating IPv4 connection string with network host", "host", host, "address", dsInfo.URL)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if index == v6Index+1 {
|
if index == v6Index+1 {
|
||||||
@ -200,13 +200,13 @@ func (s *Service) generateConnectionString(dsInfo sqleng.DataSourceInfo) (string
|
|||||||
var err error
|
var err error
|
||||||
port, err = strconv.Atoi(dsInfo.URL[index+1:])
|
port, err = strconv.Atoi(dsInfo.URL[index+1:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("%w %q: %w", sqleng.ErrInvalidPortSpecified, dsInfo.URL[index+1:], err)
|
logger.Debug("Error parsing the IPv6 address", "address", dsInfo.URL)
|
||||||
|
return "", sqleng.ErrParsingPostgresURL
|
||||||
}
|
}
|
||||||
|
logger.Debug("Generating IPv6 connection string with network host/port pair", "host", host, "port", port, "address", dsInfo.URL)
|
||||||
logger.Debug("Generating ipv6 connection string with network host/port pair", "host", host, "port", port)
|
|
||||||
} else {
|
} else {
|
||||||
host = dsInfo.URL[1 : len(dsInfo.URL)-1]
|
host = dsInfo.URL[1 : len(dsInfo.URL)-1]
|
||||||
logger.Debug("Generating ipv6 connection string with network host", "host", host)
|
logger.Debug("Generating IPv6 connection string with network host", "host", host, "address", dsInfo.URL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ func TestIntegrationGenerateConnectionString(t *testing.T) {
|
|||||||
user: "user",
|
user: "user",
|
||||||
database: "database",
|
database: "database",
|
||||||
tlsSettings: tlsSettings{},
|
tlsSettings: tlsSettings{},
|
||||||
expErr: "invalid port in host specifier",
|
expErr: "error parsing postgres url",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "Password with single quote and backslash",
|
desc: "Password with single quote and backslash",
|
||||||
|
@ -3,5 +3,6 @@ package sqleng
|
|||||||
import "errors"
|
import "errors"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrInvalidPortSpecified error = errors.New("invalid port in host specifier")
|
ErrParsingPostgresURL error = errors.New("error parsing postgres url")
|
||||||
|
ErrCertFileNotExist error = errors.New("certificate file doesn't exist")
|
||||||
)
|
)
|
||||||
|
@ -81,8 +81,8 @@ func ErrToHealthCheckResult(err error) (*backend.CheckHealthResult, error) {
|
|||||||
details["verboseMessage"] = pqErr.Message
|
details["verboseMessage"] = pqErr.Message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if errors.Is(err, ErrInvalidPortSpecified) {
|
if errors.Is(err, ErrParsingPostgresURL) {
|
||||||
res.Message = fmt.Sprintf("Connection string error: %s", ErrInvalidPortSpecified.Error())
|
res.Message = fmt.Sprintf("Connection string error: %s", ErrParsingPostgresURL.Error())
|
||||||
if unwrappedErr := errors.Unwrap(err); unwrappedErr != nil {
|
if unwrappedErr := errors.Unwrap(err); unwrappedErr != nil {
|
||||||
details["verboseMessage"] = unwrappedErr.Error()
|
details["verboseMessage"] = unwrappedErr.Error()
|
||||||
}
|
}
|
||||||
|
@ -51,11 +51,11 @@ func TestErrToHealthCheckResult(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid port specifier error",
|
name: "invalid port specifier error",
|
||||||
err: fmt.Errorf("%w %q: %w", ErrInvalidPortSpecified, `"foo.bar.co"`, errors.New(`strconv.Atoi: parsing "foo.bar.co": invalid syntax`)),
|
err: fmt.Errorf("%w %q: %w", ErrParsingPostgresURL, `"foo.bar.co"`, errors.New(`strconv.Atoi: parsing "foo.bar.co": invalid syntax`)),
|
||||||
want: &backend.CheckHealthResult{
|
want: &backend.CheckHealthResult{
|
||||||
Status: backend.HealthStatusError,
|
Status: backend.HealthStatusError,
|
||||||
Message: "Connection string error: invalid port in host specifier",
|
Message: "Connection string error: error parsing postgres url",
|
||||||
JSONDetails: []byte(`{"errorDetailsLink":"https://grafana.com/docs/grafana/latest/datasources/postgres","verboseMessage":"invalid port in host specifier \"\\\"foo.bar.co\\\"\": strconv.Atoi: parsing \"foo.bar.co\": invalid syntax"}`),
|
JSONDetails: []byte(`{"errorDetailsLink":"https://grafana.com/docs/grafana/latest/datasources/postgres","verboseMessage":"error parsing postgres url \"\\\"foo.bar.co\\\"\": strconv.Atoi: parsing \"foo.bar.co\": invalid syntax"}`),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ func validateCertFilePaths(rootCert, clientCert, clientKey string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !exists {
|
if !exists {
|
||||||
return fmt.Errorf("certificate file %q doesn't exist", fpath)
|
return sqleng.ErrCertFileNotExist
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Reference in New Issue
Block a user