fix: suppress context canceled logs
This commit is contained in:
@@ -46,7 +46,9 @@ func (h *Handler) HandleCatalog(w http.ResponseWriter, r *http.Request) {
|
||||
"User": user,
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
@@ -73,7 +75,9 @@ func (h *Handler) renderCatalogSection(w http.ResponseWriter, r *http.Request, s
|
||||
|
||||
data, err := h.service.GetCatalogSection(r.Context(), userID, section)
|
||||
if err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("catalog %s error: %v", section, err)
|
||||
}
|
||||
if section != "Continue" {
|
||||
writeInlineLoadError(w, "Failed to load "+section)
|
||||
}
|
||||
@@ -85,9 +89,11 @@ func (h *Handler) renderCatalogSection(w http.ResponseWriter, r *http.Request, s
|
||||
|
||||
// render section as htmx partial, not full page
|
||||
if err := templates.GetRenderer().ExecuteFragment(r.Context(), w, "index.gohtml", "catalog_section", data); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("fragment render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) HandleDiscover(w http.ResponseWriter, r *http.Request) {
|
||||
user := middleware.GetUser(r.Context())
|
||||
@@ -96,7 +102,9 @@ func (h *Handler) HandleDiscover(w http.ResponseWriter, r *http.Request) {
|
||||
"User": user,
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
@@ -122,7 +130,9 @@ func (h *Handler) renderDiscoverSection(w http.ResponseWriter, r *http.Request,
|
||||
|
||||
data, err := h.service.GetDiscoverSection(r.Context(), userID, section)
|
||||
if err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("discover %s error: %v", section, err)
|
||||
}
|
||||
writeInlineLoadError(w, "Failed to load "+section)
|
||||
return
|
||||
}
|
||||
@@ -131,9 +141,11 @@ func (h *Handler) renderDiscoverSection(w http.ResponseWriter, r *http.Request,
|
||||
data["Section"] = section
|
||||
|
||||
if err := templates.GetRenderer().ExecuteFragment(r.Context(), w, "discover.gohtml", "discover_section", data); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("fragment render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// HandleBrowse handles anime search/browse with filters. supports htmx partial loading.
|
||||
func (h *Handler) HandleBrowse(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -322,7 +334,9 @@ func (h *Handler) HandleAnimeDetails(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
if err := g.Wait(); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("anime details fetch error: %v", err)
|
||||
}
|
||||
renderNotFoundPage(r, w)
|
||||
return
|
||||
}
|
||||
@@ -335,7 +349,9 @@ func (h *Handler) HandleAnimeDetails(w http.ResponseWriter, r *http.Request) {
|
||||
"WatchlistIDs": watchlistIDs,
|
||||
"EpisodesCount": episodesCount,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
@@ -357,7 +373,9 @@ func (h *Handler) renderAnimeDetailsSection(w http.ResponseWriter, r *http.Reque
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("anime details %s error: %v", section, err)
|
||||
}
|
||||
writeInlineLoadError(w, "Failed to load "+section)
|
||||
return
|
||||
}
|
||||
@@ -369,9 +387,11 @@ func (h *Handler) renderAnimeDetailsSection(w http.ResponseWriter, r *http.Reque
|
||||
|
||||
// render htmx partial for the section
|
||||
if err := templates.GetRenderer().ExecuteFragment(ctx, w, "anime.gohtml", tplName, data); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("fragment render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) HandleHTMLWatchOrder(w http.ResponseWriter, r *http.Request) {
|
||||
animeIdStr := r.URL.Query().Get("animeId")
|
||||
@@ -383,7 +403,9 @@ func (h *Handler) HandleHTMLWatchOrder(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
relations, err := h.service.jikanClient.GetFullRelations(r.Context(), id)
|
||||
if err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("watch order error: %v", err)
|
||||
}
|
||||
http.Error(w, `<div class="mt-8 text-sm text-red-400">Failed to load watch order.</div>`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
@@ -402,9 +424,11 @@ func (h *Handler) HandleHTMLWatchOrder(w http.ResponseWriter, r *http.Request) {
|
||||
"AnimeID": id,
|
||||
"WatchlistMap": watchlistMap,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) HandleQuickSearch(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
@@ -418,11 +442,15 @@ func (h *Handler) HandleQuickSearch(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
res, err := h.service.jikanClient.SearchAdvanced(r.Context(), query, "", "", "", "", nil, true, 1, 5)
|
||||
if err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("quick search error: %v", err)
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
if err := writeJSON(w, []quickSearchResult{}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("quick search encode error: %v", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
output := make([]quickSearchResult, len(res.Animes))
|
||||
@@ -436,36 +464,46 @@ func (h *Handler) HandleQuickSearch(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
if err := writeJSON(w, output); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("quick search encode error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) HandleRandomAnime(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
anime, err := h.service.jikanClient.GetRandomAnime(r.Context())
|
||||
if err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("random anime error: %v", err)
|
||||
}
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
if err := writeJSON(w, map[string]string{"error": "Failed to fetch random anime"}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("random anime encode error: %v", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if anime.MalID == 0 {
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
if err := writeJSON(w, map[string]string{"error": "No anime found"}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("random anime encode error: %v", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
if err := writeJSON(w, map[string]any{"data": anime}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("random anime encode error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) HandleSearch(w http.ResponseWriter, r *http.Request) {
|
||||
renderNotFoundPage(r, w)
|
||||
@@ -476,7 +514,9 @@ func renderNotFoundPage(r *http.Request, w http.ResponseWriter) {
|
||||
if err := templates.GetRenderer().ExecuteTemplate(r.Context(), w, "not_found.gohtml", map[string]any{
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
@@ -20,9 +22,11 @@ func (h *Handler) HandleLoginPage(w http.ResponseWriter, r *http.Request) {
|
||||
if err := templates.GetRenderer().ExecuteTemplate(r.Context(), w, "login.gohtml", map[string]any{
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// HandleLogin validates credentials and creates a session on success
|
||||
func (h *Handler) HandleLogin(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -32,8 +36,10 @@ func (h *Handler) HandleLogin(w http.ResponseWriter, r *http.Request) {
|
||||
"Username": "",
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -46,8 +52,10 @@ func (h *Handler) HandleLogin(w http.ResponseWriter, r *http.Request) {
|
||||
"Username": username,
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -58,8 +66,10 @@ func (h *Handler) HandleLogin(w http.ResponseWriter, r *http.Request) {
|
||||
"Username": username,
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package playback
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
@@ -33,9 +35,11 @@ func renderNotFoundPage(r *http.Request, w http.ResponseWriter) {
|
||||
if err := templates.GetRenderer().ExecuteTemplate(r.Context(), w, "not_found.gohtml", map[string]any{
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// HandleWatchPage serves the anime watch page.
|
||||
func (h *Handler) HandleWatchPage(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -204,9 +208,11 @@ func (h *Handler) HandleWatchPage(w http.ResponseWriter, r *http.Request) {
|
||||
"WatchlistStatus": watchlistStatus,
|
||||
"Seasons": allSeasons,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// HandleProxy proxies media requests through the backend to avoid CORS and hide source URLs.
|
||||
func (h *Handler) HandleProxy(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -401,9 +407,11 @@ func (h *Handler) HandleEpisodeData(w http.ResponseWriter, r *http.Request) {
|
||||
"segments": watchData.Segments,
|
||||
"episode_title": "", // Find episode title if possible
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("watch page encode error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// HandleEpisodeThumbnails returns episode list for the thumbnail strip.
|
||||
func (h *Handler) HandleEpisodeThumbnails(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -462,9 +470,11 @@ func (h *Handler) HandleEpisodeThumbnails(w http.ResponseWriter, r *http.Request
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if err := writeJSON(w, results); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("thumbnails encode error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func writeJSON(w http.ResponseWriter, v any) error {
|
||||
return json.NewEncoder(w).Encode(v)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package watchlist
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
@@ -120,8 +122,10 @@ func (h *Handler) HandleGetWatchlist(w http.ResponseWriter, r *http.Request) {
|
||||
if err := templates.GetRenderer().ExecuteTemplate(r.Context(), w, "not_found.gohtml", map[string]any{
|
||||
"CurrentPath": r.URL.Path,
|
||||
}); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -163,6 +167,8 @@ func (h *Handler) HandleGetWatchlist(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
if err := templates.GetRenderer().ExecuteTemplate(r.Context(), w, templateName, data); err != nil {
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("render error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,8 +272,10 @@ func (c *Client) getWithCache(ctx context.Context, cacheKey string, ttl time.Dur
|
||||
return nil
|
||||
}
|
||||
}
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
log.Printf("jikan: stale cache unmarshal failed or empty, falling back to error: %v", err)
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user