From a14fc55d55e32e9dc81c46a294f3a2f539f1798d Mon Sep 17 00:00:00 2001 From: Gabe Farrell Date: Thu, 12 Jun 2025 17:54:35 -0400 Subject: [PATCH] chore: better request logging, remove unused env --- engine/handlers/image_handler.go | 2 +- engine/handlers/replace_image.go | 1 + internal/catalog/images.go | 2 +- internal/cfg/cfg.go | 31 +++++++++++++++---------------- internal/images/deezer.go | 7 +++++-- internal/mbz/mbz.go | 10 +++++++--- 6 files changed, 30 insertions(+), 23 deletions(-) diff --git a/engine/handlers/image_handler.go b/engine/handlers/image_handler.go index 0ce5b81..6e67d40 100644 --- a/engine/handlers/image_handler.go +++ b/engine/handlers/image_handler.go @@ -105,7 +105,7 @@ func serveDefaultImage(w http.ResponseWriter, r *http.Request, size catalog.Imag defaultImagePath := filepath.Join(catalog.SourceImageDir(), "default_img") if _, err = os.Stat(defaultImagePath); os.IsNotExist(err) { l.Debug().Msg("Default image does not exist in cache, attempting to move...") - err = os.MkdirAll(filepath.Dir(defaultImagePath), 0755) + err = os.MkdirAll(filepath.Dir(defaultImagePath), 0744) if err != nil { l.Err(err).Msg("Error when attempting to create image_cache/full dir") w.WriteHeader(http.StatusInternalServerError) diff --git a/engine/handlers/replace_image.go b/engine/handlers/replace_image.go index 8a33e2f..007a3a0 100644 --- a/engine/handlers/replace_image.go +++ b/engine/handlers/replace_image.go @@ -69,6 +69,7 @@ func ReplaceImageHandler(store db.DB) http.HandlerFunc { l.Debug().Msg("Image identified as remote file") err = catalog.ValidateImageURL(fileUrl) if err != nil { + l.Debug().AnErr("error", err).Msg("Invalid image") utils.WriteError(w, "url is invalid or not an image file", http.StatusBadRequest) return } diff --git a/internal/catalog/images.go b/internal/catalog/images.go index d93ac46..1d6f421 100644 --- a/internal/catalog/images.go +++ b/internal/catalog/images.go @@ -133,7 +133,7 @@ func saveImage(filename string, size ImageSize, data io.Reader) error { cacheDir := filepath.Join(configDir, ImageCacheDir) // Ensure the cache directory exists - err := os.MkdirAll(filepath.Join(cacheDir, string(size)), os.ModePerm) + err := os.MkdirAll(filepath.Join(cacheDir, string(size)), 0744) if err != nil { return fmt.Errorf("failed to create full image cache directory: %w", err) } diff --git a/internal/cfg/cfg.go b/internal/cfg/cfg.go index 0e9fd29..9ead211 100644 --- a/internal/cfg/cfg.go +++ b/internal/cfg/cfg.go @@ -9,13 +9,13 @@ import ( ) const ( - defaultBaseUrl = "http://127.0.0.1" + // defaultBaseUrl = "http://127.0.0.1" defaultListenPort = 4110 defaultMusicBrainzUrl = "https://musicbrainz.org" ) const ( - BASE_URL_ENV = "KOITO_BASE_URL" + // BASE_URL_ENV = "KOITO_BASE_URL" DATABASE_URL_ENV = "KOITO_DATABASE_URL" BIND_ADDR_ENV = "KOITO_BIND_ADDR" LISTEN_PORT_ENV = "KOITO_LISTEN_PORT" @@ -26,7 +26,6 @@ const ( ENABLE_LBZ_RELAY_ENV = "KOITO_ENABLE_LBZ_RELAY" LBZ_RELAY_URL_ENV = "KOITO_LBZ_RELAY_URL" LBZ_RELAY_TOKEN_ENV = "KOITO_LBZ_RELAY_TOKEN" - LASTFM_API_KEY_ENV = "KOITO_LASTFM_API_KEY" CONFIG_DIR_ENV = "KOITO_CONFIG_DIR" DEFAULT_USERNAME_ENV = "KOITO_DEFAULT_USERNAME" DEFAULT_PASSWORD_ENV = "KOITO_DEFAULT_PASSWORD" @@ -40,10 +39,10 @@ const ( ) type config struct { - bindAddr string - listenPort int - configDir string - baseUrl string + bindAddr string + listenPort int + configDir string + // baseUrl string databaseUrl string musicBrainzUrl string logLevel int @@ -82,10 +81,10 @@ func Load(getenv func(string) string) error { // loadConfig loads the configuration from environment variables. func loadConfig(getenv func(string) string) (*config, error) { cfg := new(config) - cfg.baseUrl = getenv(BASE_URL_ENV) - if cfg.baseUrl == "" { - cfg.baseUrl = defaultBaseUrl - } + // cfg.baseUrl = getenv(BASE_URL_ENV) + // if cfg.baseUrl == "" { + // cfg.baseUrl = defaultBaseUrl + // } cfg.databaseUrl = getenv(DATABASE_URL_ENV) if cfg.databaseUrl == "" { return nil, errors.New("required parameter " + DATABASE_URL_ENV + " not provided") @@ -175,11 +174,11 @@ func ConfigDir() string { return globalConfig.configDir } -func BaseUrl() string { - lock.RLock() - defer lock.RUnlock() - return globalConfig.baseUrl -} +// func BaseUrl() string { +// lock.RLock() +// defer lock.RUnlock() +// return globalConfig.baseUrl +// } func DatabaseUrl() string { lock.RLock() diff --git a/internal/images/deezer.go b/internal/images/deezer.go index dfcd394..5ad1e77 100644 --- a/internal/images/deezer.go +++ b/internal/images/deezer.go @@ -71,6 +71,9 @@ func (c *DeezerClient) queue(ctx context.Context, req *http.Request) ([]byte, er l.Debug().Err(err).Str("url", req.RequestURI).Msg("Failed to contact ImageSrc") done <- queue.RequestResult{Err: err} return + } else if resp.StatusCode >= 300 || resp.StatusCode < 200 { + err = fmt.Errorf("recieved non-ok status from Deezer: %s", resp.Status) + done <- queue.RequestResult{Body: nil, Err: err} } defer resp.Body.Close() @@ -93,13 +96,13 @@ func (c *DeezerClient) getEntity(ctx context.Context, endpoint string, result an l.Debug().Msg("Adding ImageSrc request to queue") body, err := c.queue(ctx, req) if err != nil { - l.Debug().Err(err) + l.Err(err).Msg("Deezer request failed") return err } err = json.Unmarshal(body, result) if err != nil { - l.Debug().Err(err) + l.Err(err).Msg("Failed to unmarshal Deezer response") return err } diff --git a/internal/mbz/mbz.go b/internal/mbz/mbz.go index 873fd13..1be396a 100644 --- a/internal/mbz/mbz.go +++ b/internal/mbz/mbz.go @@ -51,18 +51,19 @@ func (c *MusicBrainzClient) getEntity(ctx context.Context, fmtStr string, id uui url := fmt.Sprintf(fmtStr, c.url, id.String()) req, err := http.NewRequest("GET", url, nil) if err != nil { + l.Err(err).Msg("Failed to build MusicBrainz request") return err } l.Debug().Msg("Adding MusicBrainz request to queue") body, err := c.queue(ctx, req) if err != nil { - l.Debug().Err(err) + l.Err(err).Msg("MusicBrainz request failed") return err } err = json.Unmarshal(body, result) if err != nil { - l.Debug().Err(err) + l.Err(err).Str("body", string(body)).Msg("Failed to unmarshal MusicBrainz response body") return err } @@ -77,9 +78,12 @@ func (c *MusicBrainzClient) queue(ctx context.Context, req *http.Request) ([]byt resultChan := c.requestQueue.Enqueue(func(client *http.Client, done chan<- queue.RequestResult) { resp, err := client.Do(req) if err != nil { - l.Debug().Err(err).Str("url", req.RequestURI).Msg("Failed to contact MusicBrainz") + l.Err(err).Str("url", req.RequestURI).Msg("Failed to contact MusicBrainz") done <- queue.RequestResult{Err: err} return + } else if resp.StatusCode >= 300 || resp.StatusCode < 200 { + err = fmt.Errorf("recieved non-ok status from MusicBrainz: %s", resp.Status) + done <- queue.RequestResult{Body: nil, Err: err} } defer resp.Body.Close()