43 lines
2.0 KiB
Ruby
43 lines
2.0 KiB
Ruby
# lib/tasks/series_aparelho.rake
|
|
#
|
|
# Sincroniza o "Número de Série da Base (Aparelho)" da API do SimpliRoute para a
|
|
# tabela series_aparelho (ver SincronizarSeriesAparelhoJob).
|
|
|
|
# Log padrão das tarefas do projeto (ver historico.rake): uma linha de início,
|
|
# uma de resultado, e o erro sobe para o cron registrar. É lambda (e não método)
|
|
# para não pendurar um `executar` global no Object.
|
|
executar = lambda do |&bloco|
|
|
puts "[#{Time.current}] Sincronizando número de série da base (SimpliRoute)..."
|
|
r = bloco.call
|
|
puts "[#{Time.current}] OK — #{r[:datas]} data(s) varrida(s), #{r[:visitas]} visita(s), #{r[:series]} série(s) gravada(s)."
|
|
puts "[#{Time.current}] AVISO — #{r[:falhas].size} data(s) sem resposta da API: #{r[:falhas].map { |f| f[:data] }.join(', ')}" if r[:falhas].present?
|
|
rescue StandardError => e
|
|
puts "[#{Time.current}] ERRO: #{e.message}"
|
|
Rails.logger.error("[simpli_route:series] #{e.message}\n#{e.backtrace.first(5).join("\n")}")
|
|
raise
|
|
end
|
|
|
|
namespace :simpli_route do
|
|
desc 'Sincroniza o número de série da base dos últimos 45 dias (cron diário)'
|
|
task series: :environment do
|
|
executar.call { SincronizarSeriesAparelhoJob.perform_now }
|
|
end
|
|
|
|
desc 'Backfill de UMA operação inteira — rake "simpli_route:series_operacao[gade_entregas_ubs_sudeste_jul_2026]"'
|
|
task :series_operacao, [:tabela] => :environment do |_t, args|
|
|
tabela = args[:tabela].to_s
|
|
if Operacao.valida?(tabela)
|
|
puts "[#{Time.current}] Backfill da operação #{tabela}..."
|
|
executar.call { SincronizarSeriesAparelhoJob.perform_now(operacao: tabela) }
|
|
else
|
|
puts "[#{Time.current}] ERRO: operação inválida (#{tabela.inspect})."
|
|
puts "Válidas: #{Operacao.nomes_validos.join(', ')}"
|
|
end
|
|
end
|
|
|
|
desc 'Backfill por período — rake "simpli_route:series_periodo[2026-07-01,2026-07-31]"'
|
|
task :series_periodo, %i[de ate] => :environment do |_t, args|
|
|
executar.call { SincronizarSeriesAparelhoJob.perform_now(de: Date.parse(args[:de]), ate: Date.parse(args[:ate])) }
|
|
end
|
|
end
|