Clean: Shorten error log sanitization function name #439 #3588

Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
Michael Mayer 2023-08-15 17:05:55 +02:00
parent 3212724aae
commit 91cc358fc5
11 changed files with 55 additions and 45 deletions

View file

@ -23,7 +23,7 @@ func Error(c *gin.Context, code int, err error, id i18n.Message, params ...inter
if err != nil {
resp.Details = err.Error()
log.Errorf("api-v1: error %s with code %d in %s (%s)", clean.LogError(err), code, clean.Log(c.FullPath()), strings.ToLower(resp.String()))
log.Errorf("api-v1: error %s with code %d in %s (%s)", clean.Error(err), code, clean.Log(c.FullPath()), strings.ToLower(resp.String()))
}
c.AbortWithStatusJSON(code, resp)

View file

@ -180,7 +180,7 @@ func (imp *Import) Start(opt ImportOptions) fs.Done {
// Create JSON sidecar file, if needed.
if err = mf.CreateExifToolJson(imp.convert); err != nil {
log.Errorf("import: %s", clean.LogError(err), clean.Log(mf.BaseName()))
log.Errorf("import: %s", clean.Error(err), clean.Log(mf.BaseName()))
}
// Find related files to import.

View file

@ -220,7 +220,7 @@ func ImportWorker(jobs <-chan ImportJob) {
// Extract metadata to a JSON file with Exiftool.
if f.NeedsExifToolJson() {
if jsonName, err := imp.convert.ToJson(f, false); err != nil {
log.Tracef("exiftool: %s", clean.LogError(err))
log.Tracef("exiftool: %s", clean.Error(err))
log.Debugf("exiftool: failed parsing %s", clean.Log(f.RootRelName()))
} else {
log.Debugf("import: created %s", filepath.Base(jsonName))

View file

@ -221,7 +221,7 @@ func (ind *Index) Start(o IndexOptions) (found fs.Done, updated int) {
// Create JSON sidecar file, if needed.
if err = mf.CreateExifToolJson(ind.convert); err != nil {
log.Errorf("index: %s", clean.LogError(err), clean.Log(mf.BaseName()))
log.Errorf("index: %s", clean.Error(err), clean.Log(mf.BaseName()))
}
// Find related files to index.

View file

@ -58,10 +58,10 @@ func (m *MediaFile) CreateExifToolJson(convert *Convert) error {
if !m.NeedsExifToolJson() {
return nil
} else if jsonName, err := convert.ToJson(m, false); err != nil {
log.Tracef("exiftool: %s", clean.LogError(err))
log.Tracef("exiftool: %s", clean.Error(err))
log.Debugf("exiftool: failed parsing %s", clean.Log(m.RootRelName()))
} else if err = m.metaData.JSON(jsonName, ""); err != nil {
return fmt.Errorf("%s in %s (read json sidecar)", clean.LogError(err), clean.Log(m.BaseName()))
return fmt.Errorf("%s in %s (read json sidecar)", clean.Error(err), clean.Log(m.BaseName()))
}
return nil

View file

@ -221,7 +221,7 @@ func (c *Client) Upload(src, dest string) (err error) {
f, err := os.OpenFile(src, os.O_RDONLY, 0)
if err != nil {
log.Errorf("webdav: %s", clean.LogError(err))
log.Errorf("webdav: %s", clean.Error(err))
return fmt.Errorf("webdav: failed to read %s", clean.Log(path.Base(src)))
}
@ -232,14 +232,14 @@ func (c *Client) Upload(src, dest string) (err error) {
writer, err = c.client.Create(dest)
if err != nil {
log.Errorf("webdav: %s", clean.LogError(err))
log.Errorf("webdav: %s", clean.Error(err))
return fmt.Errorf("webdav: failed to write %s", clean.Log(dest))
}
defer writer.Close()
if _, err = io.Copy(writer, f); err != nil {
log.Errorf("webdav: %s", clean.LogError(err))
log.Errorf("webdav: %s", clean.Error(err))
return fmt.Errorf("webdav: failed to upload %s", clean.Log(dest))
}
@ -281,7 +281,7 @@ func (c *Client) Download(src, dest string, force bool) (err error) {
// Error?
if err != nil {
log.Errorf("webdav: %s", clean.LogError(err))
log.Errorf("webdav: %s", clean.Error(err))
return fmt.Errorf("webdav: failed to download %s", clean.Log(src))
}
@ -290,14 +290,14 @@ func (c *Client) Download(src, dest string, force bool) (err error) {
f, err := os.OpenFile(dest, os.O_TRUNC|os.O_RDWR|os.O_CREATE, fs.ModeFile)
if err != nil {
log.Errorf("webdav: %s", clean.LogError(err))
log.Errorf("webdav: %s", clean.Error(err))
return fmt.Errorf("webdav: failed to create %s", clean.Log(path.Base(dest)))
}
defer f.Close()
if _, err = f.ReadFrom(reader); err != nil {
log.Errorf("webdav: %s", clean.LogError(err))
log.Errorf("webdav: %s", clean.Error(err))
return fmt.Errorf("webdav: failed writing to %s", clean.Log(path.Base(dest)))
}

View file

@ -65,11 +65,11 @@ func WebDAV(filePath string, router *gin.RouterGroup, conf *config.Config) {
if err != nil {
switch r.Method {
case MethodPut, MethodPost, MethodPatch, MethodDelete, MethodCopy, MethodMove:
log.Errorf("webdav: %s in %s %s", clean.LogError(err), clean.Log(r.Method), clean.Log(r.URL.String()))
log.Errorf("webdav: %s in %s %s", clean.Error(err), clean.Log(r.Method), clean.Log(r.URL.String()))
case MethodPropfind:
log.Tracef("webdav: %s in %s %s", clean.LogError(err), clean.Log(r.Method), clean.Log(r.URL.String()))
log.Tracef("webdav: %s in %s %s", clean.Error(err), clean.Log(r.Method), clean.Log(r.URL.String()))
default:
log.Debugf("webdav: %s in %s %s", clean.LogError(err), clean.Log(r.Method), clean.Log(r.URL.String()))
log.Debugf("webdav: %s in %s %s", clean.Error(err), clean.Log(r.Method), clean.Log(r.URL.String()))
}
} else {
// Mark uploaded files as favorite if X-Favorite HTTP header is "1".

14
pkg/clean/error.go Normal file
View file

@ -0,0 +1,14 @@
package clean
import "strings"
// Error sanitizes an error message so that it can be safely logged or displayed.
func Error(err error) string {
if err == nil {
return "no error"
} else if s := strings.TrimSpace(err.Error()); s == "" {
return "unknown error"
} else {
return Log(s)
}
}

26
pkg/clean/error_test.go Normal file
View file

@ -0,0 +1,26 @@
package clean
import (
"errors"
"testing"
"github.com/stretchr/testify/assert"
)
func TestLogError(t *testing.T) {
t.Run("Nil", func(t *testing.T) {
assert.Equal(t, "no error", Error(nil))
})
t.Run("Empty", func(t *testing.T) {
assert.Equal(t, "unknown error", Error(errors.New("")))
})
t.Run("Simple", func(t *testing.T) {
assert.Equal(t, "simple", Error(errors.New("simple")))
})
t.Run("Spaces", func(t *testing.T) {
assert.Equal(t, "'the quick brown fox'", Error(errors.New("the quick brown fox")))
})
t.Run("Invalid", func(t *testing.T) {
assert.Equal(t, "?", Error(errors.New("${https://<host>:<port>/<path>}")))
})
}

View file

@ -42,17 +42,6 @@ func Log(s string) string {
return s
}
// LogError sanitizes an error message for use in logging.
func LogError(err error) string {
if err == nil {
return "no error"
} else if s := strings.TrimSpace(err.Error()); s == "" {
return "unknown error"
} else {
return Log(s)
}
}
// LogQuote sanitizes a string and puts it in single quotes for logging.
func LogQuote(s string) string {
if s = Log(s); s[0] != '\'' {

View file

@ -1,7 +1,6 @@
package clean
import (
"errors"
"testing"
"github.com/stretchr/testify/assert"
@ -28,24 +27,6 @@ func TestLog(t *testing.T) {
})
}
func TestLogError(t *testing.T) {
t.Run("Nil", func(t *testing.T) {
assert.Equal(t, "no error", LogError(nil))
})
t.Run("Empty", func(t *testing.T) {
assert.Equal(t, "unknown error", LogError(errors.New("")))
})
t.Run("Simple", func(t *testing.T) {
assert.Equal(t, "simple", LogError(errors.New("simple")))
})
t.Run("Spaces", func(t *testing.T) {
assert.Equal(t, "'the quick brown fox'", LogError(errors.New("the quick brown fox")))
})
t.Run("Invalid", func(t *testing.T) {
assert.Equal(t, "?", LogError(errors.New("${https://<host>:<port>/<path>}")))
})
}
func TestLogQuote(t *testing.T) {
t.Run("The quick brown fox.", func(t *testing.T) {
assert.Equal(t, "'The quick brown fox.'", LogQuote("The quick brown fox."))