Improve playback statistics

This commit is contained in:
syeopite 2023-12-16 13:45:33 -08:00
parent 9e8baa3539
commit 6a88c098f0
No known key found for this signature in database
GPG Key ID: A73C186DA3955A1A
3 changed files with 17 additions and 0 deletions

View File

@ -27,6 +27,12 @@ class Invidious::Jobs::StatisticsRefreshJob < Invidious::Jobs::BaseJob
"playback" => {} of String => Int64 | Float64, "playback" => {} of String => Int64 | Float64,
} }
# Latches the playback success stats from before statistics gets refreshed
# Used to ensure that the object won't get reset back to an empty object
LATCHED_PLAYBACK_STATS = {
"playback" => {} of String => Int64 | Float64,
}
private getter db : DB::Database private getter db : DB::Database
def initialize(@db, @software_config : Hash(String, String)) def initialize(@db, @software_config : Hash(String, String))
@ -65,6 +71,7 @@ class Invidious::Jobs::StatisticsRefreshJob < Invidious::Jobs::BaseJob
} }
# Reset playback requests tracker # Reset playback requests tracker
LATCHED_PLAYBACK_STATS["playback"] = STATISTICS["playback"].as(Hash(String, Int64 | Float64))
STATISTICS["playback"] = {} of String => Int64 | Float64 STATISTICS["playback"] = {} of String => Int64 | Float64
end end
end end

View File

@ -19,6 +19,8 @@ module Invidious::Routes::API::V1::Misc
else else
tracker["ratio"] = (success_count / (total_requests)).round(2) tracker["ratio"] = (success_count / (total_requests)).round(2)
end end
else
return (Invidious::Jobs::StatisticsRefreshJob::STATISTICS.merge Invidious::Jobs::StatisticsRefreshJob::LATCHED_PLAYBACK_STATS).to_json
end end
end end

View File

@ -89,6 +89,14 @@ def extract_video_info(video_id : String, proxy_region : String? = nil)
} }
else else
reason = nil reason = nil
# Although technically not a call to /videoplayback, because we are counting requests
# in which YouTube returned a "this content is not available" video as a failure,
# we should also count requests that returned the correct video as a success
# in order to ensure a correct and accurate ratio
playback_stats = get_playback_statistic()
playback_stats["totalRequests"] += 1
playback_stats["successfulRequests"] += 1
end end
# Don't fetch the next endpoint if the video is unavailable. # Don't fetch the next endpoint if the video is unavailable.