Skip to content

Commit

Permalink
refactor: Refactor the logging approach
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Boutour <[email protected]>
  • Loading branch information
ViBiOh committed Jan 20, 2024
1 parent 289ed93 commit 9a80b3e
Show file tree
Hide file tree
Showing 28 changed files with 70 additions and 67 deletions.
2 changes: 1 addition & 1 deletion cmd/fibr/fibr.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ var content embed.FS
func newLoginService(tracerProvider trace.TracerProvider, basicConfig *basicMemory.Config) provider.Auth {
basicService, err := basicMemory.New(basicConfig)
if err != nil {
slog.Error("auth memory", "error", err)
slog.LogAttrs(context.Background(), slog.LevelError, "auth memory", slog.Any("error", err))
os.Exit(1)
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/crud/browse.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func (s Service) browse(ctx context.Context, request provider.Request, item abst
var err error
metadata, err = s.metadata.GetMetadataFor(ctx, item)
if err != nil && !absto.IsNotExist(err) {
slog.ErrorContext(ctx, "load metadata", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "load metadata", slog.String("item", item.Pathname), slog.Any("error", err))
}
})

Expand Down Expand Up @@ -73,7 +73,7 @@ func (s Service) getFilesPreviousAndNext(ctx context.Context, item absto.Item, r
var err error
items, err = s.storage.List(ctx, item.Dir())
if err != nil {
slog.ErrorContext(ctx, "list neighbors files", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "list neighbors files", slog.String("item", item.Pathname), slog.Any("error", err))
return
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/crud/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ func (s Service) listFiles(r *http.Request, request provider.Request, item absto
if request.IsStory() {
thumbnails, err := s.thumbnail.ListDirLarge(ctx, item)
if err != nil {
slog.Error("list large thumbnails", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "list large thumbnails", slog.String("item", item.Pathname), slog.Any("error", err))
}

storyItems := items[:0]
Expand Down Expand Up @@ -200,7 +200,7 @@ func (s Service) serveGeoJSON(w http.ResponseWriter, r *http.Request, request pr
if query.GetBool(r, "search") {
hash = s.exifHash(ctx, items)
} else if exifs, err := s.metadata.ListDir(ctx, item); err != nil {
slog.ErrorContext(ctx, "list exifs", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "list exifs", slog.String("item", item.Pathname), slog.Any("error", err))
} else {
hash = provider.RawHash(exifs)
}
Expand Down Expand Up @@ -271,7 +271,7 @@ func (s Service) generateGeoJSON(ctx context.Context, w io.Writer, request provi
feature.Properties["date"] = exif.Date.Format(time.RFC850)

if err := encoder.Encode(feature); err != nil {
slog.ErrorContext(ctx, "encode feature", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "encode feature", slog.String("item", item.Pathname), slog.Any("error", err))
}
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/crud/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ func (s Service) Download(w http.ResponseWriter, r *http.Request, request provid

defer func() {
if closeErr := zipWriter.Close(); closeErr != nil {
slog.ErrorContext(ctx, "close zip", "error", closeErr)
slog.LogAttrs(ctx, slog.LevelError, "close zip", slog.Any("error", closeErr))
}
}()

Expand Down
2 changes: 1 addition & 1 deletion pkg/crud/regenerate.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (s Service) regenerate(w http.ResponseWriter, r *http.Request, request prov
return nil
})
if err != nil {
slog.ErrorContext(ctx, "regenerate", "error", err, "pathname", pathname)
slog.LogAttrs(ctx, slog.LevelError, "regenerate", slog.String("pathname", pathname), slog.Any("error", err))
}

for _, directory := range directories {
Expand Down
4 changes: 2 additions & 2 deletions pkg/crud/story.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func (s Service) story(r *http.Request, request provider.Request, item absto.Ite

directoryAggregate, err = s.metadata.GetAggregateFor(ctx, item)
if err != nil && !absto.IsNotExist(err) {
slog.ErrorContext(ctx, "get aggregate", "error", err, "fn", "crud.story", "item", request.Path)
slog.LogAttrs(ctx, slog.LevelError, "get aggregate", slog.String("fn", "crud.story"), slog.String("item", request.Path), slog.Any("error", err))
}
})

Expand All @@ -40,7 +40,7 @@ func (s Service) story(r *http.Request, request provider.Request, item absto.Ite

exifs, err = s.metadata.GetAllMetadataFor(ctx, files...)
if err != nil {
slog.ErrorContext(ctx, "list exifs", "error", err, "item", request.Path, "fn", "crud.story")
slog.LogAttrs(ctx, slog.LevelError, "list exifs", slog.String("fn", "crud.story"), slog.String("item", request.Path), slog.Any("error", err))
}
})

Expand Down
2 changes: 1 addition & 1 deletion pkg/crud/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func (s Service) saveUploadedFile(ctx context.Context, request provider.Request,
if err == nil {
go func(ctx context.Context) {
if info, infoErr := s.storage.Stat(ctx, filePath); infoErr != nil {
slog.ErrorContext(ctx, "get info for upload event", "error", infoErr)
slog.LogAttrs(ctx, slog.LevelError, "get info for upload event", slog.Any("error", infoErr))
} else {
s.pushEvent(ctx, provider.NewUploadEvent(ctx, request, info, s.bestSharePath(filePath), s.renderer))
}
Expand Down
14 changes: 7 additions & 7 deletions pkg/crud/upload_chunk.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ func (s Service) uploadChunk(w http.ResponseWriter, r *http.Request, request pro

defer func() {
if closeErr := writer.Close(); closeErr != nil {
slog.ErrorContext(r.Context(), "close chunk writer", "error", closeErr)
slog.LogAttrs(r.Context(), slog.LevelError, "close chunk writer", slog.Any("error", closeErr))
}

if err == nil {
return
}

if removeErr := os.Remove(tempFile); removeErr != nil {
slog.ErrorContext(r.Context(), "remove chunk file", "error", removeErr, "file", tempFile)
slog.LogAttrs(r.Context(), slog.LevelError, "remove chunk file", slog.String("file", tempFile), slog.Any("error", removeErr))
}
}()

Expand Down Expand Up @@ -113,14 +113,14 @@ func (s Service) mergeChunk(w http.ResponseWriter, r *http.Request, request prov

go func(ctx context.Context) {
if info, infoErr := s.storage.Stat(ctx, filePath); infoErr != nil {
slog.ErrorContext(ctx, "get info for upload event", "error", infoErr)
slog.LogAttrs(ctx, slog.LevelError, "get info for upload event", slog.Any("error", infoErr))
} else {
s.pushEvent(ctx, provider.NewUploadEvent(ctx, request, info, s.bestSharePath(filePath), s.renderer))
}
}(cntxt.WithoutDeadline(ctx))

if err = os.RemoveAll(tempFolder); err != nil {
slog.ErrorContext(ctx, "delete chunk folder", "error", err, "folder", tempFolder)
slog.LogAttrs(ctx, slog.LevelError, "delete chunk folder", slog.String("folder", tempFolder), slog.Any("error", err))
}

s.postUpload(w, r, request, fileName)
Expand All @@ -134,15 +134,15 @@ func (s Service) mergeChunkFiles(ctx context.Context, directory, destination str

defer func() {
if closeErr := writer.Close(); closeErr != nil {
slog.ErrorContext(ctx, "close chunk's destination", "error", closeErr)
slog.LogAttrs(ctx, slog.LevelError, "close chunk's destination", slog.Any("error", closeErr))
}

if err == nil {
return
}

if removeErr := os.Remove(destination); removeErr != nil {
slog.ErrorContext(ctx, "remove chunk's destination", "error", removeErr, "destination", destination)
slog.LogAttrs(ctx, slog.LevelError, "remove chunk's destination", slog.String("destination", destination), slog.Any("error", removeErr))
}
}()

Expand Down Expand Up @@ -170,7 +170,7 @@ func browseChunkFiles(ctx context.Context, directory, destination string, writer

defer func() {
if closeErr := reader.Close(); closeErr != nil {
slog.ErrorContext(ctx, "close chunk", "error", err, "path", path)
slog.LogAttrs(ctx, slog.LevelError, "close chunk", slog.String("path", path), slog.Any("error", err))
}
}()

Expand Down
2 changes: 1 addition & 1 deletion pkg/metadata/amqp.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func (s Service) AMQPHandler(ctx context.Context, message amqp.Delivery) error {
}

if resp.Exif.IsZero() {
slog.DebugContext(ctx, "no exif", "item", resp.Item.Pathname)
slog.LogAttrs(ctx, slog.LevelDebug, "no exif", slog.String("item", resp.Item.Pathname))
return nil
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/metadata/date.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (

func (s Service) updateDate(ctx context.Context, item absto.Item, data provider.Metadata) error {
if data.Date.IsZero() || item.Date.Equal(data.Date) {
slog.DebugContext(ctx, "no exif date or already equal", "item", item.Pathname, "item_date", item.Date.String(), "exif_date", data.Date.String())
slog.LogAttrs(ctx, slog.LevelDebug, "no exif date or already equal", slog.String("item", item.Pathname), slog.Time("item_date", item.Date), slog.Time("exif_date", data.Date))
return nil
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/metadata/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func (s Service) handleStartEvent(ctx context.Context, event provider.Event) err

if event.GetMetadata("force") == "cache" {
if err := s.redisClient.Delete(ctx, redisKey(event.Item)); err != nil {
slog.ErrorContext(ctx, "flush cache", "error", err, "fn", "exif.startEvent", "item", event.Item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "flush cache", slog.String("fn", "exif.startEvent"), slog.String("item", event.Item.Pathname), slog.Any("error", err))
}

if !forced {
Expand All @@ -81,7 +81,7 @@ func (s Service) handleStartEvent(ctx context.Context, event provider.Event) err

item := event.Item
if !forced && s.hasMetadata(cache.Bypass(ctx), item) {
slog.DebugContext(ctx, "has metadata", "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelDebug, "has metadata", slog.String("item", item.Pathname))
return nil
}

Expand All @@ -98,7 +98,7 @@ func (s Service) handleStartEvent(ctx context.Context, event provider.Event) err

func (s Service) handleUploadEvent(ctx context.Context, item absto.Item, aggregate bool) error {
if !s.CanHaveExif(item) {
slog.DebugContext(ctx, "can't have exif", "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelDebug, "can't have exif", slog.String("item", item.Pathname))
return nil
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/metadata/exif.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,12 @@ func New(ctx context.Context, config *Config, storageService absto.Storage, mete

service.exifMetric, err = meter.Int64Counter("fibr.exif")
if err != nil {
slog.ErrorContext(ctx, "create exif counter", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "create exif counter", slog.Any("error", err))
}

service.aggregateMetric, err = meter.Int64Counter("fibr.aggregate")
if err != nil {
slog.ErrorContext(ctx, "create aggregate counter", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "create aggregate counter", slog.Any("error", err))
}
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/metadata/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func (s Service) Update(ctx context.Context, item absto.Item, opts ...provider.M

metadata, err := s.GetMetadataFor(ctx, item)
if err != nil && !absto.IsNotExist(err) {
slog.ErrorContext(ctx, "load metadata", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "load metadata", slog.String("item", item.Pathname), slog.Any("error", err))
}

for _, opt := range opts {
Expand Down
8 changes: 4 additions & 4 deletions pkg/provider/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ func (e EventBus) Start(ctx context.Context, storageService absto.Storage, renam

func RenameDirectory(ctx context.Context, storageService absto.Storage, renamers []Renamer, old, new absto.Item) {
if err := storageService.Mkdir(ctx, MetadataDirectory(new), absto.DirectoryPerm); err != nil {
slog.ErrorContext(ctx, "create new metadata directory", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "create new metadata directory", slog.Any("error", err))
return
}

Expand All @@ -364,17 +364,17 @@ func RenameDirectory(ctx context.Context, storageService absto.Storage, renamers

for _, renamer := range renamers {
if err := renamer(ctx, oldItem, item); err != nil {
slog.ErrorContext(ctx, "rename metadata", "error", err, "old", oldItem.Pathname, "new", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "rename metadata", slog.String("old", oldItem.Pathname), slog.String("new", item.Pathname), slog.Any("error", err))
}
}

return nil
}); err != nil {
slog.ErrorContext(ctx, "walk new metadata directory", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "walk new metadata directory", slog.Any("error", err))
}

if err := storageService.RemoveAll(ctx, MetadataDirectory(old)); err != nil {
slog.ErrorContext(ctx, "delete old metadata directory", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "delete old metadata directory", slog.Any("error", err))
return
}
}
2 changes: 1 addition & 1 deletion pkg/provider/share.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func (s Share) CheckPassword(ctx context.Context, authorizationHeader string, sh
default:
if bcrypt.CompareHashAndPassword([]byte(s.Password), []byte(password)) == nil {
if err := shareApp.UpdatePassword(ctx, s.ID, password); err != nil {
slog.ErrorContext(ctx, "update password", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "update password", slog.Any("error", err))
}

return nil
Expand Down
4 changes: 2 additions & 2 deletions pkg/provider/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ func SanitizeName(name string, removeSlash bool) (string, error) {

func SafeWrite(ctx context.Context, w io.Writer, content string) {
if _, err := io.WriteString(w, content); err != nil {
slog.ErrorContext(ctx, "write content", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "write content", slog.Any("error", err))
}
}

Expand Down Expand Up @@ -165,7 +165,7 @@ func SendLargeFile(ctx context.Context, storageService absto.Storage, item absto

func LogClose(ctx context.Context, closer io.Closer, fn, item string) {
if err := closer.Close(); err != nil {
slog.ErrorContext(ctx, "close", "error", err, "fn", fn, "item", item)
slog.LogAttrs(ctx, slog.LevelError, "close", slog.String("fn", fn), slog.String("item", item), slog.Any("error", err))
}
}

Expand Down
10 changes: 5 additions & 5 deletions pkg/sanitizer/sanitizer.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func (s Service) Start(ctx context.Context) {
if err := s.exclusive.Execute(ctx, "fibr:mutex:start", time.Hour, func(ctx context.Context) error {
return s.start(ctx)
}); err != nil {
slog.ErrorContext(ctx, "start", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "start", slog.Any("error", err))
}
}

Expand Down Expand Up @@ -102,7 +102,7 @@ func (s Service) start(ctx context.Context) error {
func (s Service) sanitizeName(ctx context.Context, item absto.Item) absto.Item {
name, err := provider.SanitizeName(item.Pathname, false)
if err != nil {
slog.ErrorContext(ctx, "sanitize name", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "sanitize name", slog.String("item", item.Pathname), slog.Any("error", err))
return item
}

Expand All @@ -111,15 +111,15 @@ func (s Service) sanitizeName(ctx context.Context, item absto.Item) absto.Item {
}

if !s.sanitizeOnStart {
slog.InfoContext(ctx, "File should be renamed", "pathname", item.Pathname, "name", name)
slog.LogAttrs(ctx, slog.LevelInfo, "File should be renamed", slog.String("pathname", item.Pathname), slog.String("name", name))
return item
}

slog.InfoContext(ctx, "Renaming...", "pathname", item.Pathname, "name", name)
slog.LogAttrs(ctx, slog.LevelInfo, "Renaming...", slog.String("pathname", item.Pathname), slog.String("name", name))

renamedItem, err := s.renamer.DoRename(ctx, item.Pathname, name, item)
if err != nil {
slog.ErrorContext(ctx, "rename", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "rename", slog.Any("error", err))
return item
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/search/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (s Service) Files(r *http.Request, request provider.Request) (items []absto
if hasTags {
metadata, err := s.exif.GetMetadataFor(ctx, item)
if err != nil {
slog.ErrorContext(ctx, "get metadata", "error", err, "item", item.Pathname)
slog.LogAttrs(ctx, slog.LevelError, "get metadata", slog.String("item", item.Pathname), slog.Any("error", err))
}

if !criterions.matchTags(metadata) {
Expand Down
4 changes: 2 additions & 2 deletions pkg/share/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ func (s *Service) EventConsumer(ctx context.Context, e provider.Event) {
switch e.Type {
case provider.RenameEvent:
if err := s.renameItem(ctx, e.Item, *e.New); err != nil {
slog.ErrorContext(ctx, "rename share", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "rename share", slog.Any("error", err))
}
case provider.DeleteEvent:
if err := s.deleteItem(ctx, e.Item); err != nil {
slog.ErrorContext(ctx, "delete share", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "delete share", slog.Any("error", err))
}
}
}
Expand Down
5 changes: 3 additions & 2 deletions pkg/share/pubsub.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package share

import (
"context"
"log/slog"

"github.com/ViBiOh/fibr/pkg/provider"
)

func (s *Service) PubSubHandle(share provider.Share, err error) {
if err != nil {
slog.Error("Share's PubSub", "error", err)
slog.LogAttrs(context.Background(), slog.LevelError, "Share's PubSub", slog.Any("error", err))
return
}

s.mutex.Lock()
defer s.mutex.Unlock()

slog.Info("Share's PubSub", "id", share.ID)
slog.LogAttrs(context.Background(), slog.LevelInfo, "Share's PubSub", slog.String("id", share.ID))

if share.Creation.IsZero() {
delete(s.shares, share.ID)
Expand Down
6 changes: 3 additions & 3 deletions pkg/share/share.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,14 @@ func (s *Service) Start(ctx context.Context) {
defer close(s.done)

if err := s.loadShares(ctx); err != nil {
slog.ErrorContext(ctx, "refresh shares", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "refresh shares", slog.Any("error", err))
return
}

go redis.SubscribeFor(ctx, s.redisClient, s.pubsubChannel, s.PubSubHandle)

purgeCron := cron.New().Each(time.Hour).OnError(func(ctx context.Context, err error) {
slog.ErrorContext(ctx, "purge shares", "error", err)
slog.LogAttrs(ctx, slog.LevelError, "purge shares", slog.Any("error", err))
}).OnSignal(syscall.SIGUSR1)

if s.redisClient.Enabled() {
Expand Down Expand Up @@ -146,7 +146,7 @@ func (s *Service) purgeExpiredShares(ctx context.Context) bool {
delete(s.shares, id)

if err := s.redisClient.PublishJSON(ctx, s.pubsubChannel, provider.Share{ID: id}); err != nil {
slog.ErrorContext(ctx, "publish share purge", "error", err, "item", id, "fn", "share.purgeExpiredShares")
slog.LogAttrs(ctx, slog.LevelError, "publish share purge", slog.String("fn", "share.purgeExpiredShares"), slog.String("item", id), slog.Any("error", err))
}

changed = true
Expand Down
Loading

0 comments on commit 9a80b3e

Please sign in to comment.