Chore: Drop xerrors dependency (#26718)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
This commit is contained in:
@@ -17,7 +17,6 @@ import (
|
||||
"github.com/fatih/color"
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
|
||||
"github.com/grafana/grafana/pkg/util/errutil"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
|
||||
@@ -180,7 +179,7 @@ func SelectVersion(plugin *models.Plugin, version string) (*models.Version, erro
|
||||
|
||||
latestForArch := latestSupportedVersion(plugin)
|
||||
if latestForArch == nil {
|
||||
return nil, xerrors.New("plugin is not supported on your architecture and OS.")
|
||||
return nil, fmt.Errorf("plugin is not supported on your architecture and OS")
|
||||
}
|
||||
|
||||
if version == "" {
|
||||
@@ -194,11 +193,13 @@ func SelectVersion(plugin *models.Plugin, version string) (*models.Version, erro
|
||||
}
|
||||
|
||||
if len(ver.Version) == 0 {
|
||||
return nil, xerrors.New("could not find the version you're looking for")
|
||||
return nil, fmt.Errorf("could not find the version you're looking for")
|
||||
}
|
||||
|
||||
if !supportsCurrentArch(&ver) {
|
||||
return nil, xerrors.Errorf("the version you want is not supported on your architecture and OS. Latest suitable version is %s", latestForArch.Version)
|
||||
return nil, fmt.Errorf(
|
||||
"the version you want is not supported on your architecture and OS, latest suitable version is %s",
|
||||
latestForArch.Version)
|
||||
}
|
||||
|
||||
return &ver, nil
|
||||
@@ -209,7 +210,7 @@ func RemoveGitBuildFromName(pluginName, filename string) string {
|
||||
return r.ReplaceAllString(filename, pluginName+"/")
|
||||
}
|
||||
|
||||
var permissionsDeniedMessage = "Could not create %s. Permission denied. Make sure you have write access to plugindir"
|
||||
const permissionsDeniedMessage = "could not create %q, permission denied, make sure you have write access to plugin dir"
|
||||
|
||||
func extractFiles(archiveFile string, pluginName string, filePath string, allowSymlinks bool) error {
|
||||
logger.Debugf("Extracting archive %v to %v...\n", archiveFile, filePath)
|
||||
@@ -221,7 +222,8 @@ func extractFiles(archiveFile string, pluginName string, filePath string, allowS
|
||||
for _, zf := range r.File {
|
||||
newFileName := RemoveGitBuildFromName(pluginName, zf.Name)
|
||||
if !isPathSafe(newFileName, filepath.Join(filePath, pluginName)) {
|
||||
return xerrors.Errorf("filepath: %q tries to write outside of plugin directory: %q. This can be a security risk.", zf.Name, path.Join(filePath, pluginName))
|
||||
return fmt.Errorf("filepath: %q tries to write outside of plugin directory: %q, this can be a security risk",
|
||||
zf.Name, filepath.Join(filePath, pluginName))
|
||||
}
|
||||
newFile := path.Join(filePath, newFileName)
|
||||
|
||||
@@ -285,12 +287,12 @@ func extractFile(file *zip.File, filePath string) (err error) {
|
||||
dst, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fileMode)
|
||||
if err != nil {
|
||||
if os.IsPermission(err) {
|
||||
return xerrors.Errorf(permissionsDeniedMessage, filePath)
|
||||
return fmt.Errorf(permissionsDeniedMessage, filePath)
|
||||
}
|
||||
|
||||
unwrappedError := xerrors.Unwrap(err)
|
||||
unwrappedError := errors.Unwrap(err)
|
||||
if unwrappedError != nil && strings.EqualFold(unwrappedError.Error(), "text file busy") {
|
||||
return fmt.Errorf("file %s is in use. Please stop Grafana, install the plugin and restart Grafana", filePath)
|
||||
return fmt.Errorf("file %q is in use - please stop Grafana, install the plugin and restart Grafana", filePath)
|
||||
}
|
||||
|
||||
return errutil.Wrap("failed to open file", err)
|
||||
|
||||
@@ -16,7 +16,6 @@ import (
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
|
||||
"github.com/grafana/grafana/pkg/util/errutil"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
type GrafanaComClient struct {
|
||||
@@ -78,7 +77,7 @@ func (client *GrafanaComClient) DownloadFile(pluginName string, tmpFile *os.File
|
||||
client.retryCount = 0
|
||||
failure := fmt.Sprintf("%v", r)
|
||||
if failure == "runtime error: makeslice: len out of range" {
|
||||
err = xerrors.New("Corrupt http response from source. Please try again")
|
||||
err = fmt.Errorf("corrupt HTTP response from source, please try again")
|
||||
} else {
|
||||
panic(r)
|
||||
}
|
||||
@@ -101,7 +100,7 @@ func (client *GrafanaComClient) DownloadFile(pluginName string, tmpFile *os.File
|
||||
}
|
||||
w.Flush()
|
||||
if len(checksum) > 0 && checksum != fmt.Sprintf("%x", h.Sum(nil)) {
|
||||
return xerrors.New("Expected MD5 checksum does not match the downloaded archive. Please contact security@grafana.com.")
|
||||
return fmt.Errorf("expected MD5 checksum does not match the downloaded archive - please contact security@grafana.com")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
|
||||
"golang.org/x/xerrors"
|
||||
"github.com/grafana/grafana/pkg/util/errutil"
|
||||
)
|
||||
|
||||
func GetGrafanaPluginDir(currentOS string) string {
|
||||
@@ -23,7 +23,7 @@ func GetGrafanaPluginDir(currentOS string) string {
|
||||
func getGrafanaRoot() (string, error) {
|
||||
ex, err := os.Executable()
|
||||
if err != nil {
|
||||
return "", xerrors.New("Failed to get executable path")
|
||||
return "", errutil.Wrap("failed to get executable path", err)
|
||||
}
|
||||
exPath := filepath.Dir(ex)
|
||||
_, last := path.Split(exPath)
|
||||
|
||||
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@@ -40,7 +41,6 @@ import (
|
||||
_ "github.com/grafana/grafana/pkg/services/sqlstore"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/util/errutil"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
// NewServer returns a new instance of Server.
|
||||
@@ -147,7 +147,7 @@ func (s *Server) Run() (err error) {
|
||||
|
||||
defer func() {
|
||||
s.log.Debug("Waiting on services...")
|
||||
if waitErr := s.childRoutines.Wait(); waitErr != nil && !xerrors.Is(waitErr, context.Canceled) {
|
||||
if waitErr := s.childRoutines.Wait(); waitErr != nil && !errors.Is(waitErr, context.Canceled) {
|
||||
s.log.Error("A service failed", "err", waitErr)
|
||||
if err == nil {
|
||||
err = waitErr
|
||||
@@ -169,7 +169,7 @@ func (s *Server) Shutdown(reason string) {
|
||||
s.shutdownFn()
|
||||
|
||||
// wait for child routines
|
||||
if err := s.childRoutines.Wait(); err != nil && !xerrors.Is(err, context.Canceled) {
|
||||
if err := s.childRoutines.Wait(); err != nil && !errors.Is(err, context.Canceled) {
|
||||
s.log.Error("Failed waiting for services to shutdown", "err", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import (
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/util/errutil"
|
||||
"github.com/grafana/grafana/pkg/util/proxyutil"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -382,7 +381,7 @@ func restartKilledProcess(ctx context.Context, p Plugin) error {
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
if err := ctx.Err(); err != nil && !xerrors.Is(err, context.Canceled) {
|
||||
if err := ctx.Err(); err != nil && !errors.Is(err, context.Canceled) {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -21,7 +21,6 @@ import (
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/util"
|
||||
"github.com/grafana/grafana/pkg/util/errutil"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -193,11 +192,11 @@ func (pm *PluginManager) scan(pluginDir string, requireSigned bool) error {
|
||||
}
|
||||
|
||||
if err := util.Walk(pluginDir, true, true, scanner.walker); err != nil {
|
||||
if xerrors.Is(err, os.ErrNotExist) {
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
pm.log.Debug("Couldn't scan directory since it doesn't exist", "pluginDir", pluginDir)
|
||||
return nil
|
||||
}
|
||||
if xerrors.Is(err, os.ErrPermission) {
|
||||
if errors.Is(err, os.ErrPermission) {
|
||||
pm.log.Debug("Couldn't scan directory due to lack of permissions", "pluginDir", pluginDir)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package alerting
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
@@ -16,7 +17,6 @@ import (
|
||||
"github.com/grafana/grafana/pkg/services/rendering"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
// AlertEngine is the background process that
|
||||
@@ -215,9 +215,9 @@ func (e *AlertEngine) processJob(attemptID int, attemptChan chan int, cancelChan
|
||||
evalContext.Rule.State = evalContext.GetNewState()
|
||||
if err := e.resultHandler.handle(evalContext); err != nil {
|
||||
switch {
|
||||
case xerrors.Is(err, context.Canceled):
|
||||
case errors.Is(err, context.Canceled):
|
||||
e.log.Debug("Result handler returned context.Canceled")
|
||||
case xerrors.Is(err, context.DeadlineExceeded):
|
||||
case errors.Is(err, context.DeadlineExceeded):
|
||||
e.log.Debug("Result handler returned context.DeadlineExceeded")
|
||||
default:
|
||||
e.log.Error("Failed to handle result", "err", err)
|
||||
|
||||
@@ -271,7 +271,7 @@ func TestAlertRuleExtraction(t *testing.T) {
|
||||
|
||||
Convey("Should fail on save", func() {
|
||||
_, err := extractor.GetAlerts()
|
||||
So(err.Error(), ShouldEqual, "Alert validation error: Panel id is not correct, alertName=Influxdb, panelId=1")
|
||||
So(err.Error(), ShouldEqual, "alert validation error: Panel id is not correct, alertName=Influxdb, panelId=1")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -24,7 +24,7 @@ func TestSlackNotifier(t *testing.T) {
|
||||
}
|
||||
|
||||
_, err = NewSlackNotifier(model)
|
||||
So(err, ShouldBeError, "Alert validation error: Could not find url property in settings")
|
||||
So(err, ShouldBeError, "alert validation error: Could not find url property in settings")
|
||||
})
|
||||
|
||||
//nolint:goconst
|
||||
@@ -157,7 +157,7 @@ func TestSlackNotifier(t *testing.T) {
|
||||
|
||||
_, err = NewSlackNotifier(model)
|
||||
|
||||
So(err, ShouldBeError, "Alert validation error: Recipient on invalid format: \"#open tsdb\"")
|
||||
So(err, ShouldBeError, "alert validation error: Recipient on invalid format: \"#open tsdb\"")
|
||||
})
|
||||
|
||||
Convey("with user recipient with spaces should return an error", func() {
|
||||
@@ -177,7 +177,7 @@ func TestSlackNotifier(t *testing.T) {
|
||||
|
||||
_, err = NewSlackNotifier(model)
|
||||
|
||||
So(err, ShouldBeError, "Alert validation error: Recipient on invalid format: \"@user name\"")
|
||||
So(err, ShouldBeError, "alert validation error: Recipient on invalid format: \"@user name\"")
|
||||
})
|
||||
|
||||
Convey("with user recipient with uppercase letters should return an error", func() {
|
||||
@@ -197,7 +197,7 @@ func TestSlackNotifier(t *testing.T) {
|
||||
|
||||
_, err = NewSlackNotifier(model)
|
||||
|
||||
So(err, ShouldBeError, "Alert validation error: Recipient on invalid format: \"@User\"")
|
||||
So(err, ShouldBeError, "alert validation error: Recipient on invalid format: \"@User\"")
|
||||
})
|
||||
|
||||
Convey("with Slack ID for recipient should work", func() {
|
||||
|
||||
@@ -2,6 +2,7 @@ package alerting
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/bus"
|
||||
@@ -9,7 +10,6 @@ import (
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/infra/metrics"
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/grafana/grafana/pkg/services/annotations"
|
||||
"github.com/grafana/grafana/pkg/services/rendering"
|
||||
@@ -101,9 +101,9 @@ func (handler *defaultResultHandler) handle(evalContext *EvalContext) error {
|
||||
|
||||
if err := handler.notifier.SendIfNeeded(evalContext); err != nil {
|
||||
switch {
|
||||
case xerrors.Is(err, context.Canceled):
|
||||
case errors.Is(err, context.Canceled):
|
||||
handler.log.Debug("handler.notifier.SendIfNeeded returned context.Canceled")
|
||||
case xerrors.Is(err, context.DeadlineExceeded):
|
||||
case errors.Is(err, context.DeadlineExceeded):
|
||||
handler.log.Debug("handler.notifier.SendIfNeeded returned context.DeadlineExceeded")
|
||||
default:
|
||||
handler.log.Error("handler.notifier.SendIfNeeded failed", "err", err)
|
||||
|
||||
@@ -66,10 +66,10 @@ func (e ValidationError) Error() string {
|
||||
}
|
||||
|
||||
if e.Err != nil {
|
||||
return fmt.Sprintf("Alert validation error: %s%s", e.Err.Error(), extraInfo)
|
||||
return fmt.Sprintf("alert validation error: %s%s", e.Err.Error(), extraInfo)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("Alert validation error: %s", extraInfo)
|
||||
return fmt.Sprintf("alert validation error: %s", extraInfo)
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -215,7 +215,7 @@ func TestAlertRuleModel(t *testing.T) {
|
||||
|
||||
_, err := NewRuleFromDBAlert(alert)
|
||||
So(err, ShouldNotBeNil)
|
||||
So(err.Error(), ShouldEqual, "Alert validation error: Neither id nor uid is specified in 'notifications' block, type assertion to string failed AlertId: 1 PanelId: 1 DashboardId: 1")
|
||||
So(err.Error(), ShouldEqual, "alert validation error: Neither id nor uid is specified in 'notifications' block, type assertion to string failed AlertId: 1 PanelId: 1 DashboardId: 1")
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dashboards
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
@@ -10,7 +11,6 @@ import (
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"github.com/grafana/grafana/pkg/services/guardian"
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
func TestDashboardService(t *testing.T) {
|
||||
@@ -145,12 +145,12 @@ func TestDashboardService(t *testing.T) {
|
||||
})
|
||||
|
||||
bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
|
||||
return xerrors.New("Alert validation error")
|
||||
return fmt.Errorf("alert validation error")
|
||||
})
|
||||
|
||||
dto.Dashboard = models.NewDashboard("Dash")
|
||||
_, err := service.SaveDashboard(dto, false)
|
||||
So(err.Error(), ShouldEqual, "Alert validation error")
|
||||
So(err.Error(), ShouldEqual, "alert validation error")
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/BurntSushi/toml"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
@@ -136,7 +135,7 @@ func readConfig(configFile string) (*Config, error) {
|
||||
}
|
||||
|
||||
if len(result.Servers) == 0 {
|
||||
return nil, xerrors.New("LDAP enabled but no LDAP servers defined in config file")
|
||||
return nil, fmt.Errorf("LDAP enabled but no LDAP servers defined in config file")
|
||||
}
|
||||
|
||||
// set default org id
|
||||
@@ -164,11 +163,11 @@ func assertNotEmptyCfg(val interface{}, propName string) error {
|
||||
switch v := val.(type) {
|
||||
case string:
|
||||
if v == "" {
|
||||
return xerrors.Errorf("LDAP config file is missing option: %v", propName)
|
||||
return fmt.Errorf("LDAP config file is missing option: %q", propName)
|
||||
}
|
||||
case []string:
|
||||
if len(v) == 0 {
|
||||
return xerrors.Errorf("LDAP config file is missing option: %v", propName)
|
||||
return fmt.Errorf("LDAP config file is missing option: %q", propName)
|
||||
}
|
||||
default:
|
||||
fmt.Println("unknown")
|
||||
|
||||
@@ -321,7 +321,7 @@ func TestNotificationAsConfig(t *testing.T) {
|
||||
cfgProvider := &configReader{log: log.New("test logger")}
|
||||
_, err := cfgProvider.readConfig(incorrectSettings)
|
||||
So(err, ShouldNotBeNil)
|
||||
So(err.Error(), ShouldEqual, "Alert validation error: Could not find url property in settings")
|
||||
So(err.Error(), ShouldEqual, "alert validation error: Could not find url property in settings")
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,23 +2,18 @@ package errutil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
// Wrap is a simple wrapper around Errorf that is doing error wrapping. You can read how that works in
|
||||
// https://godoc.org/golang.org/x/xerrors#Errorf but its API is very implicit which is a reason for this wrapper.
|
||||
// There is also a discussion (https://github.com/golang/go/issues/29934) where many comments make arguments for such
|
||||
// wrapper so hopefully it will be added in the standard lib later.
|
||||
// Wrap is a simple wrapper around fmt.Errorf that wraps errors.
|
||||
func Wrap(message string, err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return xerrors.Errorf("%v: %w", message, err)
|
||||
return fmt.Errorf("%v: %w", message, err)
|
||||
}
|
||||
|
||||
// Wrapf is a simple wrapper around Errorf that is doing error wrapping
|
||||
// Wrapf is a simple wrapper around fmt.Errorf that wraps errors.
|
||||
// Wrapf allows you to send a format and args instead of just a message.
|
||||
func Wrapf(err error, message string, a ...interface{}) error {
|
||||
if err == nil {
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
func ParseIPAddress(input string) (string, error) {
|
||||
addr, err := SplitHostPort(input)
|
||||
if err != nil {
|
||||
return "", errutil.Wrapf(err, "Failed to split network address '%s' by host and port",
|
||||
return "", errutil.Wrapf(err, "failed to split network address %q by host and port",
|
||||
input)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
func TestParseIPAddress(t *testing.T) {
|
||||
@@ -28,16 +28,16 @@ func TestParseIPAddress(t *testing.T) {
|
||||
|
||||
Convey("Invalid address", t, func() {
|
||||
_, err := ParseIPAddress("[::1")
|
||||
So(err, ShouldBeError, xerrors.Errorf(
|
||||
"Failed to split network address '[::1' by host and port: Malformed IPv6 address: '[::1'"))
|
||||
So(err, ShouldBeError, fmt.Errorf(
|
||||
`failed to split network address "[::1" by host and port: Malformed IPv6 address: '[::1'`))
|
||||
|
||||
_, err = ParseIPAddress("::1]")
|
||||
So(err, ShouldBeError, xerrors.Errorf(
|
||||
"Failed to split network address '::1]' by host and port: net.SplitHostPort failed for '::1]': address ::1]: too many colons in address"))
|
||||
So(err, ShouldBeError, fmt.Errorf(
|
||||
`failed to split network address "::1]" by host and port: net.SplitHostPort failed for '::1]': address ::1]: too many colons in address`))
|
||||
|
||||
_, err = ParseIPAddress("")
|
||||
So(err, ShouldBeError, xerrors.Errorf(
|
||||
"Failed to split network address '' by host and port: Input is empty"))
|
||||
So(err, ShouldBeError, fmt.Errorf(
|
||||
`failed to split network address "" by host and port: Input is empty`))
|
||||
})
|
||||
|
||||
Convey("Loopback address", t, func() {
|
||||
|
||||
Reference in New Issue
Block a user