diff --git a/app/jobs/deploy_job.rb b/app/jobs/deploy_job.rb index 6250cf73..48366bb9 100644 --- a/app/jobs/deploy_job.rb +++ b/app/jobs/deploy_job.rb @@ -3,6 +3,7 @@ # Realiza el deploy de un sitio class DeployJob < ApplicationJob class DeployException < StandardError; end + class DeployTimedOutException < DeployException; end # rubocop:disable Metrics/MethodLength def perform(site, notify = true, time = Time.now) @@ -16,8 +17,8 @@ class DeployJob < ApplicationJob # hora original para poder ir haciendo timeouts. if @site.building? if 10.minutes.ago >= time - @site.update status: 'waiting' - raise DeployException, + notify = false + raise DeployTimedOutException, "#{@site.name} la tarea estuvo más de 10 minutos esperando, volviendo al estado original" end @@ -37,18 +38,14 @@ class DeployJob < ApplicationJob } # No es opcional - unless @deployed[:deploy_local] - @site.update status: 'waiting' - notify_usuaries if notify - + unless @deployed[:deploy_local][:status] # Hacer fallar la tarea raise DeployException, deploy_local.build_stats.last.log end deploy_others - - # Volver a la espera - @site.update status: 'waiting' + ensure + @site&.update status: 'waiting' notify_usuaries if notify end @@ -67,12 +64,19 @@ class DeployJob < ApplicationJob def deploy_others @site.deploys.where.not(type: 'DeployLocal').find_each do |d| - status = d.deploy - build_stat = d.build_stats.last + begin + status = d.deploy + seconds = d.build_stats.last.try(:seconds) + rescue StandardError => e + status = false + seconds = 0 + + ExceptionNotifier.notify_exception(e, data: { site: site.id, deploy: d.type }) + end @deployed[d.type.underscore.to_sym] = { status: status, - seconds: build_stat.try(:seconds) || 0, + seconds: seconds || 0, size: d.size, urls: d.respond_to?(:urls) ? d.urls : [d.url] }