import_job.rb 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. module MonitoringHelper
  3. class HealthChecker
  4. class ImportJob < Backend
  5. TIMEOUT = 5.minutes
  6. def run_health_check
  7. failed_imports
  8. stuck_imports
  9. end
  10. private
  11. def import_backends
  12. ::ImportJob.backends
  13. end
  14. def failed_imports
  15. import_backends.each { |backend| single_failed_import(backend) }
  16. end
  17. def failed_import_job(backend)
  18. ::ImportJob
  19. .where(name: backend, dry_run: false)
  20. .where('finished_at >= ?', TIMEOUT.ago)
  21. .limit(1)
  22. .first
  23. end
  24. def single_failed_import(backend)
  25. job = failed_import_job(backend)
  26. return if job.blank?
  27. return if !job.result.is_a?(Hash)
  28. error_message = job.result[:error]
  29. return if error_message.blank?
  30. response.issues.push "Failed to run import backend '#{backend}'. Cause: #{error_message}"
  31. end
  32. def stuck_imports
  33. import_backends.each { |backend| single_stuck_import(backend) }
  34. end
  35. def stuck_import_job(backend)
  36. ::ImportJob
  37. .where(name: backend, dry_run: false, finished_at: nil)
  38. .where('updated_at <= ?', TIMEOUT.ago)
  39. .limit(1)
  40. .first
  41. end
  42. def single_stuck_import(backend)
  43. job = stuck_import_job(backend)
  44. return if job.blank?
  45. response.issues.push "Stuck import backend '#{backend}' detected. Last update: #{job.updated_at}"
  46. end
  47. end
  48. end
  49. end