From c16852de4995d1d9ae27de9467fa9774b09dbced Mon Sep 17 00:00:00 2001 From: Fijxu Date: Sun, 20 Apr 2025 02:18:50 -0400 Subject: [PATCH 14/17] metrics: add live, premiere and private video errors --- src/lib/helpers/metrics.ts | 42 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/src/lib/helpers/metrics.ts b/src/lib/helpers/metrics.ts index e1b0b73..ae778f2 100644 --- a/src/lib/helpers/metrics.ts +++ b/src/lib/helpers/metrics.ts @@ -78,6 +78,7 @@ export class Metrics { unplayable: boolean; contentCheckRequired: boolean; loginRequired: boolean; + liveStreamOffline: boolean; unknown: string | undefined; } @@ -85,6 +86,7 @@ export class Metrics { unplayable: false, contentCheckRequired: false, loginRequired: false, + liveStreamOffline: false, unknown: undefined, }; @@ -100,6 +102,10 @@ export class Metrics { case "LOGIN_REQUIRED": error.loginRequired = true; return error; + // Livestreams + case "LIVE_STREAM_OFFLINE": + error.liveStreamOffline = true; + return error; default: error.unknown = status; return error; @@ -118,6 +124,10 @@ export class Metrics { signInToConfirmAge: boolean; signInToConfirmBot: boolean; selfHarmTopics: boolean; + liveStreamOffline: boolean; + liveEventWillBegin: boolean; + premiere: boolean; + privateVideo: boolean; unknown: string | undefined; } @@ -125,6 +135,10 @@ export class Metrics { signInToConfirmAge: false, signInToConfirmBot: false, selfHarmTopics: false, + liveStreamOffline: false, + liveEventWillBegin: false, + premiere: false, + privateVideo: false, unknown: undefined, }; @@ -142,6 +156,20 @@ export class Metrics { ): error.selfHarmTopics = true; return error; + // Offline Livestreams + case reason?.includes("Offline."): + error.liveStreamOffline = true; + return error; + // Livestreams that are about to start + case reason?.includes("This live event will begin in a few moments"): + error.liveEventWillBegin = true; + return error; + case reason?.includes("Premiere will begin shortly") || reason?.includes("Premieres in"): + error.premiere = true; + return error; + case reason?.includes("Private video"): + error.privateVideo = true; + return error; default: error.unknown = reason; return error; @@ -193,7 +221,11 @@ export class Metrics { this.innertubeFailedRequest.inc(); const status = this.checkStatus(videoData); - if (status.contentCheckRequired || status.unplayable) return; + if ( + status.contentCheckRequired || + status.unplayable || + status.liveStreamOffline + ) return; if (status?.unknown) { this.innertubeErrorStatusUnknown.labels({ @@ -202,7 +234,13 @@ export class Metrics { } const reason = this.checkReason(videoData); - if (reason.signInToConfirmAge) return; + if ( + reason.signInToConfirmAge || + reason.liveStreamOffline || + reason.liveEventWillBegin || + reason.premiere || + reason.privateVideo + ) return; if (reason.unknown) { this.innertubeErrorReasonUnknown.labels({ -- 2.49.0