Merge branch 'timeout-deploys' into 'rails'

Cancelar la tarea pendiente si tomó mas de 10 minutos

See merge request sutty/sutty!51
This commit is contained in:
fauno 2021-08-01 05:15:07 +00:00
commit 35ca1ee91c

View file

@ -5,13 +5,23 @@ class DeployJob < ApplicationJob
class DeployException < StandardError; end class DeployException < StandardError; end
# rubocop:disable Metrics/MethodLength # rubocop:disable Metrics/MethodLength
def perform(site, notify = true) def perform(site, notify = true, time = Time.now)
ActiveRecord::Base.connection_pool.with_connection do ActiveRecord::Base.connection_pool.with_connection do
@site = Site.find(site) @site = Site.find(site)
# Si ya hay una tarea corriendo, aplazar esta # Si ya hay una tarea corriendo, aplazar esta. Si estuvo
# esperando más de 10 minutos, recuperar el estado anterior.
#
# Como el trabajo actual se aplaza al siguiente, arrastrar la
# hora original para poder ir haciendo timeouts.
if @site.building? if @site.building?
DeployJob.perform_in(60, site, notify) if 10.minutes.ago >= time
@site.update status: 'waiting'
raise DeployException,
"#{@site.name} la tarea estuvo más de 10 minutos esperando, volviendo al estado original"
end
DeployJob.perform_in(60, site, notify, time)
return return
end end
@ -29,8 +39,11 @@ class DeployJob < ApplicationJob
end end
deploy_others deploy_others
notify_usuaries if notify
# Volver a la espera
@site.update status: 'waiting' @site.update status: 'waiting'
notify_usuaries if notify
end end
end end
# rubocop:enable Metrics/MethodLength # rubocop:enable Metrics/MethodLength