nsfwapp/backend/log_policy.go
2026-02-12 11:33:21 +01:00

100 lines
2.8 KiB
Go

// backend/log_policy.go
package main
import (
"context"
"errors"
"os"
"strings"
)
// Optional: Verbose nur wenn du es explizit willst (z.B. beim Debuggen)
func verboseLogs() bool {
return os.Getenv("REC_VERBOSE") == "1"
}
func shouldLogRecordError(err error, provider string, req RecordRequest) bool {
if err == nil {
return false
}
// "STOP" / Cancel ist normal -> kein Fehlerlog
if errors.Is(err, context.Canceled) {
return false
}
msg := strings.ToLower(err.Error())
// --- Chaturbate: Cookie/Auth/CF-Probleme IMMER loggen (auch bei Hidden) ---
if provider == "chaturbate" {
// deine explizite Cookie-Fehlermeldung
if strings.Contains(msg, "cf_clearance") && strings.Contains(msg, "cookie") {
return true
}
// typische Auth/CF/Blocker-Indikatoren
if strings.Contains(msg, "403") || strings.Contains(msg, "401") ||
strings.Contains(msg, "cloudflare") || strings.Contains(msg, "cf") ||
strings.Contains(msg, "captcha") || strings.Contains(msg, "forbidden") {
return true
}
}
// --- harte Config/IO-Fehler (immer loggen) ---
if strings.Contains(msg, "recorddir") ||
strings.Contains(msg, "auflösung fehlgeschlagen") ||
strings.Contains(msg, "permission") ||
strings.Contains(msg, "access is denied") ||
strings.Contains(msg, "read-only") {
return true
}
// --- erwartbare "Provider/Offline"-Situationen: NIE loggen ---
// unsupported provider
if strings.Contains(msg, "unsupported provider") {
return false
}
// Chaturbate offline/parse/watch-segments end
if strings.Contains(msg, "kein hls") ||
strings.Contains(msg, "room dossier") ||
strings.Contains(msg, "keine neuen hls-segmente") ||
strings.Contains(msg, "playlist nicht mehr erreichbar") ||
strings.Contains(msg, "möglicherweise offline") ||
strings.Contains(msg, "stream vermutlich offline") {
return false
}
// MFC: "nicht public"/offline/private/not exist
if strings.Contains(msg, "mfc: stream wurde nicht public") ||
strings.Contains(msg, "mfc: stream ist nicht public") ||
strings.Contains(msg, "stream ist nicht öffentlich") ||
strings.Contains(msg, "status: offline") ||
strings.Contains(msg, "status: private") ||
strings.Contains(msg, "status: notexist") {
return false
}
// ffmpeg-Fehler:
// - bei Hidden (Autostart/Auto-Checks) meist "offline/kurzlebig" => stumm
// - bei manuell gestarteten Jobs sinnvoll => loggen
if strings.Contains(msg, "ffmpeg") {
if req.Hidden {
return false
}
return true
}
// Default:
// - Hidden-Jobs sollen ruhig sein
// - manuelle Jobs dürfen Fehler loggen (aber keine "offline"/"expected" s.o.)
return !req.Hidden
}
func shouldLogRecordInfo(req RecordRequest) bool {
// Standard: keine Info-Logs (wie auto-deleted), außer du setzt REC_VERBOSE=1
if verboseLogs() {
return true
}
return false
}