diff options
Diffstat (limited to 'internal/api')
| -rw-r--r-- | internal/api/handlers.go | 10 | ||||
| -rw-r--r-- | internal/api/handlers_media.go | 5 | ||||
| -rw-r--r-- | internal/api/server.go | 23 |
3 files changed, 30 insertions, 8 deletions
diff --git a/internal/api/handlers.go b/internal/api/handlers.go index 911b694..8da7a9f 100644 --- a/internal/api/handlers.go +++ b/internal/api/handlers.go @@ -111,7 +111,7 @@ func (s *Server) serveDetach(w http.ResponseWriter, r *http.Request) { func (s *Server) serveFileResult(w http.ResponseWriter, r *http.Request, res *service.FileResult, attachment bool) { f, err := os.Open(res.Path) if err != nil { - fmt.Printf("[api] stream file=%s error=open_failed\n", res.FileName) + s.logger.Warn("api stream open failed", "file", res.FileName, "err", err) http.Error(w, "not found", http.StatusNotFound) return } @@ -119,7 +119,7 @@ func (s *Server) serveFileResult(w http.ResponseWriter, r *http.Request, res *se stat, err := f.Stat() if err != nil { - fmt.Printf("[api] stream file=%s error=stat_failed\n", res.FileName) + s.logger.Warn("api stream stat failed", "file", res.FileName, "err", err) http.Error(w, "not found", http.StatusNotFound) return } @@ -137,15 +137,15 @@ func (s *Server) serveFileResult(w http.ResponseWriter, r *http.Request, res *se // needing to sniff, which avoids buffering delays during streaming. w.Header().Set("Content-Type", probe.MimeTypeForFilename(res.FileName)) w.Header().Set("Accept-Ranges", "bytes") - fmt.Printf("[api] stream file=%s size=%d bytes range=%s\n", res.FileName, stat.Size(), r.Header.Get("Range")) + s.logger.Info("api stream file", "file", res.FileName, "size", stat.Size(), "range", r.Header.Get("Range")) http.ServeContent(w, r, res.FileName, stat.ModTime(), f) } func (s *Server) serveRemuxedMP4(w http.ResponseWriter, r *http.Request, res *service.FileResult, size int64) { w.Header().Set("Content-Type", "video/mp4") w.Header().Set("Cache-Control", "no-store") - fmt.Printf("[api] remux stream file=%s size=%d bytes range=%s\n", res.FileName, size, r.Header.Get("Range")) + s.logger.Info("api remux stream file", "file", res.FileName, "size", size, "range", r.Header.Get("Range")) if err := s.remuxer.Remux(r.Context(), res.Path, w); err != nil { - slog.Error("remux media", "file", res.FileName, "err", err) + s.logger.Error("remux media", "file", res.FileName, "err", err) } } diff --git a/internal/api/handlers_media.go b/internal/api/handlers_media.go index afb9685..20e44ab 100644 --- a/internal/api/handlers_media.go +++ b/internal/api/handlers_media.go @@ -2,7 +2,6 @@ package api import ( "errors" - "fmt" "net/http" "net/url" "strconv" @@ -240,11 +239,11 @@ func (s *Server) handleListMedia(w http.ResponseWriter, r *http.Request) { media, err := s.mediaSvc.ListMedia(r.Context(), userIDFromContext(r), filter) dur := time.Since(start) if err != nil { - fmt.Printf("[api] %s set_id=%s set_ids=%s search=%q type=%s fav=%s min=%s max=%s error=%v (took %s)\n", path, setID, setIDs, search, typ, fav, minDur, maxDur, err, dur) + s.logger.Error("api list media failed", "path", path, "set_id", setID, "set_ids", setIDs, "search", search, "type", typ, "favorites", fav, "min_duration", minDur, "max_duration", maxDur, "duration", dur, "err", err) writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } - fmt.Printf("[api] %s set_id=%s set_ids=%s search=%q type=%s fav=%s min=%s max=%s returned=%d (took %s)\n", path, setID, setIDs, search, typ, fav, minDur, maxDur, len(media), dur) + s.logger.Info("api list media", "path", path, "set_id", setID, "set_ids", setIDs, "search", search, "type", typ, "favorites", fav, "min_duration", minDur, "max_duration", maxDur, "returned", len(media), "duration", dur) writeJSON(w, http.StatusOK, media) } diff --git a/internal/api/server.go b/internal/api/server.go index e5fdd8d..f934a56 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -2,6 +2,7 @@ package api import ( "context" + "log/slog" "net/http" "strconv" "time" @@ -26,6 +27,7 @@ type Server struct { authSvc service.AuthService staticFS http.FileSystem remuxer probe.Remuxer + logger *slog.Logger mw *Middleware } @@ -43,9 +45,29 @@ func NewServer( staticFS http.FileSystem, remuxer probe.Remuxer, ) *Server { + return NewServerWithLogger(store, hasher, sm, cfg, mediaSvc, adminSvc, progressSvc, authSvc, staticFS, remuxer, slog.Default()) +} + +// NewServerWithLogger creates a Server with routes and an injected logger. +func NewServerWithLogger( + store repository.Store, + hasher auth.Hasher, + sm *auth.SessionManager, + cfg *internal.Config, + mediaSvc service.MediaService, + adminSvc service.AdminService, + progressSvc service.ProgressService, + authSvc service.AuthService, + staticFS http.FileSystem, + remuxer probe.Remuxer, + logger *slog.Logger, +) *Server { if staticFS == nil { staticFS = http.Dir("web") } + if logger == nil { + logger = slog.Default() + } s := &Server{ store: store, hasher: hasher, @@ -58,6 +80,7 @@ func NewServer( authSvc: authSvc, staticFS: staticFS, remuxer: remuxer, + logger: logger, mw: NewMiddleware(store, sm), } s.routes() |
