diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr index a067b142..c95532a1 100644 --- a/src/invidious/helpers/utils.cr +++ b/src/invidious/helpers/utils.cr @@ -390,7 +390,7 @@ def gen_videoplayback_proxy_list if !CONFIG.external_videoplayback_proxy.empty? external_videoplayback_proxy = "" CONFIG.external_videoplayback_proxy.each do |proxy| - external_videoplayback_proxy += " #{proxy[:url]}" + external_videoplayback_proxy += " #{proxy}" end else external_videoplayback_proxy = "" diff --git a/src/invidious/http_server/utils.cr b/src/invidious/http_server/utils.cr index 947d5303..eecfb1cc 100644 --- a/src/invidious/http_server/utils.cr +++ b/src/invidious/http_server/utils.cr @@ -4,51 +4,25 @@ module Invidious::HttpServer module Utils extend self - @@proxy_list : Array(String) = [] of String - @@current_proxy : String = "" - @@count : Int64 = Time.utc.to_unix + @@proxy_alive : String = "" def check_external_proxy CONFIG.external_videoplayback_proxy.each do |proxy| begin - response = HTTP::Client.get("#{proxy[:url]}/health") + response = HTTP::Client.get(proxy) if response.status_code == 200 - if @@proxy_list.includes?(proxy[:url]) - next - end - if proxy[:balance] - @@proxy_list << proxy[:url] - LOGGER.debug("CheckExternalProxy: Adding proxy '#{proxy[:url]}' to the list of proxies") - end - break if proxy[:balance] == false && !@@proxy_list.empty? - @@proxy_list << proxy[:url] + @@proxy_alive = proxy + LOGGER.debug("CheckExternalProxy: Proxy set to: '#{proxy}'") + break end rescue - if @@proxy_list.includes?(proxy[:url]) - LOGGER.debug("CheckExternalProxy: Proxy '#{proxy[:url]}' is not available, removing it from the list of proxies") - @@proxy_list.delete(proxy[:url]) - end - LOGGER.debug("CheckExternalProxy: Proxy '#{proxy[:url]}' is not available") + LOGGER.debug("CheckExternalProxy: Proxy '#{proxy}' is not available") end end - LOGGER.trace("CheckExternalProxy: List of proxies:") - LOGGER.trace("#{@@proxy_list.inspect}") - end - - # TODO: If the function is called many times, it will return a random - # proxy from the list. That is not how it should be. - # It should return the same proxy, in multiple function calls - def select_proxy - if (@@count - (Time.utc.to_unix - 30)) <= 0 - return if @@proxy_list.size <= 0 - @@current_proxy = @@proxy_list[Random.rand(@@proxy_list.size)] - LOGGER.debug("Current proxy is: '#{@@current_proxy}'") - @@count = Time.utc.to_unix - end end def get_external_proxy - return @@current_proxy + return @@proxy_alive end def proxy_video_url(raw_url : String, *, region : String? = nil, absolute : Bool = false) @@ -61,8 +35,8 @@ module Invidious::HttpServer url.query_params = params if absolute - if !(proxy = get_external_proxy()).empty? - return "#{proxy}#{url.request_target}" + if !@@proxy_alive.empty? + return "#{@@proxy_alive}#{url.request_target}" else return "#{HOST_URL}#{url.request_target}" end diff --git a/src/invidious/jobs/check_external_proxy.cr b/src/invidious/jobs/check_external_proxy.cr index 28b57795..7a4a2080 100644 --- a/src/invidious/jobs/check_external_proxy.cr +++ b/src/invidious/jobs/check_external_proxy.cr @@ -5,9 +5,8 @@ class Invidious::Jobs::CheckExternalProxy < Invidious::Jobs::BaseJob def begin loop do HttpServer::Utils.check_external_proxy - HttpServer::Utils.select_proxy - LOGGER.info("CheckExternalProxy: Done, sleeping for 15 seconds") - sleep 15.seconds + LOGGER.info("CheckExternalProxy: Done, sleeping for 1 minute") + sleep 1.minutes Fiber.yield end end