summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious/helpers/utils.cr28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr
index cb94b44a..7c573aba 100644
--- a/src/invidious/helpers/utils.cr
+++ b/src/invidious/helpers/utils.cr
@@ -417,9 +417,31 @@ def fetch_random_instance
filtered_instance_list = [] of String
instance_list.as_a.each do |data|
if data[1]["type"] == "https"
- if data[1]["monitor"]
- health = data[1]["monitor"].as_h["dailyRatios"][0].as_h["ratio"]
- filtered_instance_list << data[0].as_s if health.to_s.to_f > 90
+ # Makes sure the instance isn't too outdated.
+ remote_version = data[1]["stats"]["software"]["version"]
+ remote_commit_date = remote_version.as_s.match(/\d{4}\.\d{2}\.\d{2}/)
+ next if !remote_commit_date
+ remote_commit_date = Time.parse(remote_commit_date[0], "%Y.%m.%d", Time::Location::UTC)
+ local_commit_date = Time.parse(CURRENT_VERSION, "%Y.%m.%d", Time::Location::UTC)
+
+ if (remote_commit_date - local_commit_date).abs.days <= 30
+ # as_nil? doesn't exist. Thus we'll have to handle the error rasied if
+ # as_nil fails.
+ begin
+ broken_health_monitoring = data[1]["monitor"].as_nil
+ broken_health_monitoring = true if broken_health_monitoring.nil?
+ rescue TypeCastError
+ broken_health_monitoring = false
+ end
+
+ if !broken_health_monitoring
+ health = data[1]["monitor"].as_h["dailyRatios"][0].as_h["ratio"]
+ filtered_instance_list << data[0].as_s if health.to_s.to_f > 90
+ else
+ # We can't check the health if the monitoring is broken. Thus we'll just add it to the list
+ # and move on
+ filtered_instance_list << data[0].as_s
+ end
end
end
end