100 lines
2.8 KiB
Go
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
|
|
}
|