Skip to content

Commit

Permalink
Add error source (#951)
Browse files Browse the repository at this point in the history
  • Loading branch information
aangelisc authored Sep 6, 2024
1 parent 640270e commit 29bacc5
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 18 deletions.
3 changes: 2 additions & 1 deletion cspell.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
"WorkDir",
"elazarl",
"goproxy",
"Nonproxy"
"Nonproxy",
"errorsource"
]
}
13 changes: 7 additions & 6 deletions pkg/macros/macros.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/grafana/sqlds/v3"

"github.com/grafana/grafana-plugin-sdk-go/data/sqlutil"
"github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource"
)

// Converts a time.Time to a Date
Expand Down Expand Up @@ -48,7 +49,7 @@ func ToTimeFilterMs(query *sqlutil.Query, args []string) (string, error) {

func TimeFilter(query *sqlutil.Query, args []string) (string, error) {
if len(args) != 1 {
return "", fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args))
return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false)
}

var (
Expand All @@ -62,7 +63,7 @@ func TimeFilter(query *sqlutil.Query, args []string) (string, error) {

func TimeFilterMs(query *sqlutil.Query, args []string) (string, error) {
if len(args) != 1 {
return "", fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args))
return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false)
}

var (
Expand All @@ -76,7 +77,7 @@ func TimeFilterMs(query *sqlutil.Query, args []string) (string, error) {

func DateFilter(query *sqlutil.Query, args []string) (string, error) {
if len(args) != 1 {
return "", fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args))
return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false)
}
var (
column = args[0]
Expand All @@ -89,7 +90,7 @@ func DateFilter(query *sqlutil.Query, args []string) (string, error) {

func DateTimeFilter(query *sqlutil.Query, args []string) (string, error) {
if len(args) != 2 {
return "", fmt.Errorf("%w: expected 2 arguments, received %d", sqlds.ErrorBadArgumentCount, len(args))
return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 2 arguments, received %d", sqlds.ErrorBadArgumentCount, len(args)), false)
}
var (
dateColumn = args[0]
Expand All @@ -105,7 +106,7 @@ func DateTimeFilter(query *sqlutil.Query, args []string) (string, error) {

func TimeInterval(query *sqlutil.Query, args []string) (string, error) {
if len(args) != 1 {
return "", fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args))
return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false)
}

seconds := math.Max(query.Interval.Seconds(), 1)
Expand All @@ -114,7 +115,7 @@ func TimeInterval(query *sqlutil.Query, args []string) (string, error) {

func TimeIntervalMs(query *sqlutil.Query, args []string) (string, error) {
if len(args) != 1 {
return "", fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args))
return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false)
}

milliseconds := math.Max(float64(query.Interval.Milliseconds()), 1)
Expand Down
7 changes: 4 additions & 3 deletions pkg/plugin/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/build"
"github.com/grafana/grafana-plugin-sdk-go/data"
"github.com/grafana/grafana-plugin-sdk-go/data/sqlutil"
"github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource"
"github.com/grafana/sqlds/v3"
"github.com/pkg/errors"
"golang.org/x/net/proxy"
Expand All @@ -40,7 +41,7 @@ func getTLSConfig(settings Settings) (*tls.Config, error) {
if settings.TlsAuthWithCACert && len(settings.TlsCACert) > 0 {
caPool := x509.NewCertPool()
if ok := caPool.AppendCertsFromPEM([]byte(settings.TlsCACert)); !ok {
return nil, ErrorInvalidCACertificate
return nil, errorsource.DownstreamError(ErrorInvalidCACertificate, false)
}
tlsConfig.RootCAs = caPool
}
Expand Down Expand Up @@ -120,11 +121,11 @@ func (h *Clickhouse) Connect(ctx context.Context, config backend.DataSourceInsta
}
t, err := strconv.Atoi(settings.DialTimeout)
if err != nil {
return nil, errors.New(fmt.Sprintf("invalid timeout: %s", settings.DialTimeout))
return nil, errorsource.DownstreamError(errors.New(fmt.Sprintf("invalid timeout: %s", settings.DialTimeout)), false)
}
qt, err := strconv.Atoi(settings.QueryTimeout)
if err != nil {
return nil, errors.New(fmt.Sprintf("invalid query timeout: %s", settings.QueryTimeout))
return nil, errorsource.DownstreamError(errors.New(fmt.Sprintf("invalid query timeout: %s", settings.QueryTimeout)), false)
}
protocol := clickhouse.Native
if settings.Protocol == "http" {
Expand Down
17 changes: 9 additions & 8 deletions pkg/plugin/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/proxy"
"github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource"
)

// Settings - data loaded from grafana settings database
Expand Down Expand Up @@ -52,10 +53,10 @@ const secureHeaderKeyPrefix = "secureHttpHeaders."

func (settings *Settings) isValid() (err error) {
if settings.Host == "" {
return ErrorMessageInvalidHost
return errorsource.DownstreamError(ErrorMessageInvalidHost, false)
}
if settings.Port == 0 {
return ErrorMessageInvalidPort
return errorsource.DownstreamError(ErrorMessageInvalidPort, false)
}
return nil
}
Expand All @@ -79,7 +80,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings
if port, ok := jsonData["port"].(string); ok {
settings.Port, err = strconv.ParseInt(port, 0, 64)
if err != nil {
return settings, fmt.Errorf("could not parse port value: %w", err)
return settings, errorsource.DownstreamError(fmt.Errorf("could not parse port value: %w", err), false)
}
} else {
settings.Port = int64(jsonData["port"].(float64))
Expand All @@ -92,7 +93,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings
if secure, ok := jsonData["secure"].(string); ok {
settings.Secure, err = strconv.ParseBool(secure)
if err != nil {
return settings, fmt.Errorf("could not parse secure value: %w", err)
return settings, errorsource.DownstreamError(fmt.Errorf("could not parse secure value: %w", err), false)
}
} else {
settings.Secure = jsonData["secure"].(bool)
Expand All @@ -106,7 +107,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings
if tlsSkipVerify, ok := jsonData["tlsSkipVerify"].(string); ok {
settings.InsecureSkipVerify, err = strconv.ParseBool(tlsSkipVerify)
if err != nil {
return settings, fmt.Errorf("could not parse tlsSkipVerify value: %w", err)
return settings, errorsource.DownstreamError(fmt.Errorf("could not parse tlsSkipVerify value: %w", err), false)
}
} else {
settings.InsecureSkipVerify = jsonData["tlsSkipVerify"].(bool)
Expand All @@ -116,7 +117,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings
if tlsAuth, ok := jsonData["tlsAuth"].(string); ok {
settings.TlsClientAuth, err = strconv.ParseBool(tlsAuth)
if err != nil {
return settings, fmt.Errorf("could not parse tlsAuth value: %w", err)
return settings, errorsource.DownstreamError(fmt.Errorf("could not parse tlsAuth value: %w", err), false)
}
} else {
settings.TlsClientAuth = jsonData["tlsAuth"].(bool)
Expand All @@ -126,7 +127,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings
if tlsAuthWithCACert, ok := jsonData["tlsAuthWithCACert"].(string); ok {
settings.TlsAuthWithCACert, err = strconv.ParseBool(tlsAuthWithCACert)
if err != nil {
return settings, fmt.Errorf("could not parse tlsAuthWithCACert value: %w", err)
return settings, errorsource.DownstreamError(fmt.Errorf("could not parse tlsAuthWithCACert value: %w", err), false)
}
} else {
settings.TlsAuthWithCACert = jsonData["tlsAuthWithCACert"].(bool)
Expand Down Expand Up @@ -174,7 +175,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings
if forwardGrafanaHeaders, ok := jsonData["forwardGrafanaHeaders"].(string); ok {
settings.ForwardGrafanaHeaders, err = strconv.ParseBool(forwardGrafanaHeaders)
if err != nil {
return settings, fmt.Errorf("could not parse forwardGrafanaHeaders value: %w", err)
return settings, errorsource.DownstreamError(fmt.Errorf("could not parse forwardGrafanaHeaders value: %w", err), false)
}
} else {
settings.ForwardGrafanaHeaders = jsonData["forwardGrafanaHeaders"].(bool)
Expand Down

0 comments on commit 29bacc5

Please sign in to comment.