summaryrefslogtreecommitdiff
path: root/internal/api
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api')
-rw-r--r--internal/api/handlers.go10
-rw-r--r--internal/api/handlers_media.go5
-rw-r--r--internal/api/server.go23
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()